Makefile Probleme mit DESTDIR und Gen2VDR

  • Hi,
    anscheinend hat MegaV0lt Probleme mit der neuesten Änderungen mit den Widgets in meinem Skin.
    Das ganze auch nachzulesen hier.


    Im Makefile mache ich ja folgendes

    Code
    DEFINES += -DWIDGETFOLDER='"$(DESTDIR)$(LIBDIR)/$(PLUGIN)/widgets"'


    um den Pfad der Widgets im Quellcode zu haben.


    Das Problem ist das das DESTDIR bei MegaV0lt auf das src Verzeichnis zeigt.
    Also die Ausgabe beim make sieht wie folgt bei Ihm aus:

    Code
    -DWIDGETFOLDER='"/usr/local/src/vdr-2.1.6/PLUGINS/lib/skinflatplus/widgets"'


    Dies ist natürlich falsch!


    Beim make install wo folgendes verwendet wird:

    Code
    mkdir -p $(DESTDIR)$(LIBDIR)/$(PLUGIN)/widgets
    cp -r widgets/* $(DESTDIR)$(LIBDIR)/$(PLUGIN)/widgets


    Sieht aber alles wieder gut aus:

    Code
    mkdir -p /usr/local/lib/vdr/skinflatplus/widgets
    cp -r widgets/* /usr/local/lib/vdr/skinflatplus/widgets


    Wieso ist das DESTDIR beim make auf das src-Verzeichnis und beim make install richtig auf das lib-Verzeichnis :wand


    Ich bin nun leider kein Makefile Guru und kenne mich auch 0 mit Gen2VDR aus deswegen hoffe ich das hier jemand mehr dazu sagen kann.
    Ich weiß nur das es bei mir unter Ubuntu funktioniert :P


    Grüße
    Martin

  • Bei den DEFINES musst du DESTDIR einfach weglassen, das ist falsch.
    DESTDIR ist für Paketmanager, die diese Variable setzen, um die Dateien nicht direkt ins System zu installieren, sondern in ein eigenes Verzeichnis, damit das dann eingepackt werden kann.


    Der Define für das Plugin, um den eingestellten Ordner zu bekommen, muss dann natürlich ohne DESTDIR übergeben werden, weil zur Laufzeit das DESTDIR nicht da ist.
    Würde bei einem Debian-Paket auch schief gehen.


    Lars.

  • Wie sieht denn LIBDIR bei Gen2VDR aus? Ist das ein absoluter Pfad? Wenn nicht, ist das ein Fehler, denn der sollte schon gerne absolut sein.


    Lars.

  • Normalerweise ist DESTDIR nur bei "make install" gesetzt, beim normalen "make" nicht, weil es da nicht relevant ist.


    Lars.

  • MegaV0lt:
    Bei mir hat das funktioniert, also nimm bitte mal bei der Zeile das DESTDIR raus so das es so aussieht:

    Code
    DEFINES += -DWIDGETFOLDER='"$(LIBDIR)/$(PLUGIN)/widgets"'


    Wenn das auch funktioniert kommt das heute abend ins git.


    Grüße
    Martin

  • Leider nicht:

    Code
    g++ -Wall -march=native -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -fPIC -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE  -I/usr/local/src/vdr-2.1.6/include -c -DUSE_WAREAGLEICON -DPLUGIN_NAME_I18N='"skinflatplus"' -DVDRLOGO=\"vdrlogo_gen2vdr\" -DWIDGETFOLDER='"/usr/local/src/vdr-2.1.6/PLUGINS/lib/skinflatplus/widgets"' -I/usr/local/src/vdr-2.1.6/include -fopenmp -DMAGICKCORE_HDRI_ENABLE=0 -DMAGICKCORE_QUANTUM_DEPTH=16 -fopenmp -DMAGICKCORE_HDRI_ENABLE=0 -DMAGICKCORE_QUANTUM_DEPTH=16 -fopenmp -DMAGICKCORE_HDRI_ENABLE=0 -DMAGICKCORE_QUANTUM_DEPTH=16 -I/usr/include/ImageMagick-6 -I/usr/include/freetype2  -o config.o config.c

    Wie finde ich raus wie LIBDIR gesetzt ist?


    Vielleicht hier: (vdr.pc)

  • Du kannst mal bei der all: Zeile folgendes Eintragen


    Code
    all: $(SOFILE) i18n $(info $$LIBDIR is [${LIBDIR}])


    Das habe ich jetzt auf die schnelle gefunden, geht bestimmt auch eleganter :)


    Dann wird dir LIBDIR ausgegeben, gesetzt wird LIBDIR meines Wissens in der Make.config vom VDR.

  • Ja, libdir sieht man auch in der vdr.pc. Wie übersetzt du den vdr denn? Benutzt du eine Make.config? Wie sieht die aus?
    Soll der bei dir aus dem Source-Verzeichnis heraus laufen?


    Lars.

  • Der spuckt schon beim make clean was aus:

    Code
    hdvdr01 skinflatplus # make clean
    $LIBDIR is [/usr/local/src/VDR/PLUGINS/lib]
    $LIBDIR is [/usr/local/src/VDR/PLUGINS/lib]


    Gebaut wird mit
    https://dl.dropboxusercontent.…_config/bin/build-vdr2.sh
    und
    https://dl.dropboxusercontent.…V5/_config/bin/instvdr.sh
    Da hab ich schon was eingebaut, damit ein Symlink erzeugt wird; Als Notlösung...


    Makefile vom VDR:
    https://dl.dropboxusercontent.…local/src/VDR/Make.config
    Da hab ich nur die CFLAGS angepasst (-march=native)


    PS: Beim Bauen mit build-vdr2.sh kommt:

    Code
    *** Plugin skinflatplus:
    $LIBDIR is [/usr/local/src/vdr-2.1.6/PLUGINS/lib]
    $LIBDIR is [/usr/local/src/vdr-2.1.6/PLUGINS/lib]
    ...
  • Wenn ich im vdr Ordner ein

    Code
    make LCLBLD=1


    aufrufe dann baut er bei mir es auch falsch. Dann steht bei mir auch der src Ordner in WIDGETFOLDER. Wie bekommt man das denn nun sauber gelöst das es mit alten und neuen Makefiles funktioniert bzw. das es mit LCLBLD=1 funktioniert :)

  • LCLBLD darf *nicht* gesetzt sein, wenn man Plugins außerhalb vom VDR baut. So einfach ist das.


    Das ganze ist dafür gedacht, wenn man alles in einem Tree haben will. Wäre wohl besser gewesen wenn Klaus das kommentiert und mit einem Hinweis versehen hätte. Sorgt für mehr Verwirrung als die Sache Wert ist...

  • Genau dafür ist das build-vdr2.sh. Die Plugins werden mit LCLBLD=1 gebaut. und die failed später nochmal ohne. Im instvdr wird aber make install ohne LCLBLD aufgerufen... Funktionierte auch bisher einwandfrei hier. Erst seit die Widgets in das LIBDir gewandert sind gibt es Probleme. Aber ich kenne mich da halt zu wenig aus um mitreden zu können.
    Wenn es nach mir ginge, würden die Widges (Sind ja nur Skripte) wieder in das vorherige Dir wandern. Ist auch einfacher, da man die Skripte ja sowieso an das eigene System anpassen muss.

  • LCLBLD ist dafür da, wenn man den vdr und die Plugins genau von dort starten will, wo man baut. Das macht bei einer Distribution keinen Sinn.


    martin:
    Wenn das DESTDIR bei den DEFINES weg ist, dann ist dein Makefile richtig. Da solltest du auch nicht weiter dran rumschrauben, denn wenn es von außen falsch vorgegeben wird, kannst du da nichts retten.


    Lars.

  • Bei LCLBLD macht man kein "make install", deshalb ist es unsinnig, den vdr mit LCLBLD zu übersetzen, wenn man ihn dann doch woanders hin installieren möchte.
    Beim normalen "make" werden die Plugins erst mal unter PLUGINS/lib geparkt, das "make install" installiert sie dann an die richtige Stelle laut Make.config mit passender Endung hinten dran für die Versionsnummer.


    Warum benutzt gen2vdr denn LCLBLD?


    Lars.

Jetzt mitmachen!

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