On Mon, 2020-05-18 at 20:04 +0000, Tim Murphy wrote: > Re comparing strings: we already have ifeq and what I have often > wanted is to have a function equivalent so I can use it in > expressions. As bad as ifeq may be from the point of view of locale > this need be no better to be an improvement over the unpleasant hacks > I've had to use to get the same effect with more complicated > expressions.
The issue is that conditionals have a very different syntax than an inline function: ifeq (arg1, arg2) ifeq 'arg1' 'arg2' ifeq "arg1" "arg2" ifeq "arg1" 'arg2' ifeq 'arg1' "arg2" You can see that here we are actually accepting and parsing quotes: it's the only place in GNU make syntax where make cares about quotes. How would this translate to an inline function? Do we need to invent quote matching and parsing there as well? If we don't have some kind of quoting it will be very hard to manage string comparisons where strings contain whitespace and/or operators: x = does x eq y = y z = $(expr $x ne $y) will run expr with arguments "does x eq ne y" which is not going to be parsed correctly. The reason (I assume) GNU make accepts so many different delimiters is that it doesn't contain a robust escape sequence implementation (personally I think this was the wrong choice because it assumes you know the contents of your variables sufficiently to pick a set of delimiters that won't conflict--I would have preferred a single set of delimiters and a 100% reliable escape character mechanism across the entire grammar--at least outside of recipes--plus maybe a function that will "enscapify" a string). This kind of thing is why I'd prefer to separate out the different proposals as some answers are much simpler than others.