UMGUM.COM (лучше) 

Qt 4.7.0 compilation ( Сборка Qt 4.7.0 из исходных кодов на Debian Lenny. )

4 ноября 2010  (обновлено 15 августа 2016)

Эта публикация отнесена в архив. Она неактуальна.

OS: Debian Lenny GNU/Linux.

Задача: заиметь в Debian Lenny Qt версии не менее 4.5 для баловства.

Debian Lenny использует Qt 4.3. Следовательно, необходимо раздобыть требуемый набор библиотек. Проще всего взять их с сайта разработчиков. Идём на сайт Nokia, выбираем набор под лицензией LGPL и скачиваем искомое (размер не менее 190 Мегабайт):



В моём случае самый свежий набор был уже версии 4.7. Надеюсь, это тот самый случай, когда "кашу маслом не испортишь":

# cd /usr/src
# wget http://get.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.7.0.tar.gz

Если сильно хочется, то ищем набор для другой версии, например:

# cd /usr/src
# wget http://get.qt.nokia.com/qt/source/qt-all-opensource-src-4.5.2.tar.gz

Распаковываем архив. Переходим в корень директории с исходными кодами:

# tar -xvf qt-everywhere-opensource-src-4.7.0.tar.gz
# cd /usr/src/qt-everywhere-opensource-src-4.7.0

Для того, чтобы Qt-4.7.0 можно было собрать на Debian Lenny мне понадобилось до-установить несколько пакетов библиотек:

# aptitude install libx11-dev libxext-dev libxv-dev libxcursor-dev libxfixes-dev libxft-dev libxi-dev libxrandr-dev libxrender-dev libssl-dev libfontconfig1-dev libfreetype6-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libcups2-dev

Для включения поддержки GTK, следует до-установить ещё ряд пакетов, общий объём которых может превысить 50 Мегабайт:

# aptitude install libgtk-dev libgtk2.0-dev

Смотрим вывод "configure" на предмет обнаружения интересных опций:

# ./configure --help

Запускаем процесс конфигурирования:

# ./configure -release -fast -no-separate-debug-info -opensource -prefix /usr/qt-4.7.0 -no-phonon -no-phonon-backend -no-webkit -no-javascript-jit

Debug .................. no
Qt 3 compatibility ..... yes
QtDBus module .......... yes (run-time)
QtConcurrent code ...... yes
QtGui module ........... yes
QtScript module ........ yes
QtScriptTools module ... yes
QtXmlPatterns module ... yes
Phonon module .......... no
Multimedia module ...... auto
SVG module ............. yes
WebKit module .......... no
Declarative module ..... yes
Support for S60 ........ no
Symbian DEF files ...... no
STL support ............ yes
PCH support ............ yes
MMX/3DNOW/SSE/SSE2...... yes/yes/yes/yes
Graphics System ........ default
IPv6 support ........... yes
IPv6 ifname support .... yes
getaddrinfo support .... yes
getifaddrs support ..... yes
Accessibility .......... yes
NIS support ............ yes
CUPS support ........... yes
Iconv support .......... yes
Glib support ........... yes
GStreamer support ...... no
PulseAudio support ..... no
Large File support ..... yes
GIF support ............ plugin
TIFF support ........... plugin (qt)
JPEG support ........... plugin (system)
PNG support ............ yes (system)
MNG support ............ plugin (qt)
zlib support ........... system
Session management ..... yes
OpenGL support ......... yes (Desktop OpenGL)
OpenVG support ......... no
NAS sound support ...... no
XShape support ......... yes
XVideo support ......... yes
XSync support .......... yes
Xinerama support ....... runtime
Xcursor support ........ runtime
Xfixes support ......... runtime
Xrandr support ......... runtime
Xrender support ........ yes
Xi support ............. runtime
MIT-SHM support ........ yes
FontConfig support ..... yes
XKB Support ............ yes
immodule support ....... yes
GTK theme support ...... yes
SQLite support ......... plugin (qt)
OpenSSL support ........ yes (run-time)
Alsa support ........... yes
ICD support ............ no
....
Qt is now configured for building. Just run 'make'.
Once everything is built, you must run 'make install'.
Qt will be installed into /usr/qt-4.7.0

To reconfigure, run 'make confclean' and 'configure'.

Если не все желаемые опции активны, то до-устанавливаем требуемые "девелоперские" пакеты библиотек. К сожалению, осуществить поддержку "GStreamer и PulseAudio" у меня не получилось, не могу понять, что для этого нужно. Поддержка "Phonon" и "WebKit" мне не нужна и была отключена.

