PATCH makefile: fix prosody.version target

7 views
Skip to first unread message

Lucas

unread,
Aug 17, 2021, 3:45:02 PM8/17/21
to proso...@googlegroups.com
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

patch_prosody-makefile

Lucas

unread,
Aug 22, 2021, 7:21:36 PM8/22/21
to proso...@googlegroups.com
Weekly bump. Reattaching the patch for convenience.

Lucas <lu...@sexy.is> wrote:
> 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.

# HG changeset patch
# User Lucas <lu...@sexy.is>
# 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

Kim Alvefur

unread,
Aug 28, 2021, 10:54:52 AM8/28/21
to Lucas, proso...@googlegroups.com
Hello Lucas,

On Sun, Aug 15, 2021 at 01:46:18PM +0000, Lucas wrote:
>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.

Thanks, received and stashed¹ for safe-keeping until someone is in a
reviewing mood. I would like to have a way to test it rather than just
blindly merge it. Best would be to set up an environment in our CI²,
which currently only have a FreeBSD environment, in addition to too many
Linux distros.

¹ https://hg.prosody.im/contrib/rev/e47e49bf1032
² https://buildbot.prosody.im/

--
Regards,
Kim "Zash" Alvefur
signature.asc
Reply all
Reply to author
Forward
0 new messages