LINUX.ORG.RU

[gentoo][git-2 eclass] Не могу понять, что происходит при загрузке сырцов

 


0

1

Есть такой парсер elkhound: https://github.com/dsw/oink-stack
Если его качать через git clone из консольки - собирается (ну почти, надо заголовки поправить, тогда соберется) Если его качать через средства portage, то есть написав ebuild с использованием eclass git-2, то сборка валится с ошибками вида:

g++ -c -o agramlex.yy.o agramlex.yy.cc -g -Wall -Wno-deprecated -D__UNIX__ -O2 -DNDEBUG -D__LINUX__ -I../smbase
agramlex.lex: In member function ‘virtual int GrammarLexer::yylex()’:
agramlex.lex:126:22: error: ‘TOK_RBRACE’ was not declared in this scope
agramlex.lex:127:22: error: ‘TOK_SEMICOLON’ was not declared in this scope
agramlex.lex:128:22: error: ‘TOK_ARROW’ was not declared in this scope

...

Сравнение каталогов, полученных двумя разными способами, diff-ом показывает, что отличается только одни файл - .gitignore, все остальные совпадают.

Что происходит?

Если действительно различаются только .gitignore, то ищи различия в других фазах сборки, например, src_configure.

tiandrey ★★★★★
()
Ответ на: комментарий от tiandrey

Нет никаких различий, у меня в ebuild сразу после git-2_src_unpack идет && die. Тестировалось дальше уже всё ручками и не один раз. Проблема именно в файлах и том, что с ними делает git-2 и как он это делает, чтобы diff это не засек.

Проверил права доступа к файлам - идентичны.

malices_gossips ★★★
() автор топика

Так, проблема не в файлах. Проблема в том, куда они распаковываются. Что, черт подери, делает женту с временным подкаталогом work такого, что может мешать сборке?

Скопировал оттуда файлы в другой каталог - собираются.

malices_gossips ★★★
() автор топика

up

Не в ебилде дело. Но если хочешь поэксперементировать - вот кусок, отвачающий за распаковку:

# $Header: $

EAPI="3"
EGIT_REPO_URI="https://github.com/dsw/oink-stack.git"

inherit git-2 eutils 

DESCRIPTION="A GLR parser"
HOMEPAGE="http://scottmcpeak.com/elkhound/"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="x86 amd64"                                                          
RDEPED=""                                              
DEPEND="${RDEPEND}"                                                                                                                                                                                  
S=${WORKDIR}/${P}                                                                                                                                                                                 
src_unpack() {                                            
        git-2_src_unpack                                  
}

src_prepare() {
        cd "${S}" && die
}
malices_gossips ★★★
() автор топика
Ответ на: комментарий от daemonpnz

Видимо, я недостаточно ясно выразился. Нет никакой разницы в CFLAGS и быть не может: во-первых, весь процесс настройки и сборки сырцов идентичен, начиная с оболочки и заканчивая параметрами комманды make, отличается только процесс получения сырцов; ну и во-вторых, в проекте просто не реализована поддержка этой переменной, что есть СFLAGS, что его нет...

Но и это значения уже не имеет, потому что проблема уже локализована, она заключается в том, что по какой-то причине процесс компиляции из временного каталога /var/tmp/portage/dev-utils/elkhound/work/ отличается от компиляции этих же файлов, запущенной в любом другом каталоге. Хочется знать - почему, и - как это побороть.

malices_gossips ★★★
() автор топика
Ответ на: комментарий от Delirium_veritas

Я не использую portage для сборки, третий раз уже об этом пытаюсь сказать. Я использую его только для того, чтобы получить сырцы.

malices_gossips ★★★
() автор топика
Ответ на: комментарий от malices_gossips

Делаем

