Compilation croisée pour MS Windows

La compilation croisée de Gwyddion pour MS Windows sous Linux est assez similaire à la compilation habituelle sous Linux, avec quelques réglages et étapes supplémentaires. Bien que le processus soit assez simple, la mise en place intiale peut paraître un peu compliquée. Si de plus vous n'êtes pas habitué à la compilation sous Linux il vous faudra peut-être vous familiariser avec la procédure de base avant de vous lancer dans la compilation croisée.

Les instructions qui suivent décrivent la compilation sous Fedora en utilisant le support de compilation croisée MinGW utilisé par les développeurs de Gwyddion. En général, les instructions fonctionnent pour la version en cours de Fedora. La compilation pour d'autres versions ou pour d'autre distributions basées sur RedHat-based (CentOS, Scientific Linux, …) devrait être similaire et relativement triviale, avec peut-être quelques réglages manuels. La compilation sous openSUSE par exemple nécessitera certaines modifications. Les rapports de succès (ou échec) de compilation croisée de Gwyddion sous d'autres distributions ou environnements, ainsi que les améliorations possibles, sont les bienvenus.

La compilation croisée complète suit les étapes suivantes :

Un script est disponible pour automatiser toutes ces étapes, telles que décrites plus bas.

Configuration

Il vous faut configurer l'environnement de compilation croisée avant de réaliser la première compilation. Cette opération n'est à faire qu'une seule fois.

Paquets MinGW de base

Lancez en tant que root :


            dnf install mingw{32,64}-{gcc-c++,gtk2,libxml2,minizip,fftw,gtkglext,libwebp,OpenEXR}
          

pour installer les paquets mingw32 et mingw64 nécessaires. Plusieurs autres paquets seront installés en tant que dépendances de ceux donnés ici. Notez que, techniquement, certains des paquets sont des dépendances facultatives et que vous pouvez compiler un installeur MS Windows sans eux (avec quelques ajustements). En tout état de cause, les installeurs standards incluent ces paquets et les scripts de compilation croisée s'attendent à ce qu'ils soient présents par défaut.

Dépôt Gwyddion.net

Les versions MinGW de quelques paquets utilisés par Gwyddion ne sont pas encore (ou plus) disponibles sous Fedora, ou bien il y a certaines corrections que nous aimerions inclure mais qui ne se trouvent pas dans les paquets Fedora. Actuellement, le seul paquet manquant est gtksourceview2 qui n'est utilisé que par pygwy.

Vous pouvez compiler ces paquets aditionnels à l'aide des patches et fichiers de spécifications disponibles sur http://sourceforge.net/projects/gwyddion/files/mingw32-cross-compile/, il est toutefois certainement plus aisé de les installer avec dnf. Pour cela il suffit de télécharger et installer répertoire du paquet de configuration sur gwyddion.net. L'installation donne accès à tous les paquets supplémentaires pour MinGW. Après installation, vous pouvez lancer

dnf install mingw32-gtksourceview2

Incidemment, le répertoire contient aussi un paquet Gwyddion x86_64 natif que vous pouvez installer pour utiliser Gwyddion sous Fedora, ainsi qu'un paquet fournissant des librairies Gwyddion compilées que vous pourez utiliser pour faire la compilation croisée des modules.

Wine

Wine est une couche de compatibilité de MS Windows pour for Unix. Il est utilisé pour lancer NSIS et créer l'installeur de Gwyddion pour Windows. Wine peut aussi être utilisé pour lancer et tester la compilation croisée de Gwyddion, tel que présenté plus bas.

Lancez

dnf install wine

pour installer Wine.

NSIS

Nullsoft scriptable install system (NSIS) est utilisé utilisé pour créer l'installeur de Gwyddion. Il s'agit d'un programme MS Windows, il est donc installé sous Wine. Une version obtenue par compilation croisée de NSIS peut être disponible dans la distribution, mais il s'avère que la version originale est plus fiable.

Téléchargez NSIS à partir de son site internet et lancez

wine nsis-2.46-setup.exe

en remplaçant 2.46 par le numéro de version actuel. La version 2.46 de NSIS est la plus ancienne qui ait été testée.

Python

Il vous faudra installer Python dans Wine afin de compiler pygwy. Les étapes sont identiques à celles à appliquer pour installer pygwy, sauf que tous les paquets listés au paragraphe Activation de pygwy doivent être installés à l'aide de msiexec :

wine msiexec /i python-2.7.13.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

en modifiant si besoin les numéros de version.

Scripts

Des scripts et données sont disponibles dans le module mingw32-cross-compile du dépôt subversion de Gwyddion. Lancez

svn checkout http://svn.code.sf.net/p/gwyddion/code/trunk/mingw32-cross-compile

pour récupérer le contenu du répertoire.

L'outil le plus important que vous obtiendrez est le script cross-build-32 (ou cross-build-64) qui automatise les étapes de compilation croisée. Avant de l'utiliser pour la première fois, consultez le fichier setup32 qui définit la localisation des différents éléments (ou setup64 pour la cible 64 bits). Le contenu par défaut ressemble à ceci:

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

La variable source_dir spécifie la localisation du code source de Gwyddion (décompressée ou directement récupérée du dépôt subversion), elle devra être probablement modifiée. La variable target_prefix spécifie le répertoire d'installation (zone temporaire) pour la compilation croisée de Gwyddion. La valeur par défaut est normalement adaptée et n'aura pas à être modifiée, à moins que vous ne le souhaitiez. Les dernière variables, mingw32_prefix, nsis_compiler et and python_dir, spécifient la localisation des fichiers MinGW, du compilateur NSIS et de Python Win32 respectivement. Leurs valeurs par défaut n'ont normalement pas à être modifiées, mais NSIS peut toutefois être installé par défaut sous Program Files (x86) ou Program Files en fonction de la configuration de Wine. Notez que setup est lu par shell, il ne doit donc pas y avoir d'espace autour du signe =.

Compilation

La configuration est fastidieuse mais elle vaut la peine d'être faite car la compilation est alors extrêmement simple. Lancez

./cross-build-32

dans le répertoire mingw32-cross-compile pour compiler l'installeur Win32. Et c'est tout. En cas de succès un installeur de Gwyddion pour Windows intégrant GTK+ sera créé dans $target_prefix. De même, l'installeur Win64 est compilé avec

./cross-build-64

En attendant vous pourrez aller boire un café – ou étudier le script cross-build (qui est en fait plutôt court et clair).

Notez que les scripts lancent autogen.sh mais ne nettoient pas le répertoire du code source. Il vous sera certainement nécessaire de le faire manuellement si vous compilez Gwyddion de manière répétée. En particulier, si vous compilez pour les deux architectures dans le même dossier, assurez-vous de lancer

make distclean

entre deux compilations pour remettre le répertoire source dans un état convenable.

Lancer sous Wine

L'executable de Gwyddion peut être lancé sous Wine. En supposant que la valeur par défaut de target_prefix est utilisée :

wine ~/opt/gwyddion-mingw32/bin/gwyddion.exe

Pour lancer gwyddion.exe l'éditeur de liens doit être capable de trouver les DLLs nécessaires. Ceci est assuré de manière assez simple par le script copysysfiles qui copie tous les fichiers MinGW nécessaires du système vers $target_prefix. Comme copysysfiles est exécuté par cross-build vous n'avez normalement pas à le faire manuellement.

Le seconde étape nécessaire est de créer la clé de registre

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\gwyddion.exe

pour pointer vers gwyddion.exe et la valeur Path pour pointer vers le répertoire bin.

Compilation croisée de modules autonomes

La compilation croisée de modules autonomes ne nécessite que les en-têtes de Gwyddion ainsi que les lirairies de développement Win32. Bien qu'on puisse la réaliser en compilant totalement Gwyddion, il s'avère qu'il n'est pas nécessaire de faire ainsi. En ne compilant que les librairies, vous éviterez l'installation de différentes dépendances de Gwyddion. Ceci peut être fait à l'aide du patch gwyddion-2.22-build-only-libs.patch disponible parmi les scripts de compilation.

Cela peut même être encore plus simple, car les librairies Gwyddion pour MinGW sont disponibles sous forme de paquet RPM (mingw32-gwyddion-libs) sur le site gwyddion.net.

Une fois ce paquet installé, vous pouvez tenter la compilation croisée du module autonome threshold-example disponible dans le répertoire subversion. Voir le fichier README correspondant pour plus de détails.