Présentation
Lancée début 2011, la librairie gtk-fortran permet de créer des interfaces graphiques GTK dans des programmes en Fortran. Elle est multi-plateforme (Linux, Windows via MSYS2, BSD et macOS) et le projet est publié sous licence GNU GPLv3. Environ 10000 fonctions sont accessibles (GTK, GDK, GdkPixbuf, Cairo, Pango, ATK, GLib, GObject, GIO). En plus de l'aspect interface graphique, gtk-fortran permet également :
- d'accéder aux fonctions de la GLib,
- d'accéder aux fonctionnalités de la librairie de tracé scientifique PLplot.
Quelques aspects techniques
Techniquement, gtk-fortran utilise le module ISO_C_BINDING introduit dans la norme Fortran 2003 afin de faciliter et de normaliser l'interfaçage entre les programmes Fortran et C, en assurant au mieux l'interopérabilité des types de données, des pointeurs, des appels de fonctions, etc.
Un programme Python se charge de parcourir les fichiers .h
des librairies GTK afin d'essayer d'en extraire la substantifique moelle à l'aide d'expressions régulières et de générer les interfaces Fortran permettant d'accéder aux fonctions C.
Par exemple, pour le prototype C
void gtk_window_set_title (GtkWindow *window, const gchar *title);
situé dans /usr/include/gtk-3.0/gtk/gtkwindow.h
, on obtient l'interface Fortran suivante :
subroutine gtk_window_set_title(window, title) bind(c)
use iso_c_binding, only: c_ptr, c_char
type(c_ptr), value :: window
character(kind=c_char), dimension(*) :: title
end subroutine
La plupart des énumérations sont également traduites. Par exemple :
typedef enum
{
G_DATE_DAY = 0,
G_DATE_MONTH = 1,
G_DATE_YEAR = 2
} GDateDMY;
devient en Fortran :
enum, bind(c) !GDateDMY
enumerator :: G_DATE_DAY = 0
enumerator :: G_DATE_MONTH = 1
enumerator :: G_DATE_YEAR = 2
end enum
Nouveautés dans gtk-fortran 19.04
La version 19.04 (la numérotation correspond à la version d'Ubuntu utilisée pour générer la librairie) est basée sur GTK 3.24.8, GLib 2.60.0 et GTK 2.24.32. Elle se caractérise également par l'ajout d'outils permettant de repérer les fonctions GTK obsolètes (deprecated), la parallélisation de la compilation (make -j
) dans la branche gtk3, un effort particulier sur la qualité de la documentation, des corrections de bugs dans les exemples…
Futurs développements
Concernant l'avenir, le projet se prépare lentement à l'arrivée de GTK 4. Avec également une réflexion sur l'opportunité de passer de CMake à Meson, outil désormais utilisé par le projet GTK.
Les bonnes volontés sont bien sûr les bienvenues, d'autant plus que nous ne sommes pas Légion !
Liens
- Page principale du projet : https://github.com/vmagnin/gtk-fortran/wiki
- John Reid, The New Features of Fortran 2003 : https://wg5-fortran.org/N1601-N1650/N1648.pdf
- Un exemple de projet utilisant gtk-fortran : https://egr.vcu.edu/departments/mechanical/research/nuclear-simulator-lab/
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.