Re: BSD-Make und Aufl÷sung von Variablen?

Datumsansicht Baumansicht Betreffansicht Attachement-Sicht

From: Christian Weisgerber (naddy_at_mips.inka.de)
Date: 08. Jan 2001


Michael Lestinsky <michael_at_choin.net> wrote:

> Aus einem FreeBSD-Port-Makefile: (mod_php3, Version 1.116, von mir leicht
> modifiziert)
>
> <---snip--->
> APXS= ${LOCALBASE}/sbin/apxs
>
> AP_LIBEXEC!= ${APXS} -q LIBEXECDIR
>
> RUN_DEPENDS= httpd:${PORTSDIR}/www/apache13-modssl \
> ${AP_LIBEXEC}/libphp4.so:${PORTSDIR}/choin/mod_php4

Mit Verlaub, das ist Scheiße. Damit hängt schon das Einlesen des
Makefile von einem Apache-Port ab. Was spricht dagegen, AP_LIBEXEC
fest auf ${LOCALBASE}/libexec/apache zu setzen?

Zur eigentlichen Frage:

> Wenn LOCALBASE im Makefile selbst definiert wird, dann geht es. Wird
> LOCALBASE nicht gesetzt und daher der Wert aus bsd.port.mk verwendet,
> dann geht dies nicht.

make - ganz allgemein, nicht nur BSD make - hat verzögerte Variablen-
auswertung. Wenn du »APXS=${LOCALBASE}/sbin/apxs« setzt, dann wird
das nicht unmittelbar ausgewertet, sondern erst wenn es zum Auflösen
eines Targets gebraucht wird. Weshalb es auch nichts ausmacht, dass
LOCALBASE erst später in bsd.port.mk gesetzt wird.

Bei »!=« nun wird der Ausdruck unmittelbar ausgewertet, an die
Shell übergeben, und das Ergebnis an die Variable zugewiesen. Da
LOCALBASE zu diesem Zeitpunkt noch nicht definiert ist, liefert es
nichts.

Für die (seltenen) Fälle, wo man später definierte Variablen schon
vorher auflösen muss, erlaubt die FreeBSD-Port-Infrastruktur das
Einbinden von <bsd.port.pre.mk> und <bsd.port.post.mk>.

-- 
Christian "naddy" Weisgerber                          naddy_at_mips.inka.de


Datumsansicht Baumansicht Betreffansicht Attachement-Sicht

Dieses Archiv wurde generiert von hypermail 2.1.2 : 11. Mar 2002 CET