xintrea / mytetra_dev

MyTetra - smart crossplatform manager for information collecting / MyTetra - кроссплатформенный менеджер накопления информации / Официальная страница:
http://webhamster.ru/site/page/index/articles/projectcode/105
254 stars 55 forks source link

Qt6 и др #159

Open fftmp opened 2 years ago

fftmp commented 2 years ago

Здравствуйте, я задумал перевести 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 commented 2 years ago

Здравстуйте!

Благодарю, работа проделана огромная. Мне нужно будет сделать отдельную ветку, как-нибудь назвать типа qt6, чтобы влить эти изменения, пока не знаю когда займусь.

Еще проблема в том, что вы взяли за основу ветку experimental, а на самом деле от нее было еще не влитое в experimental ответвление basesManagement. А там много чего сделано, и еще надо доделывать, и я не знаю как оно будет совмещаться с вашими правками.

И еще такой вопрос, как у вашего кода с совместимостью с Qt5? Он собирается на Qt5, или ему нужно обязательно Qt6?

ср, 13 апр. 2022 г. в 01:23, fftmp @.***>:

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

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

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

You can view, comment on, or merge this pull request online at:

https://github.com/xintrea/mytetra_dev/pull/159 Commit Summary

File Changes

(171 files https://github.com/xintrea/mytetra_dev/pull/159/files)

Patch Links:

— Reply to this email directly, view it on GitHub https://github.com/xintrea/mytetra_dev/pull/159, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAF36IW74JX2C7SKZEFFMBLVEXZUNANCNFSM5TIWOEIA . You are receiving this because you are subscribed to this thread.Message ID: @.***>

-- Best regards, Sergey M. Stepanov http://webhamster.ru

fftmp commented 2 years ago

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

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

u-235 commented 2 years ago

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

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

xintrea commented 2 years ago

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

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

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

fftmp commented 2 years ago

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

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

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

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

xintrea commented 2 years ago

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

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

fftmp commented 2 years ago

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

xintrea commented 1 year ago

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

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

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

fftmp commented 1 year ago

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

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

xintrea commented 1 year ago

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

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

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

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

xintrea commented 1 year ago

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

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

fftmp commented 1 year ago

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-а.