ImageProcessing-ElectronicPublications / scantailor-experimental

Scan Tailor Experimental is an interactive post-processing tool for scanned pages.
https://github.com/Tulon/scantailor/tree/experimental
GNU General Public License v3.0
30 stars 0 forks source link

OS: Windows #2

Closed zvezdochiot closed 10 months ago

zvezdochiot commented 1 year ago

Hi @plzombie , @trufanov-nok .

Интересует возможность сборки последнего релиза под винду. Уверен, что на этот раз "проблем" со сборкой будет поболее чем со ScanTailor Advanced. Ежели для сборки понадобятся изменение файлов cmake, вносите смело. Для повышения шансов на успех прилагаю свои сборочные файлы: scantailor-experimental-0.2023.07.27-build.zip (Linux devuan-zvezdochiot 5.10.0-23-amd64 #1 SMP Debian 5.10.179-1 (2023-05-12) x86_64 GNU/Linux) screen-threshold
plzombie commented 1 year ago

@zvezdochiot Я правильно понимаю, что -experimental использует OpenCL?

plzombie commented 1 year ago

Класс. Я вот добрался до Eigen, скачал бинарник, иии - меня встречает файл cmake. А ещё оказалось, что это "кроссплатформенное программное обеспечение" не поддерживает visualstudio 2019 и требует компилятор фортрана. Можешь сюда уже собранные инклуды скинуть?

zvezdochiot commented 1 year ago

Hi @plzombie .

Да. Но опционально. У меня собрался без него:

ldd /usr/bin/scantailor-experimental
        linux-vdso.so.1 (0x00007ffdc4b88000)
        libtiff.so.5 => /usr/lib/x86_64-linux-gnu/libtiff.so.5 (0x00007fa95d7cc000)
        libpng16.so.16 => /usr/lib/x86_64-linux-gnu/libpng16.so.16 (0x00007fa95d792000)
        libjpeg.so.62 => /usr/lib/x86_64-linux-gnu/libjpeg.so.62 (0x00007fa95d70e000)
        libQt5OpenGL.so.5 => /usr/lib/x86_64-linux-gnu/libQt5OpenGL.so.5 (0x00007fa95d6b4000)
        libQt5Xml.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Xml.so.5 (0x00007fa95d670000)
        libQt5Widgets.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 (0x00007fa95cfe6000)
        libQt5Gui.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5 (0x00007fa95c922000)
        libQt5Core.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 (0x00007fa95c3d7000)
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fa95c20a000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa95c0c6000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fa95c0ac000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa95bed8000)
        libwebp.so.6 => /usr/lib/x86_64-linux-gnu/libwebp.so.6 (0x00007fa95be6d000)
        libzstd.so.1 => /usr/lib/x86_64-linux-gnu/libzstd.so.1 (0x00007fa95bd92000)
        liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007fa95bd6a000)
        libjbig.so.0 => /usr/lib/x86_64-linux-gnu/libjbig.so.0 (0x00007fa95bb5c000)
        libdeflate.so.0 => /usr/lib/x86_64-linux-gnu/libdeflate.so.0 (0x00007fa95bb40000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fa95bb23000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fa95baff000)
        libGL.so.1 => /usr/lib/x86_64-linux-gnu/libGL.so.1 (0x00007fa95ba78000)
        libharfbuzz.so.0 => /usr/lib/x86_64-linux-gnu/libharfbuzz.so.0 (0x00007fa95b990000)
        libmd4c.so.0 => /usr/lib/x86_64-linux-gnu/libmd4c.so.0 (0x00007fa95b97e000)
        libdouble-conversion.so.3 => /usr/lib/x86_64-linux-gnu/libdouble-conversion.so.3 (0x00007fa95b967000)
        libicui18n.so.67 => /usr/lib/x86_64-linux-gnu/libicui18n.so.67 (0x00007fa95b661000)
        libicuuc.so.67 => /usr/lib/x86_64-linux-gnu/libicuuc.so.67 (0x00007fa95b476000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fa95b470000)
        libpcre2-16.so.0 => /usr/lib/x86_64-linux-gnu/libpcre2-16.so.0 (0x00007fa95b3e5000)
        libglib-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fa95b2b6000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fa95db42000)
        libGLdispatch.so.0 => /usr/lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007fa95b1fe000)
        libGLX.so.0 => /usr/lib/x86_64-linux-gnu/libGLX.so.0 (0x00007fa95b1c8000)
        libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007fa95b105000)
        libgraphite2.so.3 => /usr/lib/x86_64-linux-gnu/libgraphite2.so.3 (0x00007fa95b0d9000)
        libicudata.so.67 => /usr/lib/x86_64-linux-gnu/libicudata.so.67 (0x00007fa9595c0000)
        libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fa95954d000)
        libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007fa959408000)
        libbrotlidec.so.1 => /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1 (0x00007fa9593fa000)
        libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fa9593cf000)
        libbrotlicommon.so.1 => /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1 (0x00007fa9593ac000)
        libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007fa9593a7000)
        libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fa95919f000)
        libbsd.so.0 => /usr/lib/x86_64-linux-gnu/libbsd.so.0 (0x00007fa959188000)
        libmd.so.0 => /usr/lib/x86_64-linux-gnu/libmd.so.0 (0x00007fa95917b000)

