| Summary: | Ошибка в формировании переменных версии пакета | ||||||
|---|---|---|---|---|---|---|---|
| Product: | Sisyphus | Reporter: | serpiph <serpiph> | ||||
| Component: | cmake | Assignee: | Slava Dubrovskiy <dubrsl> | ||||
| Status: | CLOSED NOTABUG | QA Contact: | qa-sisyphus | ||||
| Severity: | major | ||||||
| Priority: | P3 | CC: | lav, nenderus, zerg | ||||
| Version: | unstable | ||||||
| Hardware: | all | ||||||
| OS: | Linux | ||||||
| Attachments: |
|
||||||
вот тут может сломали или около http://git.altlinux.org/people/dubrsl/packages/?p=cmake.git;a=commitdiff;h=9fc7ea4c620e849a719ea23ea6faff17f1d67ee6 Прошу прощения, в процессе написания дрогнула рука. Должно быть: "Согласно файла Modules/readme.txt, при отсутствии указания версии переменная
XXX_FIND_VERSION должна отсутствовать, переменные XXX_FIND_VERSION_MAJOR,
XXX_FIND_VERSION_MINOR, XXX_FIND_VERSION_PATCH и XXX_FIND_VERSION_TWEAK,
XXX_FIND_VERSION_COUNT должны отсутствовать."
Может, мой патч и неверен.
В общем, в kde4libs-devel в файле /usr/share/kde4/apps/cmake/modules/FindQt4.cmake есть проверка переменной Qt4_FIND_VERSION и в случае наличия данной переменной выставляются другие переменные. Однако при вызове этого файла через 'find_package(Qt4)' переменная Qt4_FIND_VERSION создаётся и задаётся параметром QT_MIN_VERSION, а переменные Qt4_FIND_VERSION_* или созданы и пусты, или не созданы вообще. В результате падение при сборке программ, использующих KDE4 и, соответственно, файл из kde4libs-devel, так как в в файле FindKDE4.cmake из kde4libe-devel как раз стоит вызов find_package без версии, но с заранее заданным параметром QT_MIN_VERSION.
Глубже разобраться не получается.
P.S. Ага! В файле Modules/FindQt4.cmake из исходников cmake есть такая запись:
#support old QT_MIN_VERSION if set, but not if version is supplied by find_package()
IF(NOT Qt4_FIND_VERSION AND QT_MIN_VERSION)
SET(Qt4_FIND_VERSION ${QT_MIN_VERSION})
ENDIF(NOT Qt4_FIND_VERSION AND QT_MIN_VERSION)
Случаем, не она портит всю малину? В таком случае здесь должны определяться ещё и переменные Qt4_FIND_VERSION_*, чего нет.
Как только я исправил файл Modules/FindQt4.cmake из cmake-modules, так сразу сборка заработала. Но вопрос к исходному коду (неинициализации переменных) всё равно никуда не делся. Вопрос к коду остался. Вот мнение девелопера http://public.kitware.com/Bug/view.php?id=12352#c27160 Понятно. Тогда вопрос к коду закрываю. |
Created attachment 5015 [details] Правка исходного кода Согласно файла modules/readme.txt, при отсутствии указания версии переменная XXX_FIND_VERSION должна отсутствовать, переменные XXX_FIND_VERSION_MAJOR, XXX_FIND_VERSION_MINOR, XXX_FIND_VERSION_PATCH и XXX_FIND_VERSION_TWEAK, XXX_FIND_VERSION_COUNT. На данный момент переменная XXX_FIND_VERSION есть всегда и она определена, переменные XXX_FIND_VERSION_MAJOR, XXX_FIND_VERSION_MINOR, XXX_FIND_VERSION_PATCH и XXX_FIND_VERSION_TWEAK при отсутствии указания версии устанавливаются в случайное значение. При этом исполнение сборки модулей непредсказуемо от падения при сборке до неправильно собранных файлов.