IUP, qu'on ne présente plus.

En effet, on ne le présente plus, non pas à cause de sa renommée mondiale, mais simplement à cause du fait que si vous lisez ceci, c'est que vous connaissez déjà cette bibliothèque.

Un petit lien pour les spammeurs qui se sont perdus en ces lieux: site d'IUP



De quoi avons-nous besoin ?

IM

Il s'agit d'un toolkit pour manipuler différents formats graphiques.

La dernière version connue est la 3.8.1, celle disponible dans AUR est la 3.7.1.


ftgl

Bon alors… ft est pour FreeType et gl pour OpenGL.

Voilà donc d'une lib pour tracer du texte avec OpenGL. Mais à l'ancienne (pas de core profile).

Par chance, la dernière version peut se ramener avec pacman.

pacman -S ftgl , et n'en parlons plus!


CD

Une question me taraude à propos de tecgraf. Le font-ils vraiment exprès avec leurs noms de librairie ? Le but est-il d'être noyé dans les moteurs de recherche ? Quoi qu'il en soit, encore une lib où il vaut mieux avoir le lien direct.

Cette fois, il s'agit de Canvas Draw, qui s'appuie sur IM et ftgl.

Comme son nom l'indique, le but est de tracer dans un canevas. Présenté ainsi, cela ne semble pas très intéressant. Mais si j'ajoute que le canevas peut-être aussi bien un buffer Win32, GDI+, X11 que PDF, Postscript ou SVG, qu'en pensez-vous ?

Ah ? Bon d'accord. Néanmoins, c'est un prérequis important pour IUP. Pour ne pas changer, AUR n'est pas à jour: version 5.5 , alors que la version 5.6 est déjà disponible. Rhooo!


IUP

Celui que nous attendions tous, et qu'on ne présente plus (n'insistez pas).

Une dépendance exotique: la lib CD.

Une version un peu ancienne dans AUR : 3.2 (la 3.7 est disponible).



Mauvaise méthode : s'acharner sur son PKGBUILD.

Je vous préviens, trafiquer les PKGBUILD depréciés et buggés de AUR n'est qu'une sombre perte de temps.

Dans le principe, il semble n'y avoir que le pkgver à mettre à jour.

Dans la pratique, vous allez vous retrouver avec de mystérieux messages d'erreur lors de la compilation, et des demi-paquets comme résultats.

D'autre part, pour le paquet IUP, vous allez vous rendre compte que les modifications du PKGBUILD sont tellement importantes que vous auriez plus vite fait de le réécrire vous-même. Pour les courageux qui voudraient se lancer là-dedans, voici une partie des modifications à faire (une partie seulement, car je ne suis pas arrivé à mes fins avec cette méthode):

  • Changer pkgver avec la bonne version d'IUP.
  • Ajouter le support 64 bits: arch=('i686' 'x86_64').
  • libcd mal nommée (remplacer libcd par cd).
  • le patch du makefile est à commenter, sauf si vous gardez la version d'IUP concernée pas le pkgbuild (je ne le vous recommande pas).
  • les modules à compiler (par exemple, enlevez iupweb si vous n'avez pas l'environnement de compilation pour webkit).

Et tout ça pour se planter à la compilation. Il est temps de passer à …



La méthode root et artisanale.

Les petits cochons seront bien gardés.

Nous allons installer tout ceci dans ~/local

Cette méthode évite de casser votre système en polluant /usr/include/, /usr/lib , etc…

Si ce n'est pas déjà fait, il faut créer la hiérarchie local.


~$ mkdir -p ~/local/bin ~/local/include ~/local/lib
~$ ls local
bin  include  lib


ftgl ? Une paille.

ftgl a le bon goût d'être disponible dans pacman, dans la branche extra.

pacman -S ftgl


En avant avec IM.

Passons à la dépendance qui ne nécessite pas d'autres dépendances dans les projets tecgraf. J'ai nommé IM.

Chargez les sources et dépackez les dans un coin.

Nous adaptons à Lua 5.2 LUA_VER et LUA_PFX dans config_lua_module (à ne faire bien sûr que si vous utilisez la 5.2).


#Current Lua Version
LUA_VER=5.2
LUA_PFX=52


Ensuite, nous modifions le path dans tec_uname.

Le tout est de s'intercaler subtilement. Voici la partie à modifier:


ComputeSystemPaths()
{
  if [ $TEC_SYSARCH == x64 ]; then
    if [ -d /usr/lib64 ]; then
      TEC_SYSTEM_LIB=/usr/lib64
    else
      TEC_SYSTEM_LIB=/usr/lib
    fi
  else
    TEC_SYSTEM_LIB=/usr/lib
  fi

  TEC_SYSTEM_INC=/usr/include

  #ajout subtil pour forcer $HOME/local
  TEC_SYSTEM_LIB=$HOME/local/lib
  TEC_SYSTEM_INC=$HOME/local/include
  #fin de l'ajout subtil

  TEC_LUA_LIB=$TEC_SYSTEM_LIB/lua/$LUA_VER
}


