Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Qt6 и др #159

Open
wants to merge 74 commits into
base: basesManagement
Choose a base branch
from
Open

Qt6 и др #159

wants to merge 74 commits into from

Conversation

fftmp
Copy link

@fftmp fftmp commented Apr 12, 2022

Здравствуйте, я задумал перевести mytetra на Qt6, вроде сделал. Попутно наменял ещё много чего.
Предлагаю принять эти изменения или их часть в основную ветку. Старался, чтобы коммиты были атомарными, насколько это возможно.
Я не могу проверить работу на Windows и MacOs, но проверил, что под windows хотя бы компилируется.

Краткое резюме изменений:

  1. Обновление версии mimetex. При сборке mimetex было порядочно warning-ов - что-то пофиксил, какие-то предупреждения отменил.
    Сборка mimetex сделана опциональной. В популярных Linux-дистрибутивах есть готовый пакет с mimetex - имеет смысл использовать его.
    Если следовать этому пути, то смысла в этих фиксах нету и их можно пропустить - пусть maintainer-ы mimetex-а разбираются.
  2. Прогнал код через статический анализатор clang-а (См. Статический анализ кода #128). Это рекомендуют делать перед миграцией. Пофиксил все предупреждения.
  3. Собственно миграция на qt6.
  4. Перевод сборки на cmake (как минимум потому, что Qt рекомендуют использовать её для новых проектов).
  5. Генерация deb/rpm пакетов с помощью cpack.
  6. Базовая компиляция с помощью github actions (компиляция по каждому коммиту на стороне github-а. Можно билдить и под Linux, и под Windows).
  7. Прочие разные фиксы

@xintrea
Copy link
Owner

xintrea commented Apr 14, 2022 via email

@fftmp
Copy link
Author

fftmp commented Apr 15, 2022

Пересадил на сетку basesManagement - см. ветку qt6_basesManagement в моём форке. Могу пересоздать pull request, если надо. Конфликтов почти не было, изменения, к-ые потребовалось доделать после пересадки, тоже минимальны - сделал их отдельным коммитом. Так что с текущим состоянием ветки проблем особых нету, ну а что будет после доделок - Вам виднее.

Про Qt5 - выпилил полностью, оставил только Qt6. Мотивация такая: на линуксах народ использует более-менее свежие версии (тем более это десктопное приложение, а не серверное), так что там Qt6 будет. А на windows, насколько я понимаю, Qt встраивается в дистрибутив, так что там тоже будет Qt6. В результате какой смысл ifdef-аться над кодом?

@u-235
Copy link

u-235 commented Apr 23, 2022

Про Qt5 - выпилил полностью, оставил только Qt6. Мотивация такая: на линуксах народ использует более-менее свежие версии (тем более это десктопное приложение, а не серверное), так что там Qt6 будет. А на windows, насколько я понимаю, Qt встраивается в дистрибутив, так что там тоже будет Qt6. В результате какой смысл ifdef-аться над кодом?

Извините, но на мой взгляд, это слабая аргументация. Например, в Ubuntu из пяти дистрибьтивов Qt6 есть только в jammy. Понятно, что Qt5 уходит в прошлое, но есть ли острая необходимость убирать поддержку Qt5?

@xintrea
Copy link
Owner

xintrea commented Apr 25, 2022

Извините, но на мой взгляд, это слабая аргументация. Например, в Ubuntu из пяти дистрибьтивов Qt6 есть только в jammy. Понятно, что Qt5 уходит в прошлое, но есть ли острая необходимость убирать поддержку Qt5?

Проблема всех этих изменений в том, что они были сделаны не согласовывая действия с основным разработчиком, то есть мной. Вот я честно говоря пока не знаю что со всеми этими изменениями делать.

И я не пойму, в дистрибутивах, в которых есть Qt6, библиотеки Qt5 полностью выпилены? В Debian до сих пор акуратно тянут библиотеки от Qt4 к примеру.

@fftmp
Copy link
Author

fftmp commented Apr 25, 2022

Здравствуйте!
Qt5 сейчас есть конечно везде или почти везде. Но обычно старые версии тянут не потому, что они лучше новых, и не потому, что maintainer-ам нравится поддерживать несколько версий одного и того же а именно потому, что софт ещё не переписан на новые.

Название ветки experimental располагает к таким изменениям. В master-е последний коммит в 2018г - может когда experimental вольётся в master Qt6 уже будет везде по умолчанию. Тут понятно проблема скорее в том, что experimental стал в какой-то момент master-ом де-факто.

Про "... они были сделаны не согласовывая действия с основным разработчиком ...": изначально я не знал объём правок и планировал их оценить и как раз сказать, что-то типа "миграция на Qt6 невозможна" или "кажется, весь код собирается с Qt6, кроме модуля X".
Плюс я старался чтобы код собирался без warning-ов - в отсутствии автотестов придаёт чуть уверенности - это добавило коммитов.
В любом случае повторюсь: я ж не настаиваю на принятии всей ветки. Возьмите, против чего нет возражений, про остальное скажите, что Вы вообще не примете, а что хочется доделать/переделать.

Про версии ubuntu: я не знаю, как люди пользуются ubuntu на десктопе. Мне кажется, что на серверах будут разные версии, но на личных компах ставят новые версии и обновляют их довольно быстро, тем более jammy - LTS. Но м.б. это искажение от того, что я сам так делал.

@xintrea
Copy link
Owner

xintrea commented Apr 26, 2022

Ветка experimental - это именно ветка для разработки. Просто разработка у меня идет очень долго, годами. Сейчас в experimental надо доделать изменения до вменяемого релиза, а потом уже думать про переход на Qt6. И то, у меня большие сомнения в том, что надо именно сейчас переходить на Qt6. MyTetra уже пережила переезд с Qt4 на Qt5 (а закрытые первые версии переезжали с Qt3 на Qt4, но там я мог себе позволить перелопачивать потому что я был единственным пользователем), и я всегда старался чтобы компиляция под обе версии сохранялась до тех пор, пока устаревшая версия не теряла свою актуальность.

Вы с одной стороны сделали большую работу, и не хотелось бы чтобы она была потеряна, но то что вы выпилили Qt5 и оставили один только Qt6 - я даже не знаю как к этому относиться и как использовать ваши изменения.

@fftmp fftmp changed the base branch from experimental to basesManagement May 25, 2022 13:58
@fftmp
Copy link
Author

fftmp commented May 25, 2022

Здравствуйте ещё раз.

  • Я уверен, что в этом PR было ещё минимум одно сообщение, где кто-то предлагал патч для обратного перехода на Qt5 и на основе этого патча говорил, что это потребует сравнительно небольших изменений. Сейчас и сообщение и патч пропали.

  • Сделал поддержку сборки с Qt5 - в общем-то действительно это потребовало сравнительно небольшого количества правок.

  • Доделал сборку windows-версий (Qt5/Qt6). Проверил, что они работают, если запускать их под wine-ом.
    Там есть нюанс - в сборку добавляется много сомнительной необходимости библиотек. Механизм добавления библиотек такой:

    1. cmake-код
       set(CMAKE_INSTALL_UCRT_LIBRARIES TRUE)
       include(InstallRequiredSystemLibraries)
    

    Добавляет в папку сборки библиотеки MSVC, от к-ых зависит результирующий бинарник.

    1. Утилита windeployqt добавляет в папку установки нужные Qt библиотеки. Сейчас windeployqt запускается из github action-а.

    Так вот cmake-модуль тащит, кмк, кучу лишнего. Интересно, что Qt5-сборка работает и без этой лишней кучи, а Qt6-сборка ругается на отсутствующий MSVCP140_2.dll (при запуске под wine-ом).
    Будет классно, если с этим разберётся кто-нибудь, у кого есть хотя бы windows + MSVC.

  • Сделал, чтобы github action-ы выдавали deb пакеты или zip-архивы (для windows) в качестве артефактов сборки. Мне это позволило убедиться, что windows-сборки не только компилируются, но ещё и запускаются 😊.

  • Изменил base branch в этом PR с experimental на basesManagement. К сожалению github не позволяет менять название вмёрдживаемой ветки, так что провернул неочевидный финт ушами: ветка experimental моего форка теперь растёт не из experimental upstream-а, а из basesManagement. Это неочевидно и надо быть внимательным, но зато позволило обойтись без пересоздания PR.

@xintrea
Copy link
Owner

xintrea commented Feb 1, 2023

Ух, как много работы сделано, но я ничего не понимаю.

В какой момент было решено, что проект на Qt должен собираться на CMake? Зачем поддерживать две системы сборки, ради чего?

Я вижу в пулл-реквестах какие-то куски Ansible. Для чего они понадобились?

@fftmp
Copy link
Author

fftmp commented Feb 11, 2023

Про cmake отписывался в первом сообщении "Перевод сборки на cmake (как минимум потому, что Qt рекомендуют использовать её для новых проектов)."

Про куски Ansible - это какой коммит? М.б. это github actions (единственное, что хоть как-то похоже)? Если так, то для того, чтобы как минимум видеть, что текущее состояние хотя бы компилируется под все интересующие ОC/версии Qt. Показывает на Readme-страничке красивые статусы о сборке под Win/Lin x Qt5/Qt6. В общем уже сейчас защитит от некоторых ошибок, а если ещё и автотесты туда добавить и публикацию артефактов сборки, то выгода от github actions возрастёт.

@xintrea
Copy link
Owner

xintrea commented Apr 4, 2023

Про cmake отписывался в первом сообщении "Перевод сборки на cmake (как минимум потому, что Qt рекомендуют использовать её для новых проектов)."

Но у нас же не новый проект, а допиливание старого.

Мы продолжим поддерживать qmake в течение всего срока службы Qt 6, 
поэтому нет необходимости вносить какие-либо изменения 
в вашу систему сборки, если вы ее используете

Вот когда qmake будет deprecated, тогда и нужно будет переводить.

@xintrea
Copy link
Owner

xintrea commented Apr 4, 2023

Про куски Ansible - это какой коммит? М.б. это github actions (единственное, что хоть как-то похоже)? Если так, то для того, чтобы как минимум видеть, что текущее состояние хотя бы компилируется под все интересующие ОC/версии Qt. Показывает на Readme-страничке красивые статусы о сборке под Win/Lin x Qt5/Qt6. В общем уже сейчас защитит от некоторых ошибок, а если ещё и автотесты туда добавить и публикацию артефактов сборки, то выгода от github actions возрастёт.

Но я зашел на вашу страничку, увидел картинки ubuntu_release:passing, нажимаю на них - и ничего не происходит. Начинаю искать этот Ubuntu release, и не нахожу. В разделе Packages пусто. Если сборка есть, то почему нету сборок?

@fftmp
Copy link
Author

fftmp commented Apr 8, 2023

Action-ы запускаются после каждого пуша, их логи и артефакты сборки хранятся ограниченное время, оно настраивается в интерфейсе github-а. У меня настроено на 30 дней (максимум 90), а последний пуш был давно, поэтому логи и результаты сборок удалились.
В результате action-ов появляется артефакт - exe или deb файл, его можно скачать те же 30-90 дней. Этот артефакт не попадает автоматически в Packages (и это разумно - типично успешность сборки хочется видеть после каждого пуша, а релизный пакет - гораздо реже (кода ставишь тег например)), поэтому в разделе Packages пусто.
Сейчас я запушил в ветку небольшой коммит - можете посмотреть как логи сборки, так и результирующие файлы. Вот для ubuntu + Qt6 например.

Про qmake vs cmake - ваше право конечно, не берите соответствующие коммиты, если не хотите. Как вариант - можно иметь 2 системы сборки, объявив одну "официальной", а другую - "альтернативной".
Дополнительно в защиту cmake-сборки:

  1. это сейчас наиболее популярная система для C/C++ проектов, с вытекающими плюсами - её знают больше разработчиков, проще искать решение проблем, быстрее обрастает новыми возможностями.
  2. cmake выбирают по объективным причинам (читабельность, универсальность, фичи), а не из-за какого-нибудь насаждения автора-корпорации или веяния моды.
  3. Для mytetra же поддержка cmake-а достаётся бесплатно - бери и мёрджи. Если будут проблемы, я постараюсь помочь.

Если по остальным коммитам всё ок, я могу создать PR, без cmake-а и с возвратом qmake-а.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants