Redundanz in der Make.config und Make.global

  • Ja gut, man könnte aber trotzdem die Make.global automatisch generieren.


    Im Prinzip so wie jetzt. Nur statt -fPIC mit += hinzuzufügen einfach komplett den Parameterstrang, mit dem der VDR gebaut wurde, hineinschreiben und da dann -fPIC dazu.


    Ich muss da dann wieder das Beispiel Archlinux bringen, weil ich hauptsächlich das benutze:


    Beim Erstellen eines Pakets wird CFLAGS und CXXFLAGS exportiert (von dem Programm makepkg) und danach dann make aufgerufen, wie in der PKGBUILD-Datei definiert.


    Code
    CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2"
    CXXFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2"
    cd vdr-src
    make


    Wenn man jetzt davon ausgeht, dass die Make.config keine CFLAGS und CXXFLAGS mehr beinhaltet könnte man dann automatisch beim make eine Make.global generieren, die so aussieht:


    Code
    CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2 -fPIC"
    CXXFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2 -fPIC"


    ifdef PLUGIN braucht man an der Stelle dann auch nicht mehr



    Ein im Nachhinein aufgerufenes make VDRDIR=/usr/include/vdr würde dann wieder die richtigen Parameter bekommen. Die Pluginmakefiles bräuchten gar keine CFLAGS und CXXFLAGS mehr...

  • Ich muss da dann wieder das Beispiel Archlinux bringen, weil ich hauptsächlich das benutze:


    Jup, wäre ja schön ne Lösung zu finden die für alle Bauvarianten funktioniert.


    ifdef PLUGIN braucht man an der Stelle dann auch nicht mehr


    Für diese Variante, aber für andere Bauvarianten schon.
    Siehe mein vorheriges Post, ich denke es wäre sinnig die speziellen Parameter für die Plugins im Pluginmakefile hinzuzufügen (PLUGIN_CFLAGS/PLUGIN_CXXFLAGS). Das -fpic würde dann per default genommen (weil "PLUGIN_CFLAGS=-fpic" und "PLUGIN_CXXFLAGS=-fpic" in der make.global (auch in der generierten) stehen) und jeder könnte sie auf Wusnch überschreiben (oder was anhängen).


    Die Pluginmakefiles bräuchten gar keine CFLAGS und CXXFLAGS mehr...


    Genau (die Redundanz sollte ja raus), wobei die jetzt schon absolut sinnfrei dort drinstehen, weil wegen "?=" greifen die sowieso niemals, sie verwirren durch ihre Anwesenheit nur.


    cu

  • Und in die Pluginmakefiles
    ---
    ifdef PLUGIN
    CFLAGS += $(PLUGIN_CFLAGS)
    CXXFLAGS += $(PLUGIN_CXXFLAGS)
    endif


    Das verstehe ich nicht. Warum in einem Plugin-Makefile nochmal überprüfen, ob PLUGIN gesetzt ist. Ist es das nicht zwangsläufig?


    Warum "+="? Wenn ich jetzt von dem Fall ausgehe, dass die Make.config keine FLAGS hat und das Pluginmakefile auch nicht, dann müssten doch in der Make.global die Kompilierparameter mit denen der VDR gebaut wurde inklusive -fPIC stehen.


    Und warum du es jetzt PLUGIN_CFLAGS nennen willst, ist mir auch nicht ganz klar.


    Pluginmakefile:


    Es werden erzwungenermaßen die Parameter aus der Make.global genommen.




    Und in der Make.global (Am Beispiel Archlinux Flags, nachdem die Make.global generiert wurde)

    Code
    CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2 -fPIC"
    CXXFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2 -fPIC"
  • Das verstehe ich nicht. Warum in einem Plugin-Makefile nochmal überprüfen, ob PLUGIN gesetzt ist. Ist es das nicht zwangsläufig?


    Stimmt, das war blödsinn, das ifdef kann weg.


    Warum "+="? Wenn ich jetzt von dem Fall ausgehe, dass die Make.config keine FLAGS hat und das Pluginmakefile auch nicht, dann müssten doch in der Make.global die Kompilierparameter mit denen der VDR gebaut wurde inklusive -fPIC stehen.


    Und warum du es jetzt PLUGIN_CFLAGS nennen willst, ist mir auch nicht ganz klar.


    Die Idee ist das man da explizit zentral die Extra Optionen für die Plugins setzen kann.


    D.h. in der Make.global (die evtl. bei deiner Distribution on the Fly erzeugt wird) steht
    ---
    PLUGIN_CXXFLAGS?=-fpic
    ---
    und gut ist. Das ist der VDR Build Default wenn man nix spezielles will.


    Aber wenn man da spezielle Wünsche hat (was auch immer, mir fällt da gerade nix sinnvolles ein) könnte man per Make.config
    --
    PLUGIN_CXXFLAGS=-fpic -foo
    --
    oder in der Make Kommandozeile (z.B. beim DebianPaketbau in der debian/rules)
    --
    Make PLUGIN_CXXFLAGS="-fpic -foo"
    --
    setzen und das würde dann automatisch für alle Plugins greifen.


    Das war so die Idee.


    cu

  • OK, du gehst davon aus, dass CFLAGS/CXXFLAGS bereits definiert ist und nur noch -fPIC dazu muss.


    Das funktioniert aber wieder nur bei den jeweiligen Paketbau-Systemen.
    Wenn man jetzt manuell ein Plugin entpackt und dieses manuell mit "make VDRDIR=/usr/include/vdr" kompiliert, sind keine Parameter vordefiniert.


    Oder sind CFLAGS und CXXFLAGS bei Debian feste Umgebungsvariablen, die immer definiert sind?

  • OK, du gehst davon aus, dass CFLAGS/CXXFLAGS bereits definiert ist und nur noch -fPIC dazu muss.


    Genau, das ist die Idee.


    Wenn man jetzt manuell ein Plugin entpackt und dieses manuell mit "make VDRDIR=/usr/include/vdr" kompiliert, sind keine Parameter vordefiniert.


    Doch, die Make.global liegt ja unter /usr/include/vdr/Make.global und wird automatisch eingebunden.


    Oder wie ist das JETZT auf diesen systemen? Weil jetzt muss ja auch schon eine Make.global vorhanden sein (weil sie wird ja so includet das sie da sein muss).


    Oder sind CFLAGS und CXXFLAGS bei Debian feste Umgebungsvariablen, die immer definiert sind?


    Nicht wenn du ganz normal Make auf der Kommandozeile aufrufst (Dann greifen die aus den VDR Makefile). Aber wenn du ein Paket baust (also was zum binären Release baust) dann werden die automatisch mit den Distributionsdefaults gesetzt.


    cu

  • Eventuell wieder ein Missverständnis.


    Es gibt zwei Arten, ein Plugin zu kompilieren.


    1. Aus dem VDR Source heraus über das VDR-Makefile
    2. Direkt im Pluginsource über das Plugin-Makefile mit "make VDRDIR=/usr/include/vdr"


    Bei 1. Werden die CFLAGS aus dem VDR-Makefile übernommen, dein Vorschlag würde also funktionieren
    Bei 2. Würde nur das -fPIC aus der Make.global benutzt werden, der Rest fehlt, weil die Plugin-Makefiles ja keine CFLAGS haben sollen.


    Wegen 2. habe ich ja gesagt, dass die vollständigen CFLAGS in der Make.global enthalten sein muss.


    Erreicht wird das über, wenn man folgendes dem VDR-Makefile hinzufügt.


  • Bei 2. Würde nur das -fPIC aus der Make.global benutzt werden, der Rest fehlt, weil die Plugin-Makefiles ja keine CFLAGS haben sollen.


    Wegen 2. habe ich ja gesagt, dass die vollständigen CFLAGS in der Make.global enthalten sein muss.


    Ach so. Ja, meine Idee war ja auch die CFLAGS ind die Make.global zu packen.


    Also im Prinzip so


    [Make.global]


    Und in den Pluginmakefiles dann das raus
    ---
    ### The C++ compiler and options:


    CXX ?= g++
    CXXFLAGS ?= -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses
    ---


    und das rein
    ---
    CFLAGS += $(PLUGIN_CFLAGS)
    CXXFLAGS += $(PLUGIN_CXXFLAGS)
    ---


    Ich glaube damit sind wir auf dem selben Stand und damit sollten auch alle (egal ob Make install Nutzer oder Paketbauer der Distributionen) glücklich sein. Und die Redundanz ist weg. Oder übersehe ich da was?


    Nur beim alten 1.6er müsste man dann ne Make.global anlegen (Ich denke das ist zu verkraften ;) ). Und bei allen Plugins müssten die Makefiles angepasst werden. Aber klaus ist ja eh gerade mutig dabei alte Zöpfe abzuschneiden. Und besser jetzt als nach Version 2.0 damit anfangen.


    cu

  • Ja, das sieht doch ganz gut aus.


    Mir gefällt PLUGIN_CFLAGS und PLUGIN_CXXFLAGS nicht so richtig.


    Muss man davon ausgehen, dass die beiden für jedes Plugin anders sein sollen/können?
    Ansonsten könnte ich mir auch gut vorstellen, diese beiden schon beim Erstellen der Make.global hinten mit an die CFLAGS zu packen


    Code
    @echo "CC       = $(CC)" >> $@
    	@echo "CFLAGS   = $(CFLAGS) $(PLUGIN_CFLAGS)" >> $@
    	@echo "CXX      = $(CXX)" >> $@
    	@echo "CXXFLAGS = $(CXXFLAGS) $(PLUGIN_CXXFLAGS)" >> $@


    Dann müsste man das nicht im Plugin-Makefile wieder zurechtrücken.

  • Ja, das sieht doch ganz gut aus.


    Mir gefällt PLUGIN_CFLAGS und PLUGIN_CXXFLAGS nicht so richtig.


    Muss man davon ausgehen, dass die beiden für jedes Plugin anders sein sollen/können?


    Gute Frage, ich dachte eher das die Möglichkeit besteht das man da evtl. einen weiteren Parameter für ALLE Plugins voreinstellen könnte.


    Braucht ein Plugin spezielle Parameter werden sie ja im Pluginmakefile individuell angehängt.


    Ansonsten könnte ich mir auch gut vorstellen, diese beiden schon beim Erstellen der Make.global hinten mit an die CFLAGS zu packen


    Code
    @echo "CC       = $(CC)" >> $@
    	@echo "CFLAGS   = $(CFLAGS) $(PLUGIN_CFLAGS)" >> $@
    	@echo "CXX      = $(CXX)" >> $@
    	@echo "CXXFLAGS = $(CXXFLAGS) $(PLUGIN_CXXFLAGS)" >> $@


    Dann müsste man das nicht im Plugin-Makefile wieder zurechtrücken.


    Aber dann wird der VDR auch mit -fpic gebaut (weil die CFLAGS in Make.global gelten auch für den VDR bau), ich denke nicht das ist Sinn der Sache.


    BTW: Aus dem VDR Makefile kann das folgende dann auch raus (dann gleich danach wird die Make.global eh zwingend eingebunden) weil das wird dann eh nie benutzt wenn es schon in der Make.global steht.
    -----
    CC ?= gcc
    CFLAGS ?= -g -O3 -Wall


    CXX ?= g++
    CXXFLAGS ?= -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses
    -----
    dann ist die Redundanz komplett weg.


    cu

  • Aber dann wird der VDR auch mit -fpic gebaut (weil die CFLAGS in Make.global gelten auch für den VDR bau), ich denke nicht das ist Sinn der Sache.


    BTW: Aus dem VDR Makefile kann das folgende dann auch raus (dann gleich danach wird die Make.global eh zwingend eingebunden) weil das wird dann eh nie benutzt wenn es schon in der Make.global steht.


    Wird er nicht. Ich würde nämlich die Make.global im VDR-Makefile gar nicht includen.



    Ich dachte mir das so: VDR-Makefile beinhaltet CFLAGS, CXXFLAGS, diese werden dann zusammen mit -fPIC in die Make.global geschrieben. Die Plugins includen dann nur noch die Make.global, haben selbst keine CFLAGS, CXXFLAGS mehr.



    Also die Make.global auf Basis des Makefiles nur für die Plugins generieren. Ich hoffe du verstehst wie ich das meine, ansonsten fummel ich mal schnell einen Patch zusammen, der das verdeutlicht.


    Die Make.global liegt dann im Includedir und ist damit auch noch verfügbar, wenn der VDR-Source gelöscht ist.

  • Wird er nicht. Ich würde nämlich die Make.global im VDR-Makefile gar nicht includen.


    OK.


    Ich dachte mir das so: VDR-Makefile beinhaltet CFLAGS, CXXFLAGS, diese werden dann zusammen mit -fPIC in die Make.global geschrieben. Die Plugins includen dann nur noch die Make.global, haben selbst keine CFLAGS, CXXFLAGS mehr.


    OK, aber die Make.config muss von den Plugins trozdem noch included werden (nach der Make.global). Und wenn in der Make.config CXXFLAGS setzt (weil wegen, man will das über die Make.config konfigurieren) kommen wir wieder zum ursprünglichen Problem.



    Also die Make.global auf Basis des Makefiles nur für die Plugins generieren. Ich hoffe du verstehst wie ich das meine, ansonsten fummel ich mal schnell einen Patch zusammen, der das verdeutlicht.


    Jup, ich verstehe das schon. Ich war jetzt nur nicht auf die Idee gekommen die generieren zu lassen.


    cu

  • Ja, aber in der Make.config stehen auch Konfigurationen für die Plugins wenn man den VDR so baut wie klaus es sich wohl gedacht hat (also ohne /usr/include/vdr).


    In meiner Make.config steht z.B. auch


    Weil die Make.config wird ja auch von den Plugins included damit man für diese Konfigurationen nicht in den Plugin Makefiles rumfummeln mus. So hat man alles an einer Stelle und muss bei den Updates der Pluginquellen nicht dran denken die Konfiguraton aus den alten Plugin Makefiles zu übernehmen.


    Und spätestens wenn man in /usr/local/src/vdr/PLUGINS/src/epgsearch "make all" tippt um mal schnell nur das neue epgsearch zu bauen dann fehlt diese Konfiguration wenn die Make.config nicht vom plugin Makefile included wird.


    cu

  • Ich weiß ja nicht....


    Warum nicht einfach den einfachen, pragmatischen Weg? Reihenfolge der Includes tauschen und gut.


    Wenn ich die Diskussion so verfolge, dann wird bisher nur die Situation berücksichtigt, dass beim "make" irgendwie CFLAGS mitgegeben werden. Was, wenn jemand einfach nur nach "kls-Standard" den VDR bauen will. Also in den Source wechseln und "make"?


    Meiner Ansicht nach war die Idee der "Make.global", dass hier vom Entwickler relevante Konfigurationsschritte durchgeführt werden. Diese sollten aber immer auf die von außen zugeführten Werte wirken. Diese können üblicherweise als Parameter an "make", als Umgebungsvariable oder beim VDR halt über "Make.config" kommen.


    Die "Make.config" macht der Distributor ohnehin selber und wenn er die schon in den Source platziert, dann kann er bei dem Schritt auch seine CFLAGS dort mit integrieren.

  • Das Makefile ist Teil des Plugin Sourcecodes und sollte dem Entwickler überlassen werden. Unter Umständen macht es Sinn, mehrere Konfigurationen oder mehrere make Targets einzubauen, z.B. für Versionen mit Debugging oder Setzen von Variablen.

  • Das Makefile ist Teil des Plugin Sourcecodes und sollte dem Entwickler überlassen werden.


    Das will den Entwicklern ja auch niemand nehmen.


    Unter Umständen macht es Sinn, mehrere Konfigurationen oder mehrere make Targets einzubauen, z.B. für Versionen mit Debugging oder Setzen von Variablen.


    Unter Umständen hat der User aber auch keine Lust sich in jede Entwickler Extrawurst reinzuarbeiten ;)



    Was stört dich denn an den Ideen hier? Weil eigentlich betreffen die die Plugin Makefiles ja nicht im geringsten.


    cu

  • Wer für ein Plugin bestimmte compiler flags setzen will, für den ist hier nichts redundant.

Jetzt mitmachen!

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