LINUX.ORG.RU

Как форсировать подключение инклуда в configure/make и Qt5 MOC?

 , , ,


0

2

Собираю Qt5, вылезает странная ошибка:

qtimezoneprivate_p.h:61:10: fatal error: 'unicode/ucal.h' file not found

сабжевый файл - часть набора ICU, если кому-то интересно. И оно действительно лежит в ---include/unicide/ucal.h, проверено открыванием в vim'е.

Вначале я подумал, что я опять поломал репозиторий, и по хардкору руками стянул ICU с их репозитория, сконфигурил и собрал в отдельный префикс. Проверил, что чертов ucal.h там есть. Ну вот теперь уж точно должно!..

Но нет, fatal error: 'unicode/ucal.h' file not found

Причем ни на одну из тысяч других зависимостей не жалуется, только на этот файл.

Посмотрел виновника аварии, qtimezoneprivate_p.h. Объявление выглядит правильно: #include <unicode/ucal.h>, к афтару файла претензий нет.

Я форсирую порядок подключения инклудов и либ чере -I и -L директивы configure, а потом собираю через make -j8. Чтобы порадовать телепатов, вот выдержка из конфигура:

-I/git/icu/prefix/include -L/git/icu/prefix/lib -I/opt/local/include -I/opt/local/include/mysql55 -I/opt/local/include/mysql55/mysql -I/opt/local/include/postgresql93 -I/opt/local/include/postgresql93/server -L/opt/local/lib -L/opt/local/lib/mysql55/mysql -L/opt/local/lib/postgresql93

Не знаете как форсировать подключение этого чертового заголовка?

(без хардкодинга полного пути прямо в .cpp/.hpp файле, конечно. Да и вообще, там этих файлов, которым нужен icu - тысячи, все не назаменяешься).

(Товарищам, решившим послать в багтрекер qt: это trunk/master их репозитория кода, так что жаловаться на «неискаробочность» сборки нужно в Спортлото, а не в багтрекер)

Ну я просто не врубаюсь, как конпелятор может не найти заголовок, когда ему уже в нос ткнули конкретный префикс где искать!

И это не баг gcc, ну, по крайней мере - не проходной баг, потому что и на стабильной и на экспериментальных версиях gcc, clang, llvm (собранных десять минут назад из их репозиториев) оно ведет себя одинаково. Никаких «internal compiler errors», просто билд останавливается с «файл не найден... 1 error generated.»

Очень надеюсь на вашу чорную магию и телепатию крови, уважаемые иксперты! Спасибо.

★★★★☆

Последнее исправление: stevejobs (всего исправлений: 3)

Кажется, дошло: include path не попадает не в gcc, а в qt5 moc.

Но сие понимание никак не помогает какбе.

У MOC есть какая-нибудь environment variable или еще что-то, чтобы форсировать include path?

stevejobs ★★★★☆
() автор топика

Добавление директории с инклудами в PATH не помогает.

vim ~/.zshrc:

foo() {
export PATH=/git/icu/prefix/include:$PATH
}

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

Мак. Да неважно. У меня там в префиксе несколько разных линуксов собрано :3 Почему -I от configure не доходит до сгенерированного кода вызова MOC?

stevejobs ★★★★☆
() автор топика
Последнее исправление: stevejobs (всего исправлений: 2)
Ответ на: комментарий от stevejobs

да хрен его знает. подправь Makefile напрямую.
могли и багу в пакет положить - когда-то под винду не собиралось, т.к. лишнее временное файло валялось по директориям.

а что мешает использовать готовые бинари?

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

я не знаток мака, но имхо твои инклуды (которые рассматриваются как системные с точки зрения Qt) должны лежать где-то в системном месте, типа -/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include

да и гцц там не при чем, шланг вызывается

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

у меня gcc, clang, llvm, qt, boost и все остальное собираются из trunk/master соответствующих репозиториев чтобы юзать все самое новое (плюс синхронизация версий с друзьями очевидная: правильная версия библиотеки та, которая лежит в голове репозитория проекта).

плюс исходники зависимостей можно руками патчить когда надо, ну или просто копаться/дебажить

плюс меня не устраивает свалка, которую делают из компьютера современные пакетные менеджеры. Ничерта не поймешь, какая зависимость где, что от чего зависит, итп. Потом начинаешь пакет собирать - а там кровь-кишки. Поэтому у меня весь _важный_ софт лежит по принципу: /git/projectname/{repo,build,prefix}. Например, чтобы удалить софтину, мне достаточно удалить префикс. Плюс таким макаром у меня есть возможность иметь несколько различных версий либ и быстро ими манипулировать.

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

qmake.

но запускается через make. configure сам генерит тонну qmake-файлов + главный Makefile. потом запускаешь в корне make и начинается содомия.

как пропатчить pro-файлы сейчас думаю. Но хотелось бы ничего не патчить, а ограничиться настройкой configure и переменных окружения, чтобы был чисто ванильный qt

а ты знаешь как собрать репу qt5 через cmake?

stevejobs ★★★★☆
() автор топика
Последнее исправление: stevejobs (всего исправлений: 2)
Ответ на: комментарий от dib2

можно и gcc подключить вроде, но не суть. На «системные» инклуды наплевать, потому что 9/10 системы собрана руками через make install по нужному префиксу, и эти префиксы перекрывают системный. Ну а главный префикс - это macports, этакая генту под маком, конпеляющая систему в /opt/local. Я бы вообще избавился от Xcode, но нельзя по инфернальным причинам.

stevejobs ★★★★☆
() автор топика
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от MikeDM

Ты не врубился.
Я конпеляю не свою софтину.
Я конпеляю сам Qt5.
Configure там сразу же после клонирования репозитория. Ну или после стягивания бутстраповых пакетов первой же строчкой после клонирования (repository-init).

stevejobs ★★★★☆
() автор топика
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от MikeDM

Я пишу скрипт, чтобы он собирал девелоперскую платформу под любую ОС. (Насчет Windows еще думаю, потому что там есть дополнительные сложности. Вот я писал в жж предыдущую версию гида по Windows, ты поймешь о чем это: http://users.livejournal.com/__hedin/535325.html). Причем, в отличие от Gentoo Prefix, оно работает не в чруте, а слитно с основной системой, по типу macports. FHS вдохновлена опытом GoboLinux.

stevejobs ★★★★☆
() автор топика
Последнее исправление: stevejobs (всего исправлений: 2)
Ответ на: комментарий от stevejobs

кстати, фигово что Gobo признаков жизни не подает, like it.

Короче, ищи .pro, в нем задавай INCLUDEPATH += и будет щастье.
Для автоматизации sed конечно-же.
Я так сборки mono когда-то собирал, пока не появился нормальный реп для деба

dib2 ★★★★★
()

Короче, сделал максиально неправильно/грубо и пропатчил qt5.

This was a triumph.
I'm making a note here: HUGE SUCCESS.
It's hard to overstate my satisfaction!

dib2, trex6, MikeDM

Само решение:

Из директории, в которой делается out-of-source build:

vim ../qt5/qt.pro

в любое место пихаем (например, сразу перед строчкой со словом TEMPLATE в начале файла)

INCLUDEPATH += /git/icu/prefix/include LIBS += -L/git/icu/prefix/lib

===

Правда теперь поползли сами ошибки. Сейчас валится на генерации поддержки precompiled headers. Похоже, системе не сильно нравится, что все собрано четырьмя разными версиями clang и gcc, и теперь надо рулить эти ошибки :3

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

ищи .pro, в нем задавай INCLUDEPATH +=

это же фу, прямо как убунтята, которые что ни софтина - то ворох самописных патчей, вместо того, чтобы разобраться в вопросе и опубликовать по-настоящему ванильный софт. (Поэтому я так не люблю Убунту. Патч на патче, черт ногу сломит. То ли Арч, большинство пакетов - скачать с сервера зипку, сконфигурить, собрать, установить, все.)

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

А, нет. От SUCCESS далеко. Опять эта ошибка вылезла, теперь в другом месте. Короче, это должно как-то решаться. Не бывает вот так чтобы, тысячи людей пилят Qt5, а сломалось только у меня.

stevejobs ★★★★☆
() автор топика
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от stevejobs

хаха :)

ищи .pro, в нем задавай INCLUDEPATH +=

это же фу, прямо как убунтята

....

vim ../qt5/qt.pro

INCLUDEPATH += /git/icu/prefix/include LIBS += -L/git/icu/prefix/lib

I'm making a note here: HUGE SUCCESS.

no comments :)


зы. PCH рекомендую отключить к едрене фене.

dib2 ★★★★★
()
Ответ на: комментарий от dib2
fatal error: 'unicode/ucal.h' file not found

compiling /git/qt5/qt5/qtbase/src/corelib/global/qt_pch.h
1 error generated.

Серьезно, к едрене фене. Эта ошибка уже задрала. Я не хочу разрабатывать Qt5, я хочу его просто собрать :3 Какой чудила закоммитил в репозиторий нерабочий код? А дать по рукам топором? Причем по логу коммитов не видно, что кто-то недавно трогал относящиеся к делу места.

Но уже не сейчас. Ухожу. Сначала надо купить эллиптический тренажер, чтобы растрясать на нем жирную задницу, потом - экспроприировать у друга колонки Радиотехника. Продолжим разбираться ночью :3

stevejobs ★★★★☆
() автор топика
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от stevejobs

вот поэтому я еще и не думал даже в 5 ветку переходить. пока там ад содом и гомора - делать с 5 веткой нечего.

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

кстати да, с этим гемор. В портах они складывают заголовки qt4 прямо в /opt/local/include, в результате чего Qt5 вначале подхватывает заголовки qt4 и разваливается на кровавые ошметки на 6 километров ошибок. Пришлось полчаса сидеть и методично выпиливать все отсылки к qt4.

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

я не совсем понимаю, чего ты боишься. На линуксе со сборкой 5 все ОК абсолютно, без сучка-задоринки. Даже на винде и то проблема только натаскать собранные гнусные либы (не соберется же оно без грепа!) и собрать пропатченный иконв из моего гитхаба. Вот тут какие-то ошибки вылезли, но они же очевидно решаемые, невозможно не починить какой-то тупняк про потерянный хидер, который на самом деле есть. Вот если бы его не было - это да, проблема-проблема, а так надо только угадать, как запустить конфигур правильно.

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

1) надо собрать все зависимости. Обычное дело, за исключением того, что нужно руками ползать по сайтам и качать 2-килобайтные файлы.

2) надо собрать иконв патченный. Ну, если он тебе вообще нужен, есть же ICU (мне нужно и то и другое). На сайте гну протухший собран, а из исходников он не собирается под виндой вообще. Пришлось ползать по интернетам и понимать, как получился тот протухший бинарник, который на сайте гну лежит. Понял, накатил патч, выложил на гитхаб. У репозитория сразу образовалась куча лайков и форков, лол :3

3) на момент написания гида надо было собрать openssl свой, т.к. релизнутая версия с сайта - бажная, на линуксе баг почти не проявляется, поэтому они не стали беспокоить себя обновлением релизной версии. «Это опенсорц - жри что дают!» Ну и еще какие-то косяки. Короче, надо собирать, как - описано.

4) ну и еще какие-то мелочи типа «истинно верной строчки configure» (хелп по конфигуру считает, что таких флагов нет, а они ЕСТЬ, а разгадка одна - безблагодатность. т.е. потому что под виндой забыли флаги пофиксать. может уже пофиксали в транке, не знаю), они там в гиде перечислены.

это все для 5, конечно. У тебя-то 4, все другое поди.

stevejobs ★★★★☆
() автор топика
Последнее исправление: stevejobs (всего исправлений: 2)
Ответ на: комментарий от MikeDM

тогда ты никогда там не будешь - виндосовский сайт гну и проблемы в openssl не починят никогда. Плюс всегда были и будут флаги, которые специально не перечисляют в хелпе, чтобы ими не пользовались кто попало, но они есть и нужны.

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

а есть что толкового про Qt5 почитать?

ЗЫ все равно, пока в mac ports не сделают 5 ветку, мигрировать на нее не буду =)

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

понятия не имею)) Читал только доки с официального сайта. Естественно, в qt не шарю, так что рекоммендатор из меня никакой.

у меня-то выбора нет: кроме пятерки ничего и не видел. Тот репозиторий что ты давал, кстати, удалил, в целях сохранности авторских прав.

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