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
Dieses Archiv wurde generiert von hypermail 2.1.2 : 11. Mar 2002 CET