由于我从用户那里获得了反馈,我组合了许多改进,使用Emacs进行搜索和替换、剪切(cut)和粘贴(paste),在 每个脚本中进行类似的修改。随着我修改更多的GNU工具包以使用configure脚本,完全用手工更新它们 就不可能了。Rich Murphey,GNU图形工具的维护者,在给我发送的邮件中说configure脚本很好,并 问我是否有一个可以生成它们的工具可以发给他。没有,我想,但我将会有!所以我开始考虑如何生成它们。这样, 从手工编写configure脚本的苦力向功能强大而易于使用的Autoconf前进的旅程开始了。
Cygnus configure,它大约也在那个时候被开发,是表驱动的;这意味着用少量的大体上不可猜测 的特征来处理离散数量的系统类型(例如目标文件格式的细节)。Brian Fox为Bash开发的自动配置系统采用了类似 的方法。为了统一用法,我好像必须绝望地试图为每个操作系统的变种的特征维护一个及时更新的数据库。 更容易和更可靠的办法是不检查大多数特征–特别是在那些人们已经在本地深入地研究或者安装了买主提供的补丁 的杂合的系统。
我考虑到使用与Cygnus configure相似的结构,就是提供一个单独的configure脚本, 在运行时读入configure.in'的片断。但是我不想让每个包都发布所有的特征测试,所以我选择了使用 预处理器从每个
configure.in’中创建不同的configure。这个方法还提供了更多的控制和便利。
我简要地察看了被Larry Wall、Harlan Stenn和Raphael Manfredi采用的Metaconfig包,但我为了几个原因而不采用它。 这种方式生成的Configure脚本是交互式的,我认为太不方便了;我不喜欢它测试某些特征的方式 (例如库函数);我不知道它是否还有人维护,并且我所见到的Configure脚本在许多现代系统 (例如System V R4和NeXT)中都不能工作;设置在支持某个特征或者不支持该特征时所进行的动作也不是很方便; 我发现它难于学习;并且对于我的需要,它太大、太复杂了(我没有意识到Autoconf最终将变得多么大)。
我考虑过使用Perl来生成我的风格的configure脚本,但显然m4更加适合于简单的 文本替换工作:由于输出是隐含的,它的工作比较少。还有,每个人都已经拥有它了。(一开始,我并不依赖于 GNU对m4的扩展。)我在Maryland大学的一些朋友最近用一些程序,包括tvtwm, 制作了m4的前端,并且我也有兴趣试试一种新语言。