Subject: Re: pkg/33870: obfuscated code in bsd.prefs.mk regarding X11_TYPE
To: None <pkg-manager@netbsd.org, gnats-admin@netbsd.org,>
From: Roland Illig <rillig@NetBSD.org>
List: pkgsrc-bugs
Date: 06/30/2006 05:00:05
The following reply was made to PR pkg/33870; it has been noted by GNATS.
From: Roland Illig <rillig@NetBSD.org>
To: gnats-bugs@NetBSD.org
Cc:
Subject: Re: pkg/33870: obfuscated code in bsd.prefs.mk regarding X11_TYPE
Date: Fri, 30 Jun 2006 06:57:39 +0200
bad@bsd.de wrote:
> .if ((defined(X11_TYPE) && !empty(X11_TYPE:MXFree86) || \
> defined(X11_TYPE) && !empty(X11_TYPE:Mxorg)) && \
> defined(X11_TYPE) && empty(X11_TYPE:Mnative))
> X11BASE?= ${LOCALBASE}/${X11ROOT_PREFIX}
> .endif
>
> Due to the repeated checks for X11_TYPE being defined and the indentiation
> not reflecting the nesting level this is near unreadble.
>
> Does the author really expect the value of X11_TYPE to change while evaluating
> the expression? Or does he need to be told three times?
I think this code goes back to a bug in the bmake from NetBSD 1.6.2,
which had problems when the empty() function was applied to undefined
variables.
Of course, it would be much clearer to say:
.if defined(X11_TYPE)
. if (${X11_TYPE} == "XFree86" || ${X11_TYPE} == "xorg") \
&& ${X11_TYPE} != "native"
this would also reveal that there must be a typo in the "native" part.
If X11_TYPE is either "XFree86" or "xorg", it can _never_ be "native" at
the same time.
... except of course if we want it to be a _list_ of desired X11
implementations, which I doubt.
Roland