Hello prosody-dev,

First time posting here, so lemme know if I'm screwing it.

Find a patch to fix prosody.version always getting "unknown" if built
from the release tarball using `makefile`. This is the case at least on
OpenBSD, and I guess the same happens on other BSDs too if they don't
use GNU make. It would be great if it could be backported to 0.11 too.

Please keep me in CC, as I'm not subscribed to the list.

-Lucas

-- 
You received this message because you are subscribed to the Google Groups 
"prosody-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/prosody-dev/2EXRN1RFZZBH9.2WDND5U55CP6R%40sexy.is.
# HG changeset patch
# User Lucas <[email protected]>
# Date 1629000636 0
#      Sun Aug 15 04:10:36 2021 +0000
# Node ID e47e49bf103265865fc97948ce8b9d189cd54cd4
# Parent  3f1450ec37f4c388cea2868884525f06f3467f5a
makefile: fix prosody.version target

POSIX is quite explicit regarding the precedence of AND-OR lists [0]:

> The operators "&&" and "||" shall have equal precedence and shall be
> evaluated with left associativity. For example, both of the following
> commands write solely `bar` to standard output:
>       false && echo foo || echo bar
>       true || echo foo && echo bar

Given that, `prosody.version` target behaves as

        ((((((test -f prosody.release && cp ...) ||
            test -f ...) &&
            sed ...) ||
            test -f ...) &&
            hexdump ...) ||
            echo unknown > $@)

In the case of release tarballs, `prosody.release` does exist, so the
first AND pair is executed. Given that it's successful, then the first
`test -f` in the OR pair is ignored, and instead the `sed` in the AND
pair is executed. `sed` success, as `.hg_archival.txt` exists, making
the second `test -f` in the OR pair ignored, and `hexdump` in the AND
pair is executed. Now, given that `.hg` doesn't exist, it fails, so the
last `echo` is run, overwriting `prosody.version` with `unknown`.

This can be worked around placing `()` around the AND pairs. Decided to use
conditionals instead, as I think they better communicate the intention
of the block.

[0]: 
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_03

diff -r 3f1450ec37f4 -r e47e49bf1032 makefile
--- a/makefile  Sat Aug 14 13:07:29 2021 +0200
+++ b/makefile  Sun Aug 15 04:10:36 2021 +0000
@@ -101,12 +101,12 @@
        sed 's|certs/|$(INSTALLEDCONFIG)/certs/|' prosody.cfg.lua.dist > $@
 
 prosody.version:
-       test -f prosody.release && \
-               cp prosody.release $@ || \
-               test -f .hg_archival.txt && \
-               sed -n 's/^node: \(............\).*/\1/p' .hg_archival.txt > $@ 
|| \
-               test -f .hg/dirstate && \
-               hexdump -n6 -e'6/1 "%02x"' .hg/dirstate > $@ || \
-               echo unknown > $@
-
-
+       if [ -f prosody.release ]; then \
+               cp prosody.release $@; \
+       elif [ -f .hg_archival.txt ]; then \
+               sed -n 's/^node: \(............\).*/\1/p' .hg_archival.txt > 
$@; \
+       elif [ -f .hg/dirstate ]; then \
+               hexdump -n6 -e'6/1 "%02x"' .hg/dirstate > $@; \
+       else \
+               echo unknown > $@; \
+       fi

-- 
You received this message because you are subscribed to the Google Groups 
"prosody-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/prosody-dev/2EXRN1RFZZBH9.2WDND5U55CP6R%40sexy.is.

Reply via email to