我无法使用bootstrap在cygwin上构建bison

时间:2013-06-17 08:46:40

标签: cygwin gnu bison automake

我相信我拥有所有必要的工具和来源,包括其git存储库中最新的野牛来源。

当我跑./bootstrap 我收到以下错误:

lib/local.mk:19: error: lib_libbison_a_SOURCES must be set with '=' before using '+='
Makefile.am:60:   'lib/local.mk' included from here
lib/local.mk:19: warning: variable 'lib_libbison_a_SOURCES' is defined but no program or
lib/local.mk:19: library has 'lib_libbison_a' as canonical name (possible typo)
Makefile.am:60:   'lib/local.mk' included from here
autoreconf-2.69: automake failed with exit status: 1
./bootstrap: autoreconf failed

查看消息来源显示lib / local.mk包含第19行之前的lib / gnulib.mk(上面错误消息中的第一行)。 lib / gnulib.mk是一个生成的文件。它有,例如:

libbison_a_SOURCES =
libbison_a_LIBADD = $(gl_LIBOBJS)
libbison_a_DEPENDENCIES = $(gl_LIBOBJS)
EXTRA_libbison_a_SOURCES =

而lib / local.mk有:

lib_libbison_a_SOURCES +=                       \

因此,生成的文件中缺少“lib_”(或固定源中的额外“lib_”)。

知道如何克服这个问题吗?

3 个答案:

答案 0 :(得分:1)

经过一些挖掘,我发现了问题,实际上是问题:

调用gnulib / gnulib-tool后,“bootstrap”脚本发出以下命令:

build-aux/prefix-gnulib-mk --lib-name=libbison lib/gnulib.mk

此操作失败,并显示以下消息:

Unrecognized character \xFF in column 11 at build-aux/prefix-gnulib-mk line 1

它没有说“错误”,并且引导脚本的执行没有终止,因此很容易错过脚本吐出的大量消息。

文件build-aux / prefix-gnulib-mk是由引导脚本生成的gnulib / build-aux / prefix-gnulib-mk的符号链接。显然,执行此符号链接失败,可能是因为gnulib / build-aux / prefix-gnulib-mk缺少“#!/ bin / perl”,我不知道。我所知道的是,如果符号链接被副本替换,它可以正常工作。

引导脚本有一个选项,告诉脚本使用副本而不是符号链接,人们会认为这可以解决问题,但事实并非如此。显然,符号链接build-aux / prefix-gnulib-mk是由gnulib / gnulib-tool生成的。虽然gnulib / gnulib-tool有一个类似的命令行选项来使用副本而不是符号链接,但它没有被利用。相反,“--symlink”在bootstrap.conf文件中进行了硬编码:

gnulib_tool_option_extras='--symlink --makefile-name=gnulib.mk'

我在运行bootsrap脚本之前最终创建了prefix-gnulib-mk的硬拷贝。 (我认为编辑bootstrap.conf并省略“--symlink”也可以工作。)我还使用了bootstrap脚本的选项来使用硬拷贝,即“--copy”,以保证安全。从那时起,一切顺利,我在Windows上获得了野牛可执行文件。

答案 1 :(得分:0)

您必须更改其中一个。我先试试lib/local.mk

 libbison_a_SOURCES +=   \

因为它看起来更像是预期的。再次尝试./bootstrap。如果有效,请将该补丁提交给bison维护者。如果它不起作用,我会通知维护者他们从git构建它们不起作用。

答案 2 :(得分:0)

看起来你遗漏了一些文件,可能是因为git clone默认情况下不包含子模块。运行git submodule update --init检查子模块,然后再次尝试./bootstrap