ebuild elkhound-9999.ebuild clean
ebuild elkhound-9999.ebuild configure
cd /var/tmp/portage/dev-util/elkhound-9999/work/elkhound-9999
make
и получаем
agramlex.lex:126:22: error: ‘TOK_RBRACE’ was not declared in this scope
agramlex.lex:127:22: error: ‘TOK_SEMICOLON’ was not declared in this scope
agramlex.lex:128:22: error: ‘TOK_ARROW’ was not declared in this scope
agramlex.lex:129:22: error: ‘TOK_LPAREN’ was not declared in this scope
agramlex.lex:130:22: error: ‘TOK_COMMA’ was not declared in this scope
agramlex.lex:132:22: error: ‘TOK_LANGLE’ was not declared in this scope
agramlex.lex:133:22: error: ‘TOK_RANGLE’ was not declared in this scope
agramlex.lex:134:22: error: ‘TOK_STAR’ was not declared in this scope
agramlex.lex:135:22: error: ‘TOK_AMPERSAND’ was not declared in this scope
agramlex.lex:136:22: error: ‘TOK_EQUALS’ was not declared in this scope
agramlex.lex:137:22: error: ‘TOK_COLON’ was not declared in this scope
agramlex.lex:139:22: error: ‘TOK_CLASS’ was not declared in this scope
agramlex.lex:140:22: error: ‘TOK_OPTION’ was not declared in this scope
agramlex.lex:141:22: error: ‘TOK_NEW’ was not declared in this scope
agramlex.lex:142:22: error: ‘TOK_ENUM’ was not declared in this scope
agramlex.lex:188:17: error: ‘TOK_EMBEDDED_CODE’ was not declared in this scope
agramlex.lex:191:28: error: ‘TOK_CTOR’ was not declared in this scope
agramlex.lex:192:28: error: ‘TOK_DTOR’ was not declared in this scope
agramlex.lex:193:28: error: ‘TOK_PUBLIC’ was not declared in this scope
agramlex.lex:194:28: error: ‘TOK_PROTECTED’ was not declared in this scope
agramlex.lex:195:28: error: ‘TOK_PRIVATE’ was not declared in this scope
agramlex.lex:196:28: error: ‘TOK_PURE_VIRTUAL’ was not declared in this scope
agramlex.lex:208:15: error: ‘TOK_EMBEDDED_CODE’ was not declared in this scope
agramlex.lex:211:20: error: ‘TOK_VERBATIM’ was not declared in this scope
agramlex.lex:212:20: error: ‘TOK_IMPL_VERBATIM’ was not declared in this scope
agramlex.lex:213:20: error: ‘TOK_XML_VERBATIM’ was not declared in this scope
agramlex.lex:224:15: error: ‘TOK_EMBEDDED_CODE’ was not declared in this scope
agramlex.lex:226:10: error: ‘TOK_CUSTOM’ was not declared in this scope
agramlex.lex:235:26: error: ‘TOK_LBRACE’ was not declared in this scope
agramlex.lex:235:39: error: ‘TOK_RPAREN’ was not declared in this scope
agramlex.lex:314:10: error: ‘TOK_NAME’ was not declared in this scope
agramlex.lex:320:10: error: ‘TOK_INTLIT’ was not declared in this scope
После этого делаем
ebuild elkhound-9999.ebuild clean
ebuild elkhound-9999.ebuild unpack
cd /var/tmp/portage/dev-util/elkhound-9999/work/elkhound-9999
./configure
make
и предыдущих ошибок уже не получаем, но затыкается на
grampar.h:7:34: fatal error: typ.h: No such file or directory
Так что косяк в переменных окружения которые передаются configure при выполнении ebuild'a. Копай в эту сторону.

daemonpnz ★★★★★
()
Ответ на: комментарий от daemonpnz

правда я твой ебилд немножко подкоректировал

daemonpnz ★★★★★
()
Ответ на: комментарий от daemonpnz

Небольшая корректировка, переменные на этапе prepare портятся, так что пробуй делать выход из ебилда в unpack.

daemonpnz ★★★★★
()
Ответ на: комментарий от daemonpnz

Хочу сделать оверлей для модов к Baldur's Gate. С выходом относительно стабильной версии gemrb (свободная реализация движка infinity) это стало актуально, а парсер нужен программе weidu, которая патчит файлы Балдура.

malices_gossips ★★★
() автор топика
Ответ на: комментарий от daemonpnz

Он и будет использоваться.

Было многих разных мыслей по поводу того, на каком этапе в процессе работы с файлами происходит что-то не то. Постепенно одну за одной откидывал части ебилда, пока не остался вот такой вот кусок, после чего стало ясно, что я нихрена уже не понимаю, и обратился на ЛОР =)
Ну а дальнейшее развитие мысли ты можешь проследить по этой теме. Как только разберусь, напишу полный ебилд и займусь следующим.

malices_gossips ★★★
() автор топика
Ответ на: комментарий от malices_gossips

А. Теперь понял. Вопросов больше не имею. Удачи.

daemonpnz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.