Bug 25927 - Ошибка в формировании переменных версии пакета
Summary: Ошибка в формировании переменных версии пакета
Status: CLOSED NOTABUG
Alias: None
Product: Sisyphus
Classification: Development
Component: cmake (show other bugs)
Version: unstable
Hardware: all Linux
: P3 major
Assignee: Slava Dubrovskiy
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-07-19 13:46 MSK by serpiph
Modified: 2011-08-20 10:36 MSK (History)
3 users (show)

See Also:


Attachments
Правка исходного кода (1.07 KB, patch)
2011-07-19 13:46 MSK, serpiph
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description serpiph 2011-07-19 13:46:07 MSK
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 при отсутствии указания версии устанавливаются в случайное значение.

При этом исполнение сборки модулей непредсказуемо от падения при сборке до неправильно собранных файлов.
Comment 1 Slava Dubrovskiy 2011-07-20 11:14:44 MSK
вот тут может сломали или около
http://git.altlinux.org/people/dubrsl/packages/?p=cmake.git;a=commitdiff;h=9fc7ea4c620e849a719ea23ea6faff17f1d67ee6
Comment 2 serpiph 2011-07-20 14:53:14 MSK
Прошу прощения, в процессе написания дрогнула рука. Должно быть: "Согласно файла 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_*, чего нет.
Comment 3 serpiph 2011-07-21 13:15:29 MSK
Как только я исправил файл Modules/FindQt4.cmake из cmake-modules, так сразу сборка заработала.
Comment 4 serpiph 2011-07-21 13:16:48 MSK
Но вопрос к исходному коду (неинициализации переменных) всё равно никуда не делся.
Comment 5 serpiph 2011-07-25 00:16:40 MSK
Вопрос к коду остался.
Comment 6 Slava Dubrovskiy 2011-08-03 22:45:46 MSK
Вот мнение девелопера
http://public.kitware.com/Bug/view.php?id=12352#c27160
Comment 7 serpiph 2011-08-20 10:36:02 MSK
Понятно. Тогда вопрос к коду закрываю.