Кросс-компиляция Gwyddion для MS Windows под Linux весьма похожа на обычную сборку для Unix с некоторыми дополнительными настройками и дополнительными шагами. Хотя процесс достаточно тривиален, начальные настройки могут показаться в какой-то степени непростыми. Если вы к тому же не знакомы с обычной сборкой под Unix, имеет смысл начать с неё и попробовать кросс-компиляцию после того, как основная процедура станет понятной.
Эти инструкции описывают компиляцию в дистрибутиве Fedora используя дистрибутивную поддержку кросс-компиляции MinGW, поскольку разработчики Gwyddion используют именно этот вариант. В общем, эти инструкции работают в текущей версии Fedora. Компиляция в других версиях и других основанных на RedHat дистрибутивах (CentOS, Scientific Linux, …) будет происходить подобным образом и достаточно проста, но возможно потребуются некоторые небольшие изменения. Сборка, например, в openSUSE потребует модификации. Мы будем рады получить отчёты об успешной (или неудачной) сборке на других системах и дополнить эти инструкции.
Полная кросс-компиляция включает в себя следующие шаги:
Доступен скрипт, который автоматически проведёт все шаги, как описано ниже.
Перед первой компиляцией может потребоваться настройка среды кросс-компиляции. Это надо делать только один раз.
Запустите с правами суперпользователя root:
dnf install mingw{32,64}-{gcc-c++,gtk2,libxml2,minizip,fftw,gtkglext,libwebp,OpenEXR}
чтобы установить необходимые пакеты mingw32 и mingw64. Некоторые другие пакеты будут установлены как зависимости пакетов, указанных здесь явно. Следует отметить, что технически некоторые из пакетов являются опциональными зависимостями и можно собрать пакет установки для MS Windows без них (после небольшой настройки). Тем не менее, стандартные пакеты установки включают эти зависимости, и скрипты кросс-компиляции подразумевают их наличие по умолчанию.
Версии для MinGW некоторых пакетов, используемых Gwyddion, ещё (или уже) недоступны в Fedora, либо могут быть некоторые исправления, отсутствующие в пакетах Fedora, которые мы хотели бы включить. В настоящее время это HDF5 и gtksourceview2, который используется только в pygwy.
Можно собрать эти опциональные пакеты используя патчи и spec-файлы с http://sourceforge.net/projects/gwyddion/files/mingw32-cross-compile/, однако, гораздо проще установить их командой dnf. Для этого нужно загрузить и установить пакет конфигурации репозитория gwyddion.net. Установка этого пакета добавит в систему две конфигурации репозитория, для программы и для дополнительных пакетов MinGW. По умолчанию будет включен только репозиторий gwyddion
. Для добавления пакетов MinGW нужно включить второй репозиторий вручную редактированием файла /etc/yum.repos.d/gwyddion-mingw.repo
. Чтобы установить их необходимо запустить следующую команду:
dnf install mingw32-{hdf5,gtksourceview2}
Следует отметить, что данный репозиторий переопределяет ряд пакетов MinGW из Fedora чтобы они были нужных версий.
Wine является слоем совместимости/(не) эмулятором MS Windows для Unix. Он используется для запуска NSIS который создает программу установки Gwyddion для Windows. Wine также можно использовать для запуска и тестирования собранного кросс-компиляцией Gwyddion, как описано ниже.
Запустите
dnf install wine
чтобы установить Wine.
Nullsoft scriptable install system (NSIS) используется для создания программы установки Gwyddion. Поскольку это программа для MS Windows, она устанавливается под Wine. Собранная кросс-компиляцией версия NSIS может присутствовать в некоторых дистрибутивах, но, как показала практика, оригинальная версия работает более надёжно.
Загрузите NSIS с его веб-страницы и запустите informalexample>
wine nsis-3.06-setup.exe
Чтобы собрать pygwy нужно установить Python в Wine. Это делается так же, как при обычной установке pygwy, за исключением того, что все пакеты, описанные в разделе включение pygwy необходимо устанавливать с помощью команды msiexec: :
wine msiexec /i python-2.7.16.msi
wine msiexec /i pygobject-2.28.3.win32-py2.7.msi
wine msiexec /i pycairo-1.8.10.win32-py2.7.msi
wine msiexec /i pygtk-2.24.0.win32-py2.7.msi
или подобным образом.
Скрипты поддержки и данные доступны в модуле mingw32-cross-compile
репозитория subversion программы Gwyddion. нужно запустить
svn checkout http://svn.code.sf.net/p/gwyddion/code/trunk/mingw32-cross-compile
чтобы получить снимок репозитория.
Наиболее важным из полученных вами является скрипт cross-build-32 (или cross-build-64), который автоматизирует все шаги кросс-компиляции. Перед тем, как запускать его в первый раз, просмотрите файл setup32
(или setup64
для 64-битных сборок), который определяет где находятся различные нужные вещи. По умолчанию его содержимое выглядит следующим образом:
source_dir=$HOME/Projects/Gwyddion/gwyddion-mingw mingw_prefix=/usr/i686-pc-mingw32/sys-root/mingw target_prefix=$HOME/opt/gwyddion-mingw32 python_dir=$HOME/.wine/drive_c/Python27 nsis_compiler=C:\\Program\ Files\ \(x86\)\\NSIS\\makensis.exe
Переменная source_dir
задаёт место, куда был распакован архив или сохранён снимок системы контроля версий исходного кода Gwyddion и эту переменную скорей всего нужно будет изменить. Переменная target_prefix
указывает каталог установки (временный каталог) для собранного кросс-компиляцией Gwyddion. Значение по умолчанию должно работать, и вам не нужно его менять, если вы этого не хотите. Оставшиеся переменные, mingw32_prefix
, nsis_compiler
и python_dir
, задают местоположение файлов MinGW, компилятора NSIS и Win32 Python, соответственно, и их обычно не надо менять со значений по умолчанию, хотя NSIS может быть установлен либо в Program Files (x86)
, либо в Program Files
по умолчанию в зависимости от настроек Wine. Следует отметить, что setup
читается оболочкой, и, следовательно, вокруг знака =
не должно быть пробелов.
Настройка была утомительной, но это того стоило, поскольку затем компиляция станет крайне простой. Нужно запустить
./cross-build-32
в каталоге mingw32-cross-compile
чтобы собрать пакет установки под Win32. На этом всё. Если процесс создания прошел успешно, выполняемый пакет установки Gwyddion под Windows вместе с предустановленным GTK+ и всем остальным будет создан в каталоге, заданном $target_prefix
. Аналогично, пакет установки под Win64 собирается с помощью
./cross-build-64
Во время сборки можно сделать кофе, или изучить скрипт cross-build
(он в действительности достаточно короткий и понятный).
Следует отметить, что скрипт кросс-компиляции запускает autogen.sh
, но не чистит каталог с исходным кодом. Вам может понадобиться сделать это вручную если вы постоянно собираете Gwyddion. Особенно это важно, если вы собираете версии под обе архитектуры в одном и том же каталоге, убедитесь, что
make distclean
был запущен между сборками чтобы привести каталог с исходным кодов в правильное состояние.
Собранный Gwyddion может быть запущен под Wine. Предполагая значение по умолчанию target_prefix
:
wine ~/opt/gwyddion-mingw32/bin/gwyddion.exe
Чтобы запустить gwyddion.exe
динамический линкер должен иметь возможность найти все нужные DLL. Это обеспечивается несколько грубым путём в скрипте copysysfiles, который копирует все необходимые файлы MinGW из системы в $target_prefix
. Поскольку команда copysysfiles запускается из cross-build обычно не нужно запускать её вручную.
Второй шаг, который может понадобиться, это установка ключа реестра
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\gwyddion.exe
таким образом, чтобы он указывал на gwyddion.exe
и значения Path
, чтобы оно указывало на подкаталог bin
.
Кросс-компиляция отдельных модулей требует только заголовочные файлы Gwyddion и библиотеки для разработки под Win32. Хотя их гарантированно получить кросс-компиляцией всей программы, делать это необязательно. Компилируя только библиотеки можно обойтись без установки разнообразных редких библиотек, от которых зависит Gwyddion. Это можно сделать используя патч gwyddion-2.22-build-only-libs.patch
, который находится вместе со скриптами сборки.
Но ещё проще, библиотеки MinGW Gwyddion доступны как RPM-пакет mingw32-gwyddion-libs
в репозитории gwyddion.net.
После того, как всё установлено можно попробовать собрать пример отдельного модуля threshold-example
который доступен в репозитории subversion (или в виде пакета исходного кода). См. README
там для получения дополнительной информации.