Vous pouvez tester les modifications avec ce script:


#!/bin/bash
# pour tester tec_uname

source ./tec_uname

ComputeTecUname
ComputeSystemPaths

PrintInfo
echo "TEC_LUA_LIB : $TEC_LUA_LIB"


Il est temps de compiler : allez dans le répertoire src et lancez un make -j 5 do_all

Ne compilez pas le Makefile depuis la racine, ou vous obtiendrez en sortie de make un mystérieux do_all Error 2.

Pour installer IM, pas besoin de sudo comme suggéré par les scripts. Nous installons dans notre home sans avoir besoin des droits root :


~/sources/im/$ ./config_lua_module
~/sources/im/$ ./install
~/sources/im/$ ./install_dev

Notez qu'il faudra peut-être rendre exécutable ces scripts avant de les lancer. (chmod 755 …)

Vous savez quoi ? Tout n'est pas copié dans ~/local/lib.

Il faut vraiment tout faire soi même… rendez-vous dans le répertoire où les libs furent compilées, et copiez celles absentes de votre ~/local/lib.



Continuons avec CD.

Chargez les sources et dépackez les dans un coin.

Le principe reste le même que pour IM.

Changement des versions, et insertion du path $HOME/local/…

La compilation et l'installation utilisent les mêmes scripts.

(attention à faire le make depuis src, comme indiqué précédemment).

N'étant pas payé à la ligne, je vous invite donc à vous reporter à la partie précédente pour les manœuvres à effectuer.



Terminons avec IUP.

Chargez les sources, les exemples et la doc, et … vous connaissez la chanson.

Faites les modifications dans config_lua_module et tec_uname.

Il va peut-être vous falloir également modifier quelques cibles du makefile. Par exemple, si vous n'avez pas le sdk webkit installé, il faudra enlever cette cible de la rêgle do_all : iup_web.

Ce qui dans mon cas a donné (j'ai aussi enlevé la windozerie):


do_all: iup iupcd iupcontrols iupgl iup_pplot iup_mglplot iupim iupimglib iuptuio ledc iupview iuplua5 iupconsole

Alors attention, car vous allez devoir vous y prendre à deux fois. Pour terminer la compilation, il faudra installer partiellement la lib.

Lancez la compilation et l'installation, de la même facon que pour IM et CD.

Tout comme pour IM, il manque quelques libs (toujours les bindings Lua). Veillez donc à copier les libs manquantes, afin que les liens symboliques pour Lua servent à quelque chose, et que nous puissions achever la compilation.

Modifiez ensuite srclua5 et enlevez les références à lua51.

Exemple:


iuplua:
#       @$(TECMAKE_CMD) USE_LUA51=Yes
        @$(TECMAKE_CMD) USE_LUA52=Yes


Relancez make.

Installez.

J'ai également copié ce qui ressemblait fort à des helpers dans ~/local/lib/lua/5.2/. Par helpers, j'entends les fichiers *.lua que l'on trouve dans le répertoire srclua5 de IUP. Je ne leur ai pas trouvé d'utilité pour l'instant, les exemples d'IUP n'ont pas besoin d'eux.




Le présent, c'est maintenant !

Et sur ces entrefaits, il est temps de lancer le petit Hello World traditionnel, que l'on ne présente plus non plus.

Si votre prudence naturelle vous incite à ignorer les docs, voilà de quoi satisfaire à l'exercice imposé:


#!/usr/bin/env lua

package.cpath = package.cpath .. ";/home/jseb/local/lib/lua/5.2/?.so"
require "iuplua"

dlg = iup.dialog{iup.label{title="Goodbye, World!"}; title="test"}
dlg:show()

if (not iup.MainLoopLevel or iup.MainLoopLevel()==0) then
    iup.MainLoop()
end

N'oubliez pas d'adapter le package.cpath à votre config.

Vous pouvez également tester les très nombreux exemples fournis sur le site tecgraf (dans une archive dédiée).

Pour tester les exemples, je vous conseille d'exporter cette variable, qui vous évitera de modifier tous les sources avec package.cpath :


export LUA_CPATH=$HOME/local/lib/lua/5.2/?.so

Certains exemples ne fonctionneront peut-être pas, car ils nécessitent d'autres packages. Ainsi, glcanvas.wlua nécessite la lib luagl. À vous de voir.


Une dernière chose: les exemples Lua ont l'attribut exécutable, mais il vous faudra les lancer en précisant l'interpréteur Lua. Celui-ci n'est pas précisé dans la script, et si vous ne précisez pas l'interpréteur, le shell pense avoir affaire à un script shell. Je ne sais pas pourquoi j'écris ça, si vous êtes arrivés jusque ici, je ne vous apprends rien.



GUI moquait

IUP a la réputation d'être une bibliothèque particulièrement ardue à compiler. Effectivement, elle est à la hauteur de sa réputation.

Tout cela mériterait quelques beaux PKGBUILD.

Ce qui est laissé à titre d'exercice au lecteur.