Bug 34055

Summary: Сломалась обработка AUTOMOC_MOC_OPTIONS в qt 5.9 и cmake-3.9
Product: Sisyphus Reporter: Vitaly Lipatov <lav>
Component: cmakeAssignee: Vitaly Lipatov <lav>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P3 CC: aen, lav, mike, zerg
Version: unstable   
Hardware: all   
OS: Linux   
URL: https://gitlab.kitware.com/cmake/cmake/issues/17418

Description Vitaly Lipatov 2017-10-23 19:08:25 MSK
После обновления cmake до 3.9.2 получил при сборке

Generating MOC predefs moc_predefs.h
AutoMoc: Error: moc predefs generation command failed
AutoMoc: Command:
--
AutoMoc: Command output:
x86_64-alt-linux-g++: error: unrecognized command line option '-bTelegram_pch/stdafx.h'

Используется cmake:
$ grep MOC CMakeLists.txt
set(CMAKE_AUTOMOC ON)
set_target_properties(Telegram PROPERTIES AUTOMOC_MOC_OPTIONS -bTelegram_pch/stdafx.h)

Почему-то параметр для moc
-b <file>                Prepend #include <file> (preserve default include).
стал передаваться в компилятор.

Изменение строки на
set(CMAKE_AUTOMOC_MOC_OPTIONS ${CMAKE_AUTOMOC_MOC_OPTIONS} "-b" "Telegram_pch/stdafx.h")
не помогло.
Comment 1 Vitaly Lipatov 2017-10-23 19:12:46 MSK
Откат до cmake-3.6.3-alt0.2  решает проблему.

Проваленное задание на сборку
http://git.altlinux.org/tasks/191932/
Comment 2 Vitaly Lipatov 2017-10-23 21:09:57 MSK
У меня перестало воспроизводится.
Comment 3 Vitaly Lipatov 2017-10-24 10:02:43 MSK
Разобрался в себе. Проблема появляется, начиная с cmake 3.9.2-alt0.1

* Вт сен 12 2017 L.A. Kostis <lakostis@altlinux.ru> 3.9.2-alt0.1
- 3.9.2:
  + enable server mode by default.
  + update buildreq (added librhash and libuv).

Проваливающееся задание
http://git.altlinux.org/tasks/191956/

[ 16%] Automatic MOC and RCC for target Telegram
Generating MOC predefs moc_predefs.h
AutoMoc: Error: moc predefs generation command failed
AutoMoc: Command:
/usr/bin/c++ -dM -E -c /usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp -I/usr/src/RPM/BUILD/telegram-desktop-1.1.23/Telegram -I/usr/src/RPM/BUILD/telegram-desktop-1.1.23/Telegram/Telegram_autogen/include -I/usr/src/RPM/BUILD/telegram-desktop-1.1.23/Telegram/SourceFiles -I/usr/include/qt5/QtCore -I/usr/include/qt5/QtCore/5.9.2 -I/usr/include/qt5/QtCore/5.9.2/QtCore -I/usr/include/qt5/QtGui -I/usr/include/qt5/QtGui/5.9.2 -I/usr/include/qt5/QtGui/5.9.2/QtGui -I/usr/include/libdrm -I/usr/include/gtk-3.0 -I/usr/include/atk-1.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/libpng15 -I/usr/include/tgvoip -I/usr/include/opus -I/usr/include/libmicrosoft-gsl -I/usr/src/RPM/BUILD/telegram-desktop-1.1.23/Telegram/ThirdParty/emoji_suggestions -I/usr/include/libvariant -I/usr/include/minizip -I/usr/include/AL -I/usr/include/libappindicator3-0.1 -I/usr/include/libdbusmenu-glib-0.4 -I/usr/src/RPM/BUILD/telegram-desktop-1.1.23/Telegram/generated -I/usr/include/qt5 -I/usr/include/qt5/QtWidgets -I/usr/share/qt5/../../lib/qt5/mkspecs/linux-g++ -I/usr/include/qt5/QtNetwork -I/usr/include -DCUSTOM_API_ID -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQ_OS_LINUX64 -DTDESKTOP_DISABLE_AUTOUPDATE -DTDESKTOP_DISABLE_CRASH_REPORTS -DTDESKTOP_DISABLE_DESKTOP_FILE_GENERATION -DTDESKTOP_DISABLE_REGISTER_CUSTOM_SCHEME -DTDESKTOP_DISABLE_UNITY_INTEGRATION -D__STDC_FORMAT_MACROS -b Telegram_pch/stdafx.h
AutoMoc: Command output:
i586-alt-linux-g++: error: Telegram_pch/stdafx.h: No such file or directory
i586-alt-linux-g++: error: unrecognized command line option '-b'

при строках в CMakeLists.txt:
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOMOC_MOC_OPTIONS ${CMAKE_AUTOMOC_MOC_OPTIONS} "-b" "Telegram_pch/stdafx.h")
Comment 4 Vitaly Lipatov 2017-10-24 10:03:46 MSK
Жалоба на подобное поведение с cmake 3.9.2
https://github.com/apitrace/apitrace/issues/528
Comment 5 Vitaly Lipatov 2017-10-30 18:27:37 MSK
Пишут, что с cmake 3.9.4 проблему не испытывают:
https://github.com/apitrace/apitrace/issues/528#issuecomment-340477280
Comment 6 Vitaly Lipatov 2017-10-30 22:56:13 MSK
Собрал cmake из Сизифа в p8 и проверил сборку qt5 5.7.1 and cmake 3.9.2. 
Ошибки нет (правда, проверял на пакете apitrace, в котором такая же проблема).
Выходит, проблема возникла с qt 5.9
Comment 7 Vitaly Lipatov 2017-10-31 15:56:03 MSK
@vitlav You were right, it only happens with the exact combination of CMake 3.9 + Qt 5.9.

I opened a bug report at CMake in order to get some upstream feedback: https://gitlab.kitware.com/cmake/cmake/issues/17418
Comment 8 Vitaly Lipatov 2017-10-31 17:29:45 MSK
Подтвердили
Since CMake 3.9 a common moc_predefs.h file is generated if the Qt version is >= 5.9. Unfortunately the AUTOMOC_MOC_OPTIONS were passed to the compiler command that generates the file.

и исправили
https://gitlab.kitware.com/sebholt/cmake/commit/96d20a4de3420fca0e25a67c24e6f7eaead4420d
Comment 9 Repository Robot 2017-10-31 19:34:46 MSK
cmake-3.9.2-alt1 -> sisyphus:

Tue Oct 31 2017 Vitaly Lipatov <lav@altlinux.ru> 3.9.2-alt1
- autogen: Don't use AUTOMOC_MOC_OPTIONS in moc-predefs command (ALT bug 34055)
Comment 10 Vitaly Lipatov 2017-10-31 22:48:21 MSK
На всякий случай добавлю, что проблема касалась сочетания cmake 3.9.x и qt >= 5.9
Разработчик вроде как выпустил 3.9.5 с исправлением, но большого желания у него не было, так что без необходимости лучше не обновлять пакет на что-то меньшее, чем 3.10.0.