Отличия от STA: STA пользует ещё libQt5Svg.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Svg.so.5. Всё

:question: То есть, что именно, помимо build, надо скинуть?

plzombie commented 1 year ago

У меня сейчас пишет:

-- Could NOT find Eigen3 (missing: EIGEN3_INCLUDE_DIR EIGEN3_VERSION_OK) (Required is at least version "2.91.0")
CMake Error at CMakeLists.txt:162 (MESSAGE):
  Could not find Eigen (version 3) headers.

  You may need to install Eigen3 or set EIGEN3_INCLUDE_DIR manually.

Сам Eigen под винду не собирается. Нужен, собственно, собранный под линуксом. Желательно для mingw

Мало того, у меня сейчас пишет вот что:

f:\NonOfMyBusiness\scantailor-experimental-main\build>cmake -D OpenCL_LIBRARY=f:\NonOfMyBusiness\OpenCL-SDK-v2023.04.17-Win-x64\ -D OpenCL_INCLUDE_DIR=f:\NonOfMyBusiness\OpenCL-SDK-v2023.04.17-Win-x64\include\ -D DEPS_BUILD_DIR=f:\NonOfMyBusiness\scantailor\libs\ -D Qt5Core_DIR=f:\NonOfMyBusiness\scantailor\libs\Qt\lib\cmake\Qt5Core\ ..
-- Selecting Windows SDK version 10.0.22000.0 to target Windows 10.0.19045.
CMake Error at CMakeLists.txt:145 (INCLUDE):
  INCLUDE could not find requested file:

    F:/NonOfMyBusiness/scantailor/libs/export-vars.cmake

CMake Error at CMakeLists.txt:174 (FIND_PACKAGE):
  By not providing "FindQt5Core.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "Qt5Core", but
  CMake did not find one.

  Could not find a package configuration file provided by "Qt5Core"
  (requested version 5.3) with any of the following names:

    Qt5CoreConfig.cmake
    qt5core-config.cmake

  Add the installation prefix of "Qt5Core" to CMAKE_PREFIX_PATH or set
  "Qt5Core_DIR" to a directory containing one of the above files.  If
  "Qt5Core" provides a separate development package or SDK, be sure it has
  been installed.

-- Configuring incomplete, errors occurred!

f:\NonOfMyBusiness\scantailor-experimental-main\build>

Ума не приложу, что ему надо

zvezdochiot commented 1 year ago

Hi @plzombie .

А cmake --trace .. что даёт?

И также cmake -D ENABLE_OPENGL=OFF ..?

И надо как то помочь ему найти Qt5. https://github.com/ImageProcessing-ElectronicPublications/scantailor-experimental/tree/main/packaging/windows никак не поможет?

plzombie commented 1 year ago

А cmake --trace .. что даёт?

F:/NonOfMyBusiness/scantailor-experimental-main/CMakeLists.txt(172):  SET(CMAKE_AUTOMOC ON )
F:/NonOfMyBusiness/scantailor-experimental-main/CMakeLists.txt(173):  SET(qt_min_version 5.3 )
F:/NonOfMyBusiness/scantailor-experimental-main/CMakeLists.txt(174):  FIND_PACKAGE(Qt5Core ${qt_min_version} REQUIRED )
CMake Warning (dev) at CMakeLists.txt:174 (FIND_PACKAGE):
  Policy CMP0126 is not set: set(CACHE) does not remove a normal variable of
  the same name.  Run "cmake --help-policy CMP0126" for policy details.  Use
  the cmake_policy command to set the policy and suppress this warning.

  For compatibility with older versions of CMake, normal variable
  "Qt5Core_DIR" will be removed from the current scope.
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Error at CMakeLists.txt:174 (FIND_PACKAGE):
  By not providing "FindQt5Core.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "Qt5Core", but
  CMake did not find one.

  Could not find a package configuration file provided by "Qt5Core"
  (requested version 5.3) with any of the following names:

    Qt5CoreConfig.cmake
    qt5core-config.cmake

  Add the installation prefix of "Qt5Core" to CMAKE_PREFIX_PATH or set
  "Qt5Core_DIR" to a directory containing one of the above files.  If
  "Qt5Core" provides a separate development package or SDK, be sure it has
  been installed.

-- Configuring incomplete, errors occurred!

И надо как то помочь ему найти Qt5. https://github.com/ImageProcessing-ElectronicPublications/scantailor-experimental/tree/main/packaging/windows никак не поможет?

Спасибо, прочту

zvezdochiot commented 1 year ago

Hi @plzombie .

Смотри также STU и STA. Там по-другому поиск Qt5 организован. Ежели надо менять cmake-файлы, не вопрос. Я бы и сам, но мне из-за OS-и несподручно шаманить.

PS: Кстати, STA у тебя точно собирается, а STU? Это ежели я сам попытаюсь cmake-файлы перелабать, то что брать как target: STA или STU?

@KOLANICH помоги. Ты спец по cmake. Как переделать, чтоб под виндой поехало? Принимаются любые патчи.

PS: про-grep-ил src. Звиняюсь. Eigen пользуется в src/math. Интересно, это обязательно? Похоже, что да.

@plzombie , собрал build/blas/libeigen_blas_static.a и build/lapack/libeigen_lapack_static.a в MINGW: eigen-3.4.0-build-mingw-win64.zip. Может поможет?

KOLANICH commented 1 year ago

I'm sorry, I cannot try building it on my machine right now (so IDK what exact issue you have (I assumme it is that it doesn't find Qt?), and which are the causes of it), so I can only give the general advice for now. My advice is just always using prebuilt binary packages and not to hardcode deps paths in CMakeLists.txt. I guess for Windows platform MSYS2 for the most of packages (maybe even including Qt) can be used (it is kinda a distro and uses pacman package manager from Arch). Also CMakeLists.txt tries to discover some libs itself, while modern versions of CMake have modules for that. Like https://cmake.org/cmake/help/latest/module/FindZLIB.html instead of FIND_PATH(ZLIB_INCLUDE_DIR zlib.h https://cmake.org/cmake/help/latest/module/FindPNG.html https://cmake.org/cmake/help/latest/module/FindTIFF.html . By using the modules the size of CMakeLists.txt can be greately reduced and its clarity can be increased.

Also I propose to just drop the ancient CMake versions. Also there is SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules"). It completely overrides it. Usually it should append.

While one can do INCLUDE(cmake/FindPthreads.cmake), one can also add "${CMAKE_SOURCE_DIR}/cmake" to CMAKE_MODULE_PATH too and import by just a name. Also I guess you don't need FindPthreads, https://cmake.org/cmake/help/latest/module/FindThreads.html .

Also stuff like https://raw.githubusercontent.com/ImageProcessing-ElectronicPublications/scantailor-experimental/main/cmake/SetDefaultBuildType.cmake is a piece of shit, such thinks shouldn't ge overridden by cmake scripts.

Also usually one should stay away of using macros and use functions andnset(... PARENT_SCOPE).

In other words CMake scripts here are full of antipatterns.

P.S. I write in English because I think GitHub is an international website and that it is respectful to make own texts there to be understandable by everyone.

KOLANICH commented 1 year ago

