GNU libtool 和 FreeBSD 10
FreeBSD 开始用 10 以上的版本号有一段时间了。这个变动立刻导致了大量 ports 无法编译,多数情况下是因为开发者采用了较早版本的 libtool 导致的,具体来说,是类似下面的代码:
case $host_os in
freebsd[123]*) objformat=aout ;;
*) objformat=elf ;;
esac
解法是在星号前面加个小数点。
前段时间的半夜 make 总是在 OpenOffice 上通不过,结果发现是同样的原因。囧死了……当初匹配的时候打个.会死吗?
(这个问题已经在 libtool 2.4.2 以上版本中修正)。教训是,即使是代码生成器,重复的代码导致维护成本的增加。
Archived: 2 Comments
Solrex | May 29, 2012 11:56 PM
其实干脆改成 freebsd.* 更合适吧。
Xin LI replied to comment from Solrex | May 30, 2012 12:04 AM
不合适吧,FreeBSD 3.0 之前采用的是 aout 格式而不是 ELF 格式(其实真正比较重要的是早期版本不支持 shared object)。匹配 1* 显然是不对的。
当然从现实角度考虑,这个检查完全可以去掉了。。。