Bug 38643

Summary: Ломается сборка gimagereader после обновления до cmake-3.17.3
Product: Sisyphus Reporter: Vitaly Lipatov <lav>
Component: gimagereaderAssignee: Vitaly Lipatov <lav>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: lav, mike
Version: unstable   
Hardware: x86_64   
OS: Linux   

Description Vitaly Lipatov 2020-06-25 22:30:01 MSK
С cmake-3.16.3-alt1 нормально собирается.

После обновления cmake до 3.17.3 получаем:
/usr/bin/cmake -E cmake_link_script CMakeFiles/gimagereader.dir/link.txt --verbose=1
/usr/bin/g++  -pipe -frecord-gcc-switches -Wall -g -O2 -march=i586 -mtune=generic -fopenmp  -rdynamic CMakeFiles/gimagereader.dir/gimagereader_autogen/mocs_compilation.cpp.o CMakeFiles/gimagereader.dir/common/CCITTFax4Encoder.cc.o CMakeFiles/gimagereader.dir/common/PaperSize.cc.o CMakeFiles/gimagereader.dir/qt/src/Acquirer.cc.o CMakeFiles/gimagereader.dir/qt/src/Config.cc.o CMakeFiles/gimagereader.dir/qt/src/ConfigSettings.cc.o CMakeFiles/gimagereader.dir/qt/src/CrashHandler.cc.o CMakeFiles/gimagereader.dir/qt/src/DisplayRenderer.cc.o CMakeFiles/gimagereader.dir/qt/src/Displayer.cc.o CMakeFiles/gimagereader.dir/qt/src/DisplayerToolSelect.cc.o CMakeFiles/gimagereader.dir/qt/src/DjVuDocument.cc.o CMakeFiles/gimagereader.dir/qt/src/FileDialogs.cc.o CMakeFiles/gimagereader.dir/qt/src/MainWindow.cc.o CMakeFiles/gimagereader.dir/qt/src/OutputEditor.cc.o CMakeFiles/gimagereader.dir/qt/src/OutputEditorText.cc.o CMakeFiles/gimagereader.dir/qt/src/OutputTextEdit.cc.o CMakeFiles/gimagereader.dir/qt/src/Recognizer.cc.o CMakeFiles/gimagereader.dir/qt/src/Scanner.cc.o CMakeFiles/gimagereader.dir/qt/src/SearchReplaceFrame.cc.o CMakeFiles/gimagereader.dir/qt/src/SourceManager.cc.o CMakeFiles/gimagereader.dir/qt/src/SubstitutionsManager.cc.o CMakeFiles/gimagereader.dir/qt/src/TessdataManager.cc.o CMakeFiles/gimagereader.dir/qt/src/Utils.cc.o CMakeFiles/gimagereader.dir/qt/src/hocr/DisplayerToolHOCR.cc.o CMakeFiles/gimagereader.dir/qt/src/hocr/HOCRDocument.cc.o CMakeFiles/gimagereader.dir/qt/src/hocr/HOCROdtExporter.cc.o CMakeFiles/gimagereader.dir/qt/src/hocr/HOCRPdfExporter.cc.o CMakeFiles/gimagereader.dir/qt/src/hocr/HOCRTextExporter.cc.o CMakeFiles/gimagereader.dir/qt/src/hocr/OutputEditorHOCR.cc.o CMakeFiles/gimagereader.dir/qt/src/main.cc.o CMakeFiles/gimagereader.dir/qt/src/scanner/ScannerSane.cc.o CMakeFiles/gimagereader.dir/qrc_gimagereader.cpp.o  -o gimagereader-qt5  -ltesseract -lqtspell-qt5 -lpoppler-qt5 -lquazip5 -lsane -ldjvulibre -lenchant-2 -lpodofo -ldl /usr/lib/libQt5Network.so.5.12.8 /usr/lib/libQt5DBus.so.5.12.8 /usr/lib/libQt5Xml.so.5.12.8 /usr/lib/libQt5PrintSupport.so.5.12.8 /usr/lib/libQt5Widgets.so.5.12.8 /usr/lib/libQt5Gui.so.5.12.8 /usr/lib/libQt5Core.so.5.12.8

[ 57%] Linking CXX executable gimagereader-qt5
/usr/bin/ld.default: CMakeFiles/gimagereader.dir/qt/src/Acquirer.cc.o: in function `Acquirer::~Acquirer()':
/tmp/.private/lav/RPM/BUILD/gimagereader-3.3.1/qt/src/Acquirer.cc:75: undefined reference to `vtable for Acquirer'
/usr/bin/ld.default: CMakeFiles/gimagereader.dir/qt/src/Acquirer.cc.o: in function `Acquirer::Acquirer(UI_MainWindow const&)':
/tmp/.private/lav/RPM/BUILD/gimagereader-3.3.1/qt/src/Acquirer.cc:37: undefined reference to `vtable for Acquirer'
/usr/bin/ld.default: CMakeFiles/gimagereader.dir/qt/src/Acquirer.cc.o: in function `ScannerSane::ScannerSane()':
/tmp/.private/lav/RPM/BUILD/gimagereader-3.3.1/qt/src/scanner/ScannerSane.hh:33: undefined reference to `vtable for ScannerSane'
/usr/bin/ld.default: CMakeFiles/gimagereader.dir/qt/src/Acquirer.cc.o: in function `AbstractSetting::AbstractSetting(QString const&)':
/tmp/.private/lav/RPM/BUILD/gimagereader-3.3.1/qt/src/ConfigSettings.hh:59: undefined reference to `vtable for AbstractSetting'
/usr/bin/ld.default: CMakeFiles/gimagereader.dir/qt/src/Acquirer.cc.o: in function `ComboSetting::ComboSetting(QString const&, QComboBox*, int)':
Comment 1 Vitaly Lipatov 2020-06-25 22:45:17 MSK
Видимо, дело в этим изменении, начинающемся с 3.17.0, о котором пишет cmake при сборке:

CMake Warning (dev) in CMakeLists.txt:
  Policy CMP0100 is not set: Let AUTOMOC and AUTOUIC process .hh files.  Run
  "cmake --help-policy CMP0100" for policy details.  Use the cmake_policy
  command to set the policy and suppress this warning.

  For compatibility, CMake is excluding the header file(s):

    "/tmp/.private/lav/RPM/BUILD/gimagereader-3.3.1/common/CCITTFax4Encoder.hh"
    "/tmp/.private/lav/RPM/BUILD/gimagereader-3.3.1/common/LangTables.hh"
    "/tmp/.private/lav/RPM/BUILD/gimagereader-3.3.1/common/PaperSize.hh"
    "/tmp/.private/lav/RPM/BUILD/gimagereader-3.3.1/qt/src/Acquirer.hh"

...

$ cmake --help-policy CMP0100
CMP0100
-------

Let ``AUTOMOC`` and ``AUTOUIC`` process
header files that end with a ``.hh`` extension.

Since version 3.17, CMake processes header files that end with a
``.hh`` extension in ``AUTOMOC`` and ``AUTOUIC``.
In earlier CMake versions, these header files were ignored by
``AUTOMOC`` and ``AUTOUIC``.

This policy affects how header files that end with a ``.hh`` extension
get treated in ``AUTOMOC`` and ``AUTOUIC``.

The ``OLD`` behavior for this policy is to ignore ``.hh`` header files
in ``AUTOMOC`` and ``AUTOUIC``.

The ``NEW`` behavior for this policy is to process ``.hh`` header files
in ``AUTOMOC`` and ``AUTOUIC`` just like other header files.

.. note::

  To silence the ``CMP0100`` warning source files can be excluded from
  ``AUTOMOC`` and ``AUTOUIC`` processing by setting the
  source file properties ``SKIP_AUTOMOC``, ``SKIP_AUTOUIC`` or
  ``SKIP_AUTOGEN``.

  .. code-block:: cmake

    # Source skip example:
    set_property(SOURCE /path/to/file1.hh PROPERTY SKIP_AUTOMOC ON)
    set_property(SOURCE /path/to/file2.hh PROPERTY SKIP_AUTOUIC ON)
    set_property(SOURCE /path/to/file3.hh PROPERTY SKIP_AUTOGEN ON)

This policy was introduced in CMake version 3.17.0.  CMake version
3.17.0 warns when the policy is not set and uses ``OLD`` behavior.
Use the ``cmake_policy()`` command to set it to ``OLD`` or ``NEW``
explicitly.
Comment 2 Repository Robot 2020-06-26 01:19:37 MSK
gimagereader-3.3.1-alt3 -> sisyphus:

 Thu Jun 25 2020 Vitaly Lipatov <lav@altlinux.ru> 3.3.1-alt3
 - fix build with cmake after 3.17.0 (ALT bug 38643)
Comment 3 Vitaly Lipatov 2020-06-29 19:38:20 MSK
Тогда я добавлю для памяти, что исправление сделано в апстриме так:
++IF(${CMAKE_VERSION} VERSION_GREATER "3.17.0")
++CMAKE_POLICY(SET CMP0100 NEW)
++ENDIF()

Они не захотели применить появившийся в 3.7.0 VERSION_GREATER_EQUAL

Поэтому сборка c cmake 3.17.0 работать не будет, хотя в спеке это не указано.