Ubuntu BYACC / BTYACC Синтаксическая ошибка - PullRequest
0 голосов
/ 11 июня 2018

Я пытаюсь скомпилировать библиотеку libxkbcommon для kodi для моего Raspberry Pi 2.

Хост-машина - это выделенный Сервер под управлением Ubuntu 16.04 x64.

Теперь есть две ошибки, когдаЯ пытаюсь скомпилировать libxkbcommon, в зависимости от того, какой yacc я использую:

byacc:

YACC     src/xkbcomp/parser.c
yacc: e - line 219 of 
"/opt/kodi/xbmc/tools/depends/target/libxkbcommon/raspberry-pi2-release/src/xkbcomp/parser.y", syntax error
%destructor { FreeStmt((ParseCommon *) $$); }
^
Makefile:1637: recipe for target 'src/xkbcomp/parser.c' failed

btyacc:

parser.y:85: syntax error

Вот исходный кодlibxkbcommon:

https://github.com/xkbcommon/libxkbcommon

1 Ответ

0 голосов
/ 11 июня 2018

Файл xbcomp/parser.y требует ряда (очень полезных) расширений бизонов, поэтому он не может быть обработан всеми вариантами yacc.

  • btyacc не поддерживает бизоновсовместимые объявления чистого парсера.(У него есть другой, не полностью совместимый механизм, который реализует ту же функцию.) Таким образом, он завершается ошибкой в ​​первом экземпляре одного из этих объявлений.

  • Должно быть возможно использовать byacc, но не версия, которая доступна в репозитории пакетов Ubuntu.Хотя история изменений репозитория пакетов Ubuntu, по-видимому, предполагает, что целью было включить опцию сборки, которая допускает %destructor, фактический двоичный файл, в настоящее время доступный в репозитории byacc, был собран без этой опции.(Ему также несколько лет, и я думаю, что было бы полезно использовать более новую версию.) Я сообщил об этом как ошибка панели запуска 1776270 вместе с предложением о возможном исправлении.

  • Я уверен, что вы сможете собрать программное обеспечение, используя Gnu Bison, который доступен в виде пакета Ubuntu bison.Поскольку это самая популярная версия yacc, установленная на машинах разработчика, сбой сборки с bison, вероятно, был бы замечен давно.

Если вы предпочитаете использовать byacc,по какой-либо причине вам придется скачать и собрать его самостоятельно.Вы можете получить самую последнюю версию со byacc страницы Томаса Дики , а затем собрать ее обычной процедурой: распаковать, сконфигурировать, сделать, сделать установить.Когда я проверял это, я использовал следующую строку конфигурации:

./configure --enable-btyacc  --program-prefix=b  --prefix=/usr

Обязательна только первая опция

* --program-prefix=b   Install it as `byacc` rather than `yacc`
* --enable-btyacc      Necessary for %destructor support
* --prefix=/usr        Install it in /usr/bin and /usr/man. The default
                       is /usr/local/bin and /usr/local/man, which failed on
                       my Ubuntu install because of a missing -D option in the
                       install command in the Makefile.
...