我无法使用引导在cygwin上构建bison

我无法使用引导在cygwin上构建bison,cygwin,gnu,bison,automake,Cygwin,Gnu,Bison,Automake,我相信我拥有所有必要的工具和资源,包括来自git存储库的bison的最新资源 当我运行时。/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_libbiso

我相信我拥有所有必要的工具和资源,包括来自git存储库的bison的最新资源

当我运行时。/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_”)


你知道如何克服这个问题吗?你必须改变其中一个。我会先尝试
lib/local.mk

 libbison_a_SOURCES +=   \

因为它看起来更像我们的初衷。再次尝试
/bootstrap
。如果可行,请将该补丁提交给bison维护人员。如果它不起作用,我会通知维护人员他们从git构建的版本不起作用。

看起来您缺少了一些文件,可能是因为默认情况下,
git clone
不包含子模块。运行
git submodule update--init
签出子模块,然后再次尝试
/bootstrap

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

“bootstrap”脚本在调用gnulib/gnulib工具后发出以下命令:

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
它没有说“error”,引导脚本的执行也没有终止,因此很容易在脚本发出的大量消息中漏掉

文件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工具生成的。虽然gnulib/gnulib工具有一个类似的命令行选项来使用副本而不是符号链接,但它没有被利用。相反,“--symlink”硬编码在bootstrap.conf文件中:

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

在运行bootsrap脚本之前,我创建了前缀gnulib mk的硬拷贝。(我认为编辑bootstrap.conf并省略“-symlink”也可能有效。)为了安全起见,我还使用了引导脚本的选项来使用硬拷贝,即“-copy”。。。从那时起,一切都很顺利,我在Windows上获得了我的bison可执行文件。

现在我已经在Ubuntu上成功地完成了同样的工作。我观察到额外的“lib_”,所以我假设生成的lib/gnulib.mk是错误的,不是这样。此外,我的印象是bootstrap无论如何都能做到这一点。