После успешного конфигурирования компилируем продукт без последующей инсталляции:

# make

Занимаем себя чем нибудь часика на четыре-пять, поглядывая на экран на предмет своевременного обнаружения ошибки.

После успешного компилирования упаковываем результат в "deb"-пакет:

# checkinstall -D --install=no --backup=no --pkggroup=Qt --pkgname=qt-4.7.0-custom --pkgversion=0 --pkgrelease=1 --pkgsource=http://get.qt.nokia.com/qt/source/ --maintainer=me@domain.name make install

**************************************************************************
Done. The new package has been saved to

/usr/src/qt-everywhere-opensource-src-4.7.0/qt-4.7.0-custom_0-1_amd64.deb
You can install it in your system anytime using:

      dpkg -i qt-4.7.0-custom_0-1_amd64.deb
**************************************************************************

Не знаю, как и почему так выходит, но здесь утилита checkinstall отрабатывает не совсем корректно. Суть и основное предназначение утилиты checkinstall в перехвате вывода штатного инсталлятора и упаковке его в установочный пакет. Так вот, в данном конкретном случае вывод перехватывается, но не блокируется, так сказать, а достигает своей цели в файловой системе компьютера, не оставаясь в распоряжении одного только checkinstall. Боюсь, что изложение получилось несколько косноязычным, но, как бы то ни было, на выходе мы имеем и установочный "deb"-пакет и уже установленный в системе набор объектов Qt-4.7.0. Получается так, что в инсталляции пакета уже как бы нет необходимости, всё уже и так сделано. Подозреваю, что это потому, что checkinstall не способен отрабатывать каскадом вызываемые "makefile", но доказать пока не могу.

Спасает, в некотором роде, ситуацию то, что файлы "девелоперской" версии Qt-4.7.0 не рассредотачиваются по всей файловой системе, как это принято в соответствии со стандартами (Posix?), а собраны в единой корневой директории "/usr/qt-4.7.0". Их можно запросто удалить перед установкой подготовленного "deb"-пакета или затереть установкой поверх того же "deb"-пакета, хотя бы и для того, чтобы перевести их под контроль системы управления пакетами Debian. Безобразие, конечно, но я ничего с этим поделать не смог; буду признателен подсказавшему, где "затыка".

Инсталлируем пакет:

# dpkg -i ./qt-4.7.0-custom_0-1_amd64.deb

Чистим рабочее место от ошмётков процесса компилирования:

# make clean

Далее, следовало бы модифицировать переменную, содержащую пути поиска в файловой системе приложений и библиотек таким образом, чтобы наша "девелоперская" Qt-4.7.0 была всем видна, но, по правде, не вижу в этом настоятельно необходимости. Соответственно и делать этого не буду, во время компиляции тестового приложения мне не трудно набрать полный путь для qmake, а та уже сама применит в "мэйк-файле" абсолютные пути.

Последнее, что требуется сделать, так это корректировка парочки конфигурационных файлов Qt-4.7.0, "заточенных" ну совсем не под Debian.

Для начала откажемся от повторного объявления двух переменных в конфигурационном файле "/usr/qt-4.7.0/mkspecs/default/qmake.conf" путём исключения из из работы комментированием:

# cat /usr/qt-4.7.0/mkspecs/default/qmake.conf

....
# QMAKE_LIBDIR_X11      = /usr/X11R6/lib64
# QMAKE_LIBDIR_OPENGL   = /usr/X11R6/lib64
....

После, прогуляемся до файла "/usr/qt-4.7.0/mkspecs/common/linux.conf" и подправим в нём значения некоторых переменных применительно к нашей структуре файловой системы Debian Lenny:

# cat /usr/qt-4.7.0/mkspecs/common/linux.conf

....
# QMAKE_INCDIR_X11      = /usr/X11R6/include
# QMAKE_LIBDIR_X11      = /usr/X11R6/lib
QMAKE_INCDIR_X11      = /usr/include/X11
QMAKE_LIBDIR_X11      = /usr/lib/X11
....
# QMAKE_INCDIR_OPENGL   = /usr/X11R6/include
# QMAKE_LIBDIR_OPENGL   = /usr/X11R6/lib
QMAKE_INCDIR_OPENGL   = /usr/include/GL
QMAKE_LIBDIR_OPENGL   = /usr/lib
....

Вот и всё. Теперь при конфигурировании исходных кодов приложений с поддержкой Qt версии выше 4.5, следует указывать полный путь к утилите qmake:

# /usr/qt-4.7.0/bin/qmake -Wall


Заметки и комментарии к публикации:


( возможность дальнейшего комментирования публикации отсутствует )