Mir ist heute aufgefallen, dass sowohl Make.config als auch Make.global diesen Block enthalten:
Ich habe dann versucht, diesen Block aus der Make.config zu entfernen, was aber dazu führt, dass die Plugins nicht kompilieren. fPIC fehlt.
Wenn man sich das Konzept genauer anschaut, sieht man recht schnell, dass da etwas nicht passt.
Das Haupt-Makefile startet mehr oder weniger nur das Plugin-Makefile (Das ist ja noch in Ordnung so)
Im Plugin Makefile:
Erst wird PLUGIN definiert (PLUGIN = dvbsddevice)
Dann werden die plugineigenen Compileparameter gesetzt.
Danach wird die Make.global eingelesen, also wird fPIC hinzugefügt.
Danach liest das Makefile die Make.config ein, durch die dann die Make.global überschrieben wird. Wir stehen also wieder am Anfang ohne fPIC.
Folgende Lösungen wären möglich:
-
CXXFLAGS und CFLAGS in der Make.config bekommen ein "+=" anstatt "="
Nachteil: Wenn Flags als Umgebungsvariable gesetzt sind, werden diese eingelesen und landen dann vor den Flags, die in der Make.config gesetzt wurden.
Eigentliches Ziel, wenn man Flags als Umgebungsvariable setzt ist ja eigentlich, dass diese komplett überschrieben werden. Dazu wäre aber wiederum ein "?=" notwendig. -
In allen Plugin-Makefiles wird die Reihenfolge von Make.global und Make.config getauscht.
Nachteil: Alle Plugin-Makefiles müssen angefasst werden
Vorteil: Problem ein für alle mal gelöst -
Der Block bleibt stehen
Nachteil: Die Make.global wird ad absurdum geführt.
Vorteil: Minimalinvasiv
Ich halte Möglichkeit 2 für die Beste, daher habe ich gleich mal einen Patch für den VDR erstellt. (dvbhddevice Compilefix von UFO ist enthalten)
Mir ist klar, dass dadurch wieder alle Plugins angefasst werden müssen. Mich wundert es nur, dass das Problem nicht ehr aufgefallen ist.
Edit: Um es bei den Plugins leichter zu machen habe ich noch zwei Patches angehängt, die in so ziemlich jedem Plugin sofort funktionieren sollten.