Bug 25927

Summary: Ошибка в формировании переменных версии пакета
Product: Sisyphus Reporter: serpiph <serpiph>
Component: cmakeAssignee: 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:
Description Flags
Правка исходного кода none

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
Понятно. Тогда вопрос к коду закрываю.