On 2013-07-27 22:27, Alexander Pyhalov wrote:
3) gmake clean fails on components/nvidia.
Does someone have any idea why it needs this (
https://github.com/OpenIndiana/oi-userland/blob/oi/hipster/components/nvidia/Makefile
):
clean::
[ -d $(BUILD_DIR) ] && rm -rf $(BUILD_DIR)
Shouldn't this be transformed just to
clean::
rm -rf $(BUILD_DIR)
While IMHO this can be replaced, as long as "rm" on a missing target
does not return an error, note that gmake interprets the Makefile
line by line and passes each one to the shell separately. Thus any
non-zero returns are considered errors; in this case - if the dir
is missing, the test block would return non-zero. I had my share of
such trickery in a few Makefiles recently; one way to work around
is to use complete if blocks, along with backslashes to concatenate
multi-line commands like this:
clean:
if [ -d $(BUILD_DIR) ]; then \
rm -rf $(BUILD_DIR); \
else true; fi
Overall result would be either return code of "rm" or of "true",
and result of the if-test itself won't pollute the logic.
Note that a "simple" solution like the following may be wrong:
clean:
[ -d $(BUILD_DIR) ] && rm -rf $(BUILD_DIR) || true
I believe it would also return "true" if the "rm" step fails (i.e.
running on a read-only dataset/share).
HTH,
//Jim
_______________________________________________
oi-dev mailing list
[email protected]
http://openindiana.org/mailman/listinfo/oi-dev