One more thing. If you need Windows XP support, you need an old version of pthreads, in some version they have dropped su-port of XP. Also you need to provide the right flags to clang. -Wl,--major-os-version, -Wl,--minor-os-version, -Wl,--major-subsystem-version, -Wl,--minor-subsystem-version. https://github.com/KOLANICH-libs/WindowsTargetToolchainFiles.cmake can be helpful.

trufanov-nok commented 1 year ago

Сам Eigen под винду не собирается.

Eigen - это header only библиотека линейной алгебры. Он не даст dll в выхлопе. Там достаточно чтобы проект видел header files (.h, *.hpp). CmakeFiles в нем - просто для установки в системные папки header'ов. А FIND_LIBRARY(EIGEN) в проекте - для поиска этих файлов и добавления путей к ним в include_directories()

zvezdochiot commented 1 year ago

@trufanov-nok , да с eigen разберёмся. Почём он Qt5 не находит? Что ему не так?

PS: Я не хочу лезть в cmake-файлы, т.к. не смогу проверить результат.

trufanov-nok commented 1 year ago

Почём он Qt5 не находит? Что ему не так?

не там значит ищет. Добавление message("$MyVar") в cmakefiles должно облегчить дебаг путей.
Но в принципе, "все фигня, кроме пчёл"
Нужен DevOps, который настроит CI, которое будет собирать автоматически проект под Винду в ее образе (x86 - нефакт, но 64 - точно) при каждом коммите, и сборку выдавать в артефактах. Там вроде даже NSI инсталлятор можно сгенерить. Я думал что STA проект до этого и дошел, но сейчас глянул - вроде нет.

Старые методы сборки - это из жанра один Петя смог настроить у себя (Например я, но у меня винда на отдельном HDD, который надо втыкать в ноут, поэтому я крайне редко до такого дохожу) и всем собирает. Это тупиковый путь.
И да, я бы упер такой CI в STU ))

zvezdochiot commented 1 year ago

@trufanov-nok say:

я бы упер такой CI в STU ))

Да я бы и сам упёр. Только в STA сборка онли латест бунта (чисто Qt6 компатибле проверяют). Вот только мне на этот Qt6 с колокольни даже в лине. Я бы с удовольствием вообще все "поделки" на Qt4 собирал бы.

PS: Только что произвёл обработку очередной книги в STEX. Казалось бы самый урезанный вариант ST. Но как же удобно и грамотно он построен по сравнению со STA и STU. Осталось только отрицательные поля под капот завести и станет вне конкуренции по удобству.

STEX 0.2023.08.24 (screenshot "output"): stex-0 2023 08 24-output

zvezdochiot commented 10 months ago

Release 0.2023.09.13. Build for Windows by @Нубий-IV. See also #3.

zvezdochiot commented 10 months ago

Hi @plzombie .

Здесь Нубий-IV описание сборки под винду, которую он применил, сбросил: BUILD.RU.md. Будет время, посмотри. Может какие помарки или примечания внесёшь. Или какие рекомендации добавишь.

PS: Здесь главное подтвердить, что всё именно так, как написано, и сборку можно повторить.

plzombie commented 9 months ago

@zvezdochiot Я попытался собрать с зависимостями от Scantailor Advanced. Он ругается на jpeg теперь. Видимо, ему нужен libjpeg 6 или как в инструкции libjpeg-turbo. Буду сравнивать с файлами cmake от scantailor advanced. Перекомпилировать всё ещё раз, включая Qt, как по инструкции, как-то не хочется P.S. Можешь в линуксе сделать ldd по экзешнику?

zvezdochiot commented 9 months ago

@plzombie say:

Можешь в линуксе сделать ldd по экзешнику?

