openwrt/include
Michael Pratt 14a3eadf05
verbose.mk: fallback to standard file descriptors
In order to pass a status message at runtime,
which is usually listing subtargets
of a Makefile target or an error message,
from a child invocation of Make (submake)
through the parent process to the terminal,
the file descriptors 8 and 9 are opened to be used
by the functions MESSAGE and ERROR_MESSAGE.

However, there are situations where those functions
can be called while not in a submake or a subshell
or a child process which results in a shell error:

/bin/bash: 8: Bad file descriptor

Commit aee3594ffc
("verbose.mk: print ERROR messages in non-verbose")
has exposed this issue to more cases, but it is not the root cause.

To solve this, use the exit code of the first printf attempt
to the alternative file descriptors in order to tell whether
the standard file descriptors need to be used instead.
In order to get rid of the "Bad file descriptor" error, stderr is
redirected to null after grouping the two printf alternatives
into one command to combine outputs.

For ERROR_MESSAGE, the real message is redirected to stderr
after redirecting the error from the attempted printing to null.

For MESSAGE, without redirection, the Make function "shell"
will absorb the actual message from stdout and input the value into the Makefile,
therefore the dummy variable "_NULL", previously used merely for causing
a call to the MESSAGE function to trigger without writing target rules,
now has and a real value when defined, so rename it to "_MESSAGE"
as a placeholder for the real message when the output should be stdout.

When "_MESSAGE" has a value, use Make function "info" to
finally bring it from the Makefile to the terminal.

This also fixes what is likely a typo, in that
while file descriptor 9 is meant to redirect to stderr
for use in error messages like in the function ERROR_MESSAGE,
that function has printf redirecting to file descriptor 8 instead.

Fixes: a4c8d4e37 ("build: make the color of the 'configuration out of sync' warning red")
Signed-off-by: Michael Pratt <mcpratt@pm.me>
2024-01-05 16:25:14 +01:00
..
site generic: groundwork for RISC-V 2023-05-28 13:19:10 +02:00
autotools.mk autotools: add list of fake paths to tools 2023-05-04 06:07:26 +02:00
bpf.mk treewide: make use of new toolchain define 2023-10-20 16:13:56 +02:00
cmake.mk treewide: make use of new toolchain define 2023-10-20 16:13:56 +02:00
debug.mk build: use SPDX license tags 2021-02-05 14:54:47 +01:00
depends.mk build: make find_md5 reproducible with AUTOREMOVE 2022-09-30 22:26:51 +02:00
device_table.txt image: ensure that /dev/console exist in rootfs images 2013-08-27 12:02:58 +00:00
download.mk build: make git sub-modules to fetch configurable 2023-07-28 09:00:49 +02:00
feeds.mk build: ensure that dash isn't prepended twice to abi version suffix 2021-06-15 09:58:33 +02:00
hardened-ld-pie.specs build: add hardened builds with PIE (ASLR) support 2018-01-27 16:46:45 +01:00
hardening.mk build: use SPDX license tags 2021-02-05 14:54:47 +01:00
host-build.mk host-build: add support for a stampfile per installed binary 2023-06-05 08:31:53 +02:00
image-commands.mk image: improve UBI image sizing on NAND devices 2023-11-26 18:37:20 +01:00
image.mk image.mk: reorder DTC_WARN_FLAGS based on upstream 2024-01-05 16:17:57 +01:00
kernel-5.15 kernel: bump 5.15 to 5.15.145 2023-12-23 06:52:06 -05:00
kernel-6.1 kernel: bump 6.1 to 6.1.70 2024-01-02 18:28:58 +01:00
kernel-build.mk build: make find_md5 reproducible with AUTOREMOVE 2022-09-30 22:26:51 +02:00
kernel-defaults.mk build: cache kernel module package compiling 2023-10-28 21:34:20 +02:00
kernel-version.mk kernel: fix wrong detection of Linux-Testing-Version in makefile DUMP 2023-05-31 20:28:40 +02:00
kernel.mk build: cache kernel module package compiling 2023-10-28 21:34:20 +02:00
logo.png include: update logo with better kerning 2021-01-18 09:31:39 -10:00
logo.svg include: update logo with better kerning 2021-01-18 09:31:39 -10:00
meson.mk meson: prepare to use different linkers 2023-07-04 20:25:40 +02:00
netfilter.mk netfilter: add kmod-nf-conntrack 2023-02-18 17:12:30 +01:00
nls.mk nls.mk: fixup cmake packages 2022-11-27 00:52:06 +01:00
openssl-module.mk openssl: add legacy provider 2023-04-05 08:24:49 -03:00
package-bin.mk build: allow package to be built for all variants 2021-11-15 00:38:46 +01:00
package-defaults.mk build: disable automake dependency tracking 2023-03-13 22:53:41 +01:00
package-dumpinfo.mk package-dumpinfo,metadata: add ABI version information to package index 2023-11-01 11:14:40 +00:00
package-ipkg.mk build: replace SourceName with PKG_NAME compile unit name 2023-09-24 19:33:53 +02:00
package-seccomp.mk build: use SPDX license tags 2021-02-05 14:54:47 +01:00
package.mk build: add support to use the mold linker for packages 2023-07-04 20:25:41 +02:00
prereq-build.mk Revert "prereq-build: add Python 3.12 support" 2023-11-13 23:33:40 +01:00
prereq.mk prereq: merge common cases in SetupHostCommand 2023-08-26 14:00:36 +02:00
quilt.mk quilt.mk: don't error on refresh/update if patches doesn't exist 2023-10-06 21:59:29 +02:00
rootfs.mk build: reduce cleanup binary calls in rootfs.mk 2020-12-05 22:07:00 -10:00
scan.awk build: propagate override information to .packageinfo 2015-02-09 12:09:31 +00:00
scan.mk scan.mk: do not silence output of dump phase 2023-11-13 14:01:24 +01:00
shell.sh build: use mkhash to replace various quirky md5sum/openssl calls 2017-01-05 11:09:12 +01:00
subdir.mk build: allow package to be built for all variants 2021-11-15 00:38:46 +01:00
target.mk generic: groundwork for RISC-V 2023-05-28 13:19:10 +02:00
toolchain-build.mk toolchain: fix dangling symlink to self in FixupLibdir 2022-07-01 19:17:36 +02:00
toplevel.mk build: allow var.% targets to bypass the prepare steps 2024-01-05 16:25:13 +01:00
trusted-firmware-a.mk trusted-firmware-a.mk: fix build with binutils 2.39+ 2023-01-21 11:55:23 +01:00
u-boot.mk u-boot: introduce dependencies check for swig and pyelftools 2023-11-26 19:44:56 +01:00
uclibc++.mk uclibc++: remove 2021-10-24 18:20:50 +02:00
unpack.mk include: use libdeflate's gzip to decompress 2023-01-17 21:40:18 +01:00
verbose.mk verbose.mk: fallback to standard file descriptors 2024-01-05 16:25:14 +01:00
version.mk build: use SPDX license tags 2021-02-05 14:54:47 +01:00