autoconf的小问题,以及强大的开源社区

昨天尝试在autoconf中用sed提取php-config中的一个参数,在shell里面很简单:

php-config --configure-options | sed -n 's|.*--with-config-file-scan-dir=\([^ ]*\).*|\1|p'

可是在configure.ac中,这样写是不行的:

PHPCDIR=`php-config --configure-options | sed -n 's|.*--with-config-file-scan-dir=\([^ ]*\).*|\1|p'`

AC_SUBST([PHPCDIR])

我研究了一天没想明白,就到autoconf的maillist去问了。今天收到到一大堆回复,各种各样的解决方案。

Eric Blake 建议我把这个语句放在set -vx/set +vx中,我发现了问题所在:sed中的方括号[]被m4吃掉了。甚至还收到了autobook作者Gary V. Vaughan的回复。

解决方案包括:

1.重复方括号,也就是把[^ ]改成[[^ ]];

2.使用四元组代替方括号,见http://cims.nyu.edu/cgi-systems/info2html?%28autoconf%29Quadrigraphs

3.把这个语句放在一个方括号包括的语句块中。

邮件地址在:http://lists.gnu.org/archive/html/autoconf/2011-02/msg00055.html

PS:我在看autoconf的tutorial的时候,好像确实看到过m4会吃掉方括号,但是根本不会放在心上,只有遇到问题才会映象深刻,这确实是个问题。

updatedupdated2022-02-222022-02-22