ldd /usr/bin/scantailor-experimental
  linux-vdso.so.1 (0x00007ffe0d1fe000)
  libtiff.so.5 => /usr/lib/x86_64-linux-gnu/libtiff.so.5 (0x00007fbd46d13000)
  libpng16.so.16 => /usr/lib/x86_64-linux-gnu/libpng16.so.16 (0x00007fbd46cd9000)
  libjpeg.so.62 => /usr/lib/x86_64-linux-gnu/libjpeg.so.62 (0x00007fbd46c55000)
  libQt5OpenGL.so.5 => /usr/lib/x86_64-linux-gnu/libQt5OpenGL.so.5 (0x00007fbd46bfb000)
  libQt5Xml.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Xml.so.5 (0x00007fbd46bb7000)
  libQt5Widgets.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 (0x00007fbd4652d000)
  libQt5Gui.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5 (0x00007fbd45e69000)
  libQt5Core.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 (0x00007fbd4591e000)
  libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fbd45751000)
  libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fbd4560d000)
  libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fbd455f3000)
  libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fbd4541f000)
  libwebp.so.6 => /usr/lib/x86_64-linux-gnu/libwebp.so.6 (0x00007fbd453b3000)
  libzstd.so.1 => /usr/lib/x86_64-linux-gnu/libzstd.so.1 (0x00007fbd452d8000)
  liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007fbd452b0000)
  libjbig.so.0 => /usr/lib/x86_64-linux-gnu/libjbig.so.0 (0x00007fbd450a2000)
  libdeflate.so.0 => /usr/lib/x86_64-linux-gnu/libdeflate.so.0 (0x00007fbd45086000)
  libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fbd45069000)
  libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fbd45045000)
  libGL.so.1 => /usr/lib/x86_64-linux-gnu/libGL.so.1 (0x00007fbd44fbe000)
  libharfbuzz.so.0 => /usr/lib/x86_64-linux-gnu/libharfbuzz.so.0 (0x00007fbd44ed6000)
  libmd4c.so.0 => /usr/lib/x86_64-linux-gnu/libmd4c.so.0 (0x00007fbd44ec4000)
  libdouble-conversion.so.3 => /usr/lib/x86_64-linux-gnu/libdouble-conversion.so.3 (0x00007fbd44ead000)
  libicui18n.so.67 => /usr/lib/x86_64-linux-gnu/libicui18n.so.67 (0x00007fbd44ba7000)
  libicuuc.so.67 => /usr/lib/x86_64-linux-gnu/libicuuc.so.67 (0x00007fbd449bc000)
  libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fbd449b6000)
  libpcre2-16.so.0 => /usr/lib/x86_64-linux-gnu/libpcre2-16.so.0 (0x00007fbd4492b000)
  libglib-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fbd447fc000)
  /lib64/ld-linux-x86-64.so.2 (0x00007fbd4707c000)
  libGLdispatch.so.0 => /usr/lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007fbd44744000)
  libGLX.so.0 => /usr/lib/x86_64-linux-gnu/libGLX.so.0 (0x00007fbd4470e000)
  libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007fbd4464b000)
  libgraphite2.so.3 => /usr/lib/x86_64-linux-gnu/libgraphite2.so.3 (0x00007fbd4461f000)
  libicudata.so.67 => /usr/lib/x86_64-linux-gnu/libicudata.so.67 (0x00007fbd42b06000)
  libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fbd42a93000)
  libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007fbd4294e000)
  libbrotlidec.so.1 => /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1 (0x00007fbd42940000)
  libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fbd42915000)
  libbrotlicommon.so.1 => /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1 (0x00007fbd428f2000)
  libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007fbd428ed000)
  libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fbd426e5000)
  libbsd.so.0 => /usr/lib/x86_64-linux-gnu/libbsd.so.0 (0x00007fbd426ce000)
  libmd.so.0 => /usr/lib/x86_64-linux-gnu/libmd.so.0 (0x00007fbd426c1000)

То есть по инструкции хреново? Или просто муторно?

PS: Ты так же можешь сделать objdump по уже готовому EXE в релизах.

plzombie commented 9 months ago

Инструкция нормальная, но я хочу с зависимостями от Scantailor Advanced собрать

zvezdochiot commented 9 months ago

@plzombie say:

я хочу с зависимостями от Scantailor Advanced собрать

Понял тебя. Ни капли не возражаю. Но только помочь особо мало чем могу. Но ежели чем могу, то разумеется сделаю.

noobie-iv commented 9 months ago

@plzombie say:

Он ругается на jpeg теперь.

Речь про исходную версию cmake-скриптов? Там проблема в том, что у оригинального libjpeg нет своего cmake-проекта, только набор make-файлов и скрипт configure. Из-за этого в скриптах сборки ST фактически с нуля написан свой cmake-проект под эту библиотеку. Но он, видимо, устарел, там даже набор исходников поменялся. Так что возможны варианты:

  1. Качать старую исходную версию библиотеки, под которую это написано.
  2. Cобрать ее вручную как написано в ее readme, через make.
  3. Скачать к ней файлы cmake, на гитхабе есть такой проект.
  4. Заменить ее на turbo, они совместимы.

А в той версии, которую я сделал, автосборка зависимостей вообще удалена, чтобы не терять время на поддержку скриптов всех зависимостей под все системы/компиляторы/версии. Если зависимости уже собраны (неважно как, в автомате оно получилось, или вручную) - при сборке ST достаточно указать пути ко всем зависимостям, либо заранее через CMAKE_PREFIX_PATH (быстрее), либо вручную по мере возникновения ошибок при конфигурировании (дольше).

zvezdochiot commented 9 months ago

@noobie-iv say:

Так что возможны варианты:

Приветствую, Роман. Заинвайтил вас в ORG.IPEP.

plzombie commented 9 months ago

@zvezdochiot Удалось скомпилировать с зависимостями от Scantailor Advanced. Вот скрипт сборки. Надо будет нормальный скрипт написать, на Powershell, как время будет

REM Next is a path to vs env
REM Run it first in CMD then run this script
REM "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"

REM For jpeg, copy stage/lib/libjpeg.lib to lib/libjpeg.lib
REM For zlib, copy stage/lib/zdll.lib to lib/zdll.lib
REM For tiff, copy stage/lib/zdll.lib to libtiff/lib/libtiff.lib and bin/libtiff.dll to libtiff/bin/libtiff.dll

rmdir /S /Q build
mkdir build
cd build

cmake -G "NMake Makefiles" -D CMAKE_BUILD_TYPE=Release -D CMAKE_PREFIX_PATH=f:\NonOfMyBusiness\scantailor\libs\Boost;f:\NonOfMyBusiness\scantailor\libs\eigen-3.4.0;f:\NonOfMyBusiness\scantailor\libs\jpeg-9e;f:\NonOfMyBusiness\scantailor\libs\libpng-1.6.39;f:\NonOfMyBusiness\scantailor\libs\Qt;f:\NonOfMyBusiness\scantailor\libs\tiff-4.2.0\libtiff;f:\NonOfMyBusiness\scantailor\libs\zlib-1.2.11;f:\NonOfMyBusiness\scantailor\libs\OpenCL-SDK-v2023.04.17-Win-x64 ..

nmake

cd ..

pause

Сейчас залью ещё модифицированный CMakeLists.txt

zvezdochiot commented 9 months ago

@plzombie say:

Вот скрипт сборки.

Так особого то скрипта и нет вовсе. Просто задание переменных cmake. Это можно просто задокументировать и всё. То бишь прописывается структура директорий, прописываются команды с путями (как у вас в bat-файле). И всё.

PS: Кстати, коли bat-файл, то f:\NonOfMyBusiness\scantailor\libs\ надо было вынести в переменную LIBSPATH и использовать:

SET LIBSPATH=f:\NonOfMyBusiness\scantailor\libs\
cmake -G "NMake Makefiles" -D CMAKE_BUILD_TYPE=Release -D CMAKE_PREFIX_PATH=%LIBSPATH%Boost;%LIBSPATH%eigen-3.4.0;%LIBSPATH%jpeg-9e;%LIBSPATH%libpng-1.6.39;%LIBSPATH%Qt;%LIBSPATH%libtiff;%LIBSPATH%zlib-1.2.11;%LIBSPATH%OpenCL-SDK-v2023.04.17-Win-x64
plzombie commented 9 months ago

@zvezdochiot Ну да. Я чисто свой скрипт выложил. Если его в репозиторий добавлять, то надо дорабатывать.

Я добавил два коммита. Первый добавляет альтернативные названия dll-ок в CMakeLists.txt. Второй правит ошибки в скрипте установщика (как минимум, теперь у меня ярлыки создаются, все файлы удаляются и не даёт запустить удаление если приложение запущено)

zvezdochiot commented 9 months ago

@plzombie say:

Я добавил два коммита.

NSIS, говоришь. А где сама инсталяшка в релизе? Я то её никак сделать не смогу. А даже, ежели смогу, то не смогу проверить.

plzombie commented 9 months ago

@zvezdochiot Прикрепил

zvezdochiot commented 9 months ago

@plzombie say:

Прикрепил.

Да. Всё увидел. Спсб. Ну и каков твой "диагноз"? Юзабельная система сборки или нужен "специально обученный человек"?

plzombie commented 9 months ago

Нормальная. Но я хочу скрипт дописать, который бы все зависимости скачивал и с ними запускал уже cmake

zvezdochiot commented 9 months ago

@plzombie say:

Но я хочу скрипт дописать...

Нет препятствий патриотам! :+1:


PS: :warning: Заметил: у инсталяшки дважды прописывается experimental. Я вижу это как наследие от предыдущих сборок, где имя инсталятора складывалось из scantailor+experimental. В нашем случае по аналогии происходит следующее: scantailor-experimental+experimental. Надо бы: https://github.com/ImageProcessing-ElectronicPublications/scantailor-experimental/blob/be2d6703e7b6bdb7dd0c815a3066a871adfbd025/packaging/windows/CMakeLists.txt#L21 заменить на:

SET(INSTALLER_FILENAME "scantailor-experimental-${VERSION_QUAD}-${bits}bit-install.exe")

:information_source: Хотя не. Надо наконец упразднить всю это "историческую" канитель и перенести experimental из VERSION в название, в саму VERSION перенести VERSION_QUAD, а VERSION_QUAD упразднить. Такие вот дела. https://github.com/ImageProcessing-ElectronicPublications/scantailor-experimental/blob/be2d6703e7b6bdb7dd0c815a3066a871adfbd025/src/version.h#L22-L23

zvezdochiot commented 9 months ago

@zvezdochiot say:

Надо наконец упразднить всю это "историческую" канитель

Сделал: https://github.com/ImageProcessing-ElectronicPublications/scantailor-experimental/commit/54b4d2f51469df074c916b67dbe4e82d72402309

zvezdochiot commented 9 months ago

Привет @plzombie .

Получено одно срабатывание Trojan:Win32/Wacatac.H!ml на инсталяшке в дефендере на 10 вин. В ClamAV (linux) ничего.

plzombie commented 9 months ago

Там написано !ml в конце, это какая-то шизанутая эвристика в антивирусах. Дрвеб и Касперский молчат. Приду домой - зарепорчу в Майкрософт ложное срабатывание

plzombie commented 9 months ago

Я два раза просканировал virustotal. Первый раз мне defender написал Trojan:Win32/Sabsik.TE.A!ml, второй раз - Trojan:Win32/Watanac.B!ml. А на форуме вообще третий написали.

zvezdochiot commented 9 months ago

@plzombie say:

Дрвеб и Касперский молчат.

Ну понятно. Мне вообще воспроизвести хоть что то не удалось. Я уже закинул идею протестить "древнюю" инсталяшку ещё от @Tulon . Чисто сличить реакцию. Потому как сведений с гулькин х.

plzombie commented 9 months ago

@zvezdochiot Я не знаю. Возможно, кто-то уже зарепортил установщик в майкрософт. Но теперь не ругается https://www.virustotal.com/gui/file/03f6e1528aafef52d1286c875cf4e0d52fdb9db92ca1ea655aadb3f3c1eda797?nocache=1

zvezdochiot commented 9 months ago

@plzombie , понял тебя. Опубликую на руборде. :+1:

plzombie commented 9 months ago

@zvezdochiot касательно подписи. Эти сертификаты подписи кода стоят от $100 в год до бесконечности. Никакого аналога бесплатного Let's Encrypt для программ нет. И в России не факт что можно купить теперь. Так что я, пожалуй, обойдусь без них

zvezdochiot commented 9 months ago

@plzombie , а на кой оно нам? У нас же всё на добровольной основе, не хочешь - не пользуй. Так что солидарен полностью.

zvezdochiot commented 9 months ago

@plzombie , ежели с двухфакторным говном возникла байда, то мне тут аддон посоветовали. Вроде пока работает. Как дальше? Посмотрим.

plzombie commented 9 months ago

В винде там уже в гит встроена поддержка двухфакторки. В конце концов, можно ключ для репозитория сделать или входить по ssh (не знаю, убрали его ещё, или нет)

zvezdochiot commented 9 months ago

@plzombie say:

по ssh (не знаю, убрали его ещё, или нет)

И будут откровенными тварями, ежели тронут SSH. Я собственно по нему и "гуляю". Альтернативный GPG - такой геморрой, что я даже прикасаться не стал. А уж этот OAuth - это какое то отровенное разводилово, высасывание пальца из воздуха.

zvezdochiot commented 9 months ago

Привет @plzombie .

Сборка на этот раз нормально (в пределах разумного) прошла? Ничего править, включая имя файла, не пришлось?

plzombie commented 9 months ago

@zvezdochiot Всё отлично. И предыдущая установка обновилась, не пришлось руками удалять

zvezdochiot commented 9 months ago

@plzombie , да это я подправил. Забудь.

PS: оповестил народ.

plzombie commented 9 months ago

Можешь меня поздравить. Я собрал 32-битный установщик. Там правда не все фичи libtiff прикручены

--   ZLIB support:                       Requested:ON Availability:TRUE Support:TRUE
--   libdeflate support:                 Requested:OFF Availability:FALSE Support:FALSE
--   Pixar log-format algorithm:         Requested:ON Availability:TRUE Support:TRUE
--   JPEG support:                       Requested:ON Availability:TRUE Support:TRUE
--   Old JPEG support:                   Requested:ON Availability:TRUE Support:TRUE
--   JPEG 8/12 bit dual mode:            Requested:OFF Availability:FALSE Support:FALSE
--   ISO JBIG support:                   Requested:OFF Availability:FALSE Support:FALSE
--   LERC support:                       Requested:OFF Availability:FALSE Support:FALSE
--   LZMA2 support:                      Requested:OFF Availability:FALSE Support:FALSE
--   ZSTD support:                       Requested:OFF Availability:FALSE Support:FALSE
--   WEBP support:                       Requested:OFF Availability:FALSE Support:FALSE

Доделаю сборку libtiff, потом буду делать Windows on Arm (она нужен лично мне, у меня такой ноут)

zvezdochiot commented 9 months ago

@plzombie say:

Можешь меня поздравить. Я собрал 32-битный установщик.

Поздравляю, конечно. Только где он, 32-битный установщик.? В релизе не увидел. И добъёшся сборки под ARM, то тоже в релиз закидывай. И по возможности прописывай рецепт сборки в BUILD.md.

noobie-iv commented 9 months ago

@plzombie say:

не все фичи libtiff прикручены

У меня и в x64 ровно так же. Чтобы было не так - надо качать, собирать, и добавлять в зависимости еще несколько библиотек - от libdeflate до libwebp. И надо еще понимать, используются ли эти фишки в самой программе, а то только лишних dll в установку накидаем.

zvezdochiot commented 9 months ago

@noobie-iv say:

используются ли эти фишки в самой программе

Здесь не в программе, а в конкретно используемом Qt смотреть надо поддержку форматов и библиотек.

plzombie commented 9 months ago

@noobie-iv вот я как раз не успел собрать, уже под ночь лень было, компилируется и ладно @zvezdochiot я залью, но помечу, что это тестовая версия Потому что libtiff надо пересобрать со всеми зависимостями. Тут кто-то жаловался, что у него в сборке tiff с old-jpeg не работает. Мало ли что пользователь загрузит Кстати. Зачем там ещё и libdeflate, если уже есть zlib? И для ARM - там главное поддержка Qt6. Потому что Qt5 никто в здравом уме и не думал собирать под WinArm. Остальное уже дело техники

plzombie commented 9 months ago

@noobie-iv say:

используются ли эти фишки в самой программе

Здесь не в программе, а в конкретно используемом Qt смотреть надо поддержку форматов и библиотек.

Я посмотрел, тут есть классы TiffReader и TiffWriter, которые напрямую libtiff используют, никакого Qt. Надо посмотреть, откуда они вызываются