Как я устанавливал FreeCAD 0.17 в Gentoo

Russian forum
Forum rules
Правила форума и полезная информация

ПОЖАЛУЙСТА! Начиная обсуждение, обязательно....
Post Reply
User avatar
Baritone
Posts: 32
Joined: Fri Jul 29, 2016 4:06 pm
Location: Москва

Как я устанавливал FreeCAD 0.17 в Gentoo

Post by Baritone »

Проблема установки FreeCAD возникла из-за отказа Gentoo от qt4. Какое-то время основной репозиторий gentoo предлагает обходной путь - установка FreeCAD 0.16 без qtwebkit, но результат больше похож на издевательство - половина всего не работает. Сейчас и этот урезанный вариант был удалён.

Разумеется, первым делом я поискал, кто как решает эту проблему. Нашёл здесь, на форуме:
How are linux folks compiling freecad 0.17 with qt5?
То есть скомпилировать можно и под qt5 (qtwebkit под qt5 в gentoo имеется), поэтому решил идти этим путём.

После игр с cmake выяснилось, что надо ставить опцию использования qt5, но при этом требуется shiboken2, в то время как в gentoo PySide и, соответственно, shiboken, только версии 1.2. Кроме того, возникает проблема с версией coin3d - только четвёртая совместима с qt5, но официального релиза ещё нет.

Первая проба - установить shiboken2 с помощью pip ( emerge dev-python/pip ). Подсказку взял в официальном руководстве здесь. Это можно сделать только для отдельного пользователя (pip предупреждает, что в противном случае может грохнуть python, поэтому надо использовать опцию --user), что меня на первое время устраивает:

Code: Select all

pip install --user --index-url=http://download.qt.io/snapshots/ci/pyside/5.11/latest/ pyside2 --trusted-host download.qt.io
Тогда shiboken устанавливается в каталог ${HOME}/.local. Перед запуском pip мне, разумеется, потребовалось установить dev-qt/qtxmlpatterns, версии больше 5, для qt5.

Установка pyside и shiboken в систему через менеджер пакетов portage так же возможна, в наиболее полном объёме созданием всех необходимых для FreeCAD ebuildов озаботился пользователь Waebbl. Его оверлей можно присоединить через layman: layman -a waebbl

К сожалению, но ни один из них у меня в текущем виде не заработал, всех их пришлось допиливать. Во-первых, его его ebuildы ориентированы на скачивание прямо определённой ветки репозитория, для меня же была принципиальна установка именно из архива, чтобы он хранился на диске. Кроме того, у разработчиков уже имеются официальные релизы Pyside для Qt5.11, последний - 5.11.2: https://download.qt.io/official_release ... .11.2-src/ Разумеется, они ориентированы на Qt соответствующей версии, у меня они установились лишь после установки qt-5.11. Дополнительной проблемой стало, что скомпилированный shiboken2 при генерации опций компиляции Pisyde указал не все необходимые пути к заголовочным файлам, пришлось включить в ebuild для pyside корректировку исходников.

Заметно больше проблем было с компиляцией Coin3d 4-й версии. В итоге выяснилось, что ebuildы, ориентированные на сборку через cmake, как находящийся в официальном репозитории, так и созданный не работают, сгенерированные ими Makefile "забывают" скомпилировать и положить в библиотеку значительную часть функций, необходимых для компиляции FreeCAD. Обойти проблему удалось путём переписывания ebuildа на использование "старого доброго" configure. Но даже несмотря на это, FreeCAD смог скомпилироваться лишь со снапшотом от 21.09.2018, для которого Waebbl создал один из ebuildов.

Огромная благодарность Waebbl! Насчёт моих версий ebuild-ов пишите в личку.
User avatar
Baritone
Posts: 32
Joined: Fri Jul 29, 2016 4:06 pm
Location: Москва

Re: Как я устанавливал FreeCAD 0.17 в Gentoo

Post by Baritone »

После этого появилась возможность начать настраивать компиляцию FreeCAD. Там у cmake много важных опций, в том числе, что особо важно, различные пути, без которых cmake не может найти даже OpenCASCADE. Чтобы видеть все проблемные опции, я использовал ccmake (эта полноэкранная версия cmake устанавливается при USE=ncurses)

Исходники FreeCAD 0.17 (стандартный), я распаковал в системный каталог /usr/src.

Code: Select all

mkdir ${HOME}/src/freecad
cd ${HOME}/src/freecad
ccmake /usr/src/FreeCAD-0.17
Далее делаю пробную конфигурацию (нажимаю "c"), и смотрю, чего не хватает. В первую очередь, конечно, надо будет установить опцию BUILD_QT5, потом множество других путей установки и так далее. В итоге у меня сформировался следующий набор опций для ccmake:

Code: Select all

cmake  -D_RESPECT_CMAKE_BUILD_DIR=1 -DBUILD_QT5=ON -DCXXFLAGS="-D_OCC64" -DFREECAD_USE_EXTERNAL_KDL="OFF" \
	-DOCC_INCLUDE_DIR="${CASROOT}"/include/opencascade/ -DOCC_LIBRARY_DIR="${CASROOT}"/lib/ \
    -DFREECAD_USE_OCC_VARIANT="Official Version" \
    -DMEDFILE_INCLUDE_DIRS=/usr/include/libmed/ -DOPENMPI_INCLUDE_DIRS=/usr/include \
    -DPYTHON_EXECUTABLE=/usr/bin/python3.6 -DPYTHON_INCLUDE_DIR=/usr/include/python3.6m -DPYTHON_LIBRARY=/usr/lib/libpython3.6m.so \
	-DBoost_PYTHON3_LIBRARY_RELEASE=/usr/lib/libboost_python-3.6-mt.so \
    -DPYTHON_BASENAME=.cpython-35m-x86_64-linux-gnu -DPYTHON_SUFFIX=.cpython-35m-x86_64-linux-gnu \
    /usr/src/FreeCAD-0.17
Дополнительной проблемой стали опять же мелкие изменения в последних qt, если использовать qt-5.11 (а у нас будет именно она, если мы хотим ставить pyside из релизных тарбалов), требуется патч (по счастью, уже включённый в оверлей уважаемым Waebbl), под банальным названием qt5.11.patch. В итоге мне удалось переделать ebuild так, что FreeCAD 0.17 смог успешно скомпилироваться.

Насчёт моих ebuild-ов пишите смело! Я бы их выложил, но, не будучи уверен, что они заработают у кого-нибудь ещё, нуждаюсь в обратной связи, чтобы сделать необходимые исправления.
brothermechanic
Posts: 13
Joined: Tue Mar 20, 2018 11:20 am

Re: Как я устанавливал FreeCAD 0.17 в Gentoo

Post by brothermechanic »

используйте waebbl оверлей!
User avatar
Baritone
Posts: 32
Joined: Fri Jul 29, 2016 4:06 pm
Location: Москва

Re: Как я устанавливал FreeCAD 0.17 в Gentoo

Post by Baritone »

brothermechanic wrote: Mon Nov 12, 2018 5:16 pm используйте waebbl оверлей!
Да, я тоже советую всем его оверлей, но, увы, у меня его ebuildы на момент написания сообщения не заработали, их пришлось допиливать. Например, Coin3d версии 4 у меня при компиляции с помощью cmake создал библиотеку, куда не были включены вызовы многих функций, необходимых для компиляции FreeCAD, пришлось переписывать ebuild для использования ./configure. pysyde не скомпилировался из-за ошибки в shiboken, которую удалось скомпенсировать следующим костылём внутри pyside.ebuild, добавленного внутрь функции src_prepare():

Code: Select all

        sed -i -e '/# Contains include directories to pass to shiboken/a \    set(gcc_include_dirs /usr/lib/gcc/x86_64-pc-linux-gnu/7.3.0/include/${PATH_SEP}/usr/lib/gcc/x86_64-pc-linux-gnu/7.3.0/include-fixed/)' \
                ./cmake/Macros/PySideModules.cmake || die
        sed -i -e 's/set(shiboken_include_dirs /set(shiboken_include_dirs ${gcc_include_dirs}${PATH_SEP}/' ./cmake/Macros/PySideModules.cmake || die
Проблема этого исправления в том, что он ориентирован на определённую версию компилятора (7.3.0), поэтому я не рискую предложить исправленный ebuild в общий доступ.
P.S.У waebbl в последних обновлениях оверлея появились ebuildы для Pysyde2, использующие архив релиза 5.11.1. Он у меня скомпилировался нормально. Теперь остался вопрос с компиляцией Coin3d, текущая версия которого при использовании ebuildов, ориентированных на cmake, собирается с ошибками.
brothermechanic
Posts: 13
Joined: Tue Mar 20, 2018 11:20 am

Re: Как я устанавливал FreeCAD 0.17 в Gentoo

Post by brothermechanic »

ну так почему бы не написать ему в багтрекер

ps : у меня зимой все компилилось, а сейчас уже нет)
я написал в багтрекер
User avatar
Baritone
Posts: 32
Joined: Fri Jul 29, 2016 4:06 pm
Location: Москва

Re: Как я устанавливал FreeCAD 0.17 в Gentoo

Post by Baritone »

brothermechanic wrote: Mon Apr 29, 2019 1:33 pm у меня зимой все компилилось, а сейчас уже нет)
я написал в багтрекер
Может, разница в том, что я стараюсь компилировать не тестовые версии 9999, а релизные?
Весной с его оверлеем проблема возникла из-за того, например, что в Gentoo исчез qt-5.11.1 и 5.11.2, а для 5.11.3 не было выпуска pyside-2
Он есть для qt-5.12, надо теперь пилить переход pyside на эту версию.
brothermechanic wrote: Mon Apr 29, 2019 1:33 pm ну так почему бы не написать ему в багтрекер
Сюда?
Я не решался, потому что очень криво пишу по-английски, но теперь попробую.
User avatar
Baritone
Posts: 32
Joined: Fri Jul 29, 2016 4:06 pm
Location: Москва

Re: Как я устанавливал FreeCAD 0.17 в Gentoo

Post by Baritone »

Итак, вот как у меня проходила установка freecad-0.18 из оверлея waebbl.
Единственное препятствие, которое мне встретилось - что waebbl ориентируется на shiboken и pysyde для qt версии 5.11.1, которая уже давно исключена из древа портажей, а для qt-5.11.3 pysyde не был выпущен. Но недавно ветка 5.12 в gentoo застабилизировалась, поэтому я стал ставить shiboken и pysyde для qt-5.12.3.
Чтобы установить их, можно взять чуть изменённые ebuildы для версии 5.11 от waebbl. Изменения минимальные:
1) Разумеется, переименовываем в shiboken-5.12.3.ebuild, pysyde-5.12.3.ebuild и так далее
2) Убираем патчи - в этой версии файлы уже исправлены (комментируем присвоение переменной PATCHES).
3) Отменяем компиляцию для python2.7 (вычёркиваем python2_7 из переменной PYTHON_COMPAT)

У меня опять не скомпилировался pysyde, из-за заголовочного файла, и я, не долго думая, использовал прежний костыль внутри pyside.ebuild, добавленный внутрь функции src_prepare():

Code: Select all

sed -i -e '/# Contains include directories to pass to shiboken/a \    set(gcc_include_dirs /usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/include/${PATH_SEP}/usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/include-fixed/)' \
                ./cmake/Macros/PySideModules.cmake || die
        sed -i -e 's/set(shiboken_include_dirs /set(shiboken_include_dirs ${gcc_include_dirs}${PATH_SEP}/' ./cmake/Macros/PySideModules.cmake || die
Это очень неправильный костыль, потому что предполагает, что компиляция будет вестись gcc-8.3.0. Впрочем, gcc этой версии сейчас стабильный и основной, поэтому если ставить на один раз, то можно помучиться с номером версии gcc.
После установки shiboken и pysyde, freecad-0.18 у меня установился без камлания.
Post Reply