Hello, I do have a problem with the Makefile (in "common") and maybe some of you have more experience with it. In the latest dev version, the Makefile in "common" [1] does call a script named "build_manpages.sh" [2]. That script does call "asciidoctor". If "asciidoctor" is not installed that script gives an error message (and "exit 1"). I do see this error message when calling "./configure & make". But "make" itself does not recognize that error. The exit code of "make" does not indicate that there was an error. If there are other errors while "make" is running the last message usually will look like this: make: *** [Makefile:19: install] Error 2 But when that error about the missing asciidoctor occur make does not give that error message at the end. I don't know what I am doing wrong. I think I miss some shell magic and Unix basics here. ;) Regards, Christian Buhtz [1] -- <https://github.com/bit-team/backintime/blob/74e2030e017f9126eb5b75c643c12413...> [2] -- <https://github.com/bit-team/backintime/blob/dev/doc/manpages/build_manpages....>
The call to asciidoctor is being fed through a pipe to gzip. https://github.com/bit-team/backintime/blob/780cbfd3089acd593de9d92907880fe7... For a pipeline like this command1 | command2 what you get is the return code from the command at the end, command2. gzip does not have an error, so the return code is 0, i.e. success. You can use PIPESTATUS to explicitly get around this: asciidoctor --backend manpage --attribute=version="$BIT_VERSION" "$file" --out-file=- | gzip --best > "$manfile" local return_code=${PIPESTATUS[0]} if (( return_code != 0 )); then exit 1 fi PIPESTATUS is an array of the exit codes of the commands in the pipeline, so PIPESTATUS[0] has the return code from asciidoctor. You could write that condition as "(( return_code ))", but I think the explicit "!= 0" helps to make it much easier to understand correctly. Derek Veit On Monday, June 16th, 2025 at 11:44 AM, c.buhtz@posteo.jp <c.buhtz@posteo.jp> wrote:
Hello, I do have a problem with the Makefile (in "common") and maybe some of you have more experience with it.
In the latest dev version, the Makefile in "common" [1] does call a script named "build_manpages.sh" [2]. That script does call "asciidoctor".
If "asciidoctor" is not installed that script gives an error message (and "exit 1"). I do see this error message when calling "./configure & make". But "make" itself does not recognize that error. The exit code of "make" does not indicate that there was an error.
If there are other errors while "make" is running the last message usually will look like this:
make: *** [Makefile:19: install] Error 2
But when that error about the missing asciidoctor occur make does not give that error message at the end.
I don't know what I am doing wrong. I think I miss some shell magic and Unix basics here. ;)
Regards, Christian Buhtz
[1] -- https://github.com/bit-team/backintime/blob/74e2030e017f9126eb5b75c643c12413...
[2] -- https://github.com/bit-team/backintime/blob/dev/doc/manpages/build_manpages....
It might be worth checking the return value of gzip too, though. local asciidoctor_return local gzip_return asciidoctor --backend manpage --attribute=version="$BIT_VERSION" "$file" --out-file=- | gzip --best > "$manfile" read asciidoctor_return gzip_return _ <<< "${PIPESTATUS[@]}" if (( asciidoctor_return != 0 || gzip_return !=0 )); then exit 1 fi The `read` command is doing something similar to this Python code asciidoctor_return, gzip_return = PIPESTATUS[:2] but in Bash it has to do something more equivalent to this: asciidoctor_return, gzip_return, *_ = ' '.join(PIPESTATUS).split() Derek Veit On Tuesday, June 17th, 2025 at 8:16 AM, Derek via Bit-dev <bit-dev@python.org> wrote:
The call to asciidoctor is being fed through a pipe to gzip.
https://github.com/bit-team/backintime/blob/780cbfd3089acd593de9d92907880fe7...
For a pipeline like this command1 | command2 what you get is the return code from the command at the end, command2.
gzip does not have an error, so the return code is 0, i.e. success.
You can use PIPESTATUS to explicitly get around this:
asciidoctor --backend manpage --attribute=version="$BIT_VERSION" "$file" --out-file=- | gzip --best > "$manfile"
local return_code=${PIPESTATUS[0]} if (( return_code != 0 )); then exit 1 fi
PIPESTATUS is an array of the exit codes of the commands in the pipeline, so PIPESTATUS[0] has the return code from asciidoctor.
You could write that condition as "(( return_code ))", but I think the explicit "!= 0" helps to make it much easier to understand correctly.
Derek Veit
On Monday, June 16th, 2025 at 11:44 AM, c.buhtz@posteo.jp c.buhtz@posteo.jp wrote:
Hello, I do have a problem with the Makefile (in "common") and maybe some of you have more experience with it.
In the latest dev version, the Makefile in "common" [1] does call a script named "build_manpages.sh" [2]. That script does call "asciidoctor".
If "asciidoctor" is not installed that script gives an error message (and "exit 1"). I do see this error message when calling "./configure & make". But "make" itself does not recognize that error. The exit code of "make" does not indicate that there was an error.
If there are other errors while "make" is running the last message usually will look like this:
make: *** [Makefile:19: install] Error 2
But when that error about the missing asciidoctor occur make does not give that error message at the end.
I don't know what I am doing wrong. I think I miss some shell magic and Unix basics here. ;)
Regards, Christian Buhtz
[1] -- https://github.com/bit-team/backintime/blob/74e2030e017f9126eb5b75c643c12413...
[2] -- https://github.com/bit-team/backintime/blob/dev/doc/manpages/build_manpages....
participants (2)
-
c.buhtz@posteo.jp -
Derek