Matthias Apitz schrieb am Mittwoch, den 05. August 2015:
> I digged into this and the reason is in the source tree of mutt itself.
>
> The option (...) strings get punched into a file conststrings.c and if you
> build mutt
> with 'make' it gives an error due to a gmake'ish construct in the Makefile /
> Makefile.in:
>
> # make conststrings.c
> cc -I/usr/local/include -o txt2c
> cc: error: no input files
> *** Error code 1 (ignored)
> ( cc -I/usr/local/include -v || cc -I/usr/local/include --version ||
> cc -I/usr/local/include -V || echo "unknown compiler"; ) 2>&1 |
> ./txt2c.sh cc_version >conststrings_c
> echo "-pipe -DLIBICONV_PLUG -g -fno-strict-aliasing" | ./txt2c.sh
> cc_cflags >>conststrings_c
> grep ac_cs_config= config.status | cut -d= -f2- | sed -e 's/^"//' -e
> 's/"$//' | ./txt2c.sh configure_options >>conststrings_c
> mv -f conststrings_c conststrings.c
>
> i.e. because it can not build txt2c from txt2c.c it falles back to use
> some shell script txt2c.sh; this, in turn, has another error: it
> contains a sed pipeline and among others it does (here as an example
> with some string):
>
> $ echo "FreeBSD is the better system" | sed -e 's/\t/\\t/'g -e 's/\r/\\r/g'
> F\reeBSD is \the be\t\te\r sys\tem
>
> The workaround is to make mutt with gmake (the default on Linux);
>
> The bugs should be fixed im mutt, ofc.
Yeah, the sed script is not portable. Better to replace it by perl
(patch attached)
regards,
Christian
diff --git a/txt2c.sh b/txt2c.sh
--- a/txt2c.sh
+++ b/txt2c.sh
@@ -10,15 +10,14 @@ txt2c_fallback () {
# or odd-looking sequences. The result is a sequence of quote-bounded
# C strings, which the compiler concatenates into a single C string.
tr -c '\011\012\015\040[!-~]' '?' |
- sed \
- -e 's/\\/\\\\/g' \
- -e 's/"/\\"/g' \
- -e 's/??/\?\?/g' \
- -e 's/\t/\\t/'g \
- -e 's/\r/\\r/g' \
- -e 's/^/ "/g' \
- -e 's/$/\\n"/g'
- echo ";"
+ perl -p \
+ -e 's/\\/\\\\/g;' \
+ -e 's/\t/\\t/g;' \
+ -e 's/\r/\\r/g;' \
+ -e 's/"/\\"/g;' \
+ -e 's/^/ \"/g;' \
+ -e 's/$/\\n\"/;'
+ echo "; /* generated by txt2c.sh */"
}
./txt2c test </dev/null >/dev/null 2>&1 &&