2008年5月7日 星期三

Open Source Project Configure 的陷阱

前天幫另一個 team 換主機,結果昨天就有一個同事發現之前能夠 build 的一個 project 突然 build 不過,而顯示的訊息是 ....missing makeinfo .....。

明明這台新主機就是用 Gentoo 一步步都從 source 建起來的怎麼會發生這種事呢,檢查了一段時間後,才發現問題出在 configure 裡頭,現在許多 open source projects 都依賴 autoconf/automake 產生 configure 再加上一些條件限制,這次遇到的就是這種情況,在 configure 中先用一般方法檢查出了 makeinfo 存在,於是螢幕上 show 出了

checking for makeinfo... makeinfo

看似很正確對吧

但仔細看一下 configure 裡頭
緊接著加上的檢查是

# For an installed makeinfo, we require it to be from texinfo 4.4 or
# higher, else we use the "missing" dummy.
if ${MAKEINFO} --version \
| egrep 'texinfo[^0-9]*([1-3][0-9]|4\.[4-9]|[5-9])' >/dev/null 2>&1; then
:
else
MAKEINFO="$MISSING makeinfo"
fi
;;

看起來也正確?

但 makeinfo --version 傳回的若是 makeinfo (GNU texinfo) 4.11 時呢?
所以說,問題出在 4.11 明明大於 4.4 但是沒辦法被 match 上,可以說是原先加上這段檢查的人沒想過版本編號會超過 9 的....

regular expression 想要寫的好果然是很困難呀

1 意見:

Johnny 提到...

另外,版本 40~49,400~499,..... 也不會 match
(在指導人修改時順便注意到的)