Introduction
Tcl (Tool Command Language) est un langage de script conçu à l’Université de Berkeley. Il s’inspire des langages C, Lisp, Shell et Awk. Ce langage à typage à dynamique est multi-plateformes. Tcl s’interface très aisément avec le langage C, ce qui lui permet de servir d’interprète embarqué dans de nombreux programmes.
Avec le temps, le langage Tcl a vu naître son compagnon Tk. Tk est une extension du langage Tcl pour créer des interfaces graphiques portables. Sous Sun Solaris, Tk permet le développement d’interfaces graphiques X11. Sous Macintosh, des interfaces Aqua, etc.
Tcl/tk est souvent utilisé par les moteurs de bases de données, qu’il s’agisse de clients développés en Tcl/Tk ou du langage Tcl embarqué et utilisé dans des routines (procédures stockées…) :
- PostgreSQL : utilisation possible du langage Tcl dans des procédures stockées.
- Oracle Berkeley DB et SQLite : suite de tests.
- Oracle : oractl, client Tcl/tk pour Oracle…
Cet article présente donc la compilation de Tcl/Tk 8.5.10 en 64 bits avec SunStudio 12.1 sur une plateforme Solaris 10 x86 64 bits, pour plus d’informations sur l’installation des compilateurs SunStudio 12.1 : Installation de Sun Studio 12 sur Sun Solaris 10 X86 pour les compilations.
Une description de l’arborescence Tcl/Tk est également proposée pour une première prise en main rapide de Tcl/Tk : binaires tclsh et wish, librairies, scripts tclConfig.sh et tkConfig.sh, exécutions des démos graphiques Tk.
Téléchargement
Tcl/Tk se présente sous la forme de 2 archives compressées disponibles en téléchargement à cette adresse : Tcl/Tk - Download. Lors de la rédaction de cet article, la version 8.5.10 est la version stable de Tcl/Tk (NB : les versions avec le mot clé b sont des versions en phase beta, à éviter dans un environnement de production).
tcl8.5.10-src.tar.gz
tk8.5.10-src.tar.gz
Le 2 archives tcl8.5.10-src.tar.gz
et tk8.5.10-src.tar.gz
sont transférées
avec ftp
sur la machine cible dans le répertoire /Software/tools/temp
puis
décompressées et désarchivées avec les utilitaires gunzip
et tar
:
Tcl |
---|
|
Tk |
---|
|
Avec la commande tar
, les codes sources sont alors respectivement
désarchivés dans les sous répertoires ./tcl8.5.10
et ./tk8.5.10
.
Préparation de l’environnement pour la compilation de Tcl/Tk 8.5.10 avec SunStudio 64 bits
La variable PATH
est mise à jour avant la compilation pour référencer
/usr/ccs/bin
, répertoire qui contient le binaire ld
, indispensable pour la
génération des liens.
% PATH=/usr/ccs/bin:$PATH
% export PATH
Si les liens de SunStudio n’ont pas été installés dans /usr/bin
lors de
l’installation, la variable PATH
doit référencer également le répertoire
<répertoire de sunstudio 12.1>/bin
pour trouver les compilateurs.
% PATH=/opt/sunstudio12.1/bin:$PATH
% export PATH
Il s’agit d’une compilation en 64 bits, la variable CFLAGS
peut être mise à
jour à -m64
mais c’est inutile pour Tcl/Tk, l’option de compilation en 64 bits
doit obligatoirement être spécifiée à la configuration de la compilation.
% CFLAGS=-m64
% export CFLAGS
Compilations de Tcl 8.5.10 et Tk 8.5.10
Configuration de la compilation
Une fois l’environnement préparé (variables $PATH, $CFLAGS
), la
configuration de la compilation peut être déclenchée. Le script configure
est
disponible dans le répertoire correspondant à sa plateforme (unix ici).
L’option --help
du script configure
renvoie les options de configuration.
Tcl | Tk |
---|---|
|
|
Les options --prefix
sont spécifiées ici dans cet article afin de
délocaliser l’installation de Tcl/Tk en dehors des répertoires systèmes /usr
.
L’installation des binaires et librairies n’est pas réalisée dans son
répertoire par défaut /usr/local
et dans l’architecture choisie, le répertoire
/Software/tools/misc
est le répertoire alternatif à /usr/local
: la
configuration est donc réalisée avec l’option --prefix=/Software/tools/misc
(DIR).
La compilation des librairies de Tcl/Tk est réalisée par défaut en 32 bits.
Si l’option --enable-64bit
n’est pas spécifiée dans la configuration alors que
la variable d’environnement CFLAGS
comprend l’option de compilation -m64
, la
génération des librairies tombe en échec :
ld: fatal: file tk3d.o: wrong ELF class: ELFCLASS64
ld: fatal: File processing errors. No output written to libtk8.5.so
*** Error code 1
make: Fatal error: Command failed for target `libtk8.5.so'
Les configurations de la compilation de tcl 8.5.10 et tk 8.5.10 sont donc les suivantes dans cet exemple pratique :
Tcl | Tk |
---|---|
|
|
La configuration de la compilation n’a pas posé de problème particulier ici.
Compilation et installation
La compilation et l’installation de Tcl/Tk 8.5.10 sont réalisées avec les
commandes make
et make install
.
Tcl | Tk |
---|---|
|
|
À la compilation, des avertissements assez nombreux peuvent être générés :
cc: Warning: -xarch=amd64 is deprecated, use -m64 to create 64-bit programs
Il est envisageable de modifier les fichiers config
et Makefile
afin de
remplacer l’option de compilation -xarch=amd64
par -m64
, options qui indiquent
une compilation en 64 bits, mais c’est optionnel, voire du superflu. Sous Sun
Solaris 10 avec Sun Studio 12.1, l’option de compilation -xarch=amd64
est
obsolète (deprecated) mais encore utilisable pour une compilation 64 bits, elle
sera définitivement retirée dans de futures versions.
Makefile
...
# CFLAGS = $(CFLAGS_OPTIMIZE) -xarch=amd64
CFLAGS = $(CFLAGS_OPTIMIZE) -m64
...
# Flags to pass to the linker
# LDFLAGS = $(LDFLAGS_OPTIMIZE) -xarch=amd64
LDFLAGS = $(LDFLAGS_OPTIMIZE) -m64
...
Architecture et prise en main de Tcl/Tk 8.5.10
Dans la suite de cet article, $DIR
correspond au répertoire d’installation de
Tcl/Tk (/Software/tools/misc
). À la fin de la compilation, l’arborescence créée
pour Tcl/Tk 8.5.10 est la suivante :
$DIR/bin
$DIR/lib
$DIR/lib/tcl8
$DIR/lib/tcl8.5
$DIR/lib/tk8.5
Variables d’environnement
Pour utiliser pleinement Tcl/Tk, les variables d’environnement PATH
et
LD_LIBRARY_PATH
sont mises à jour pour référencer $DIR/bin
et $DIR/lib
. La
variable d’environnement DISPLAY
est également modifiée pour utiliser les
graphismes X11 avec Tk : DISPLAY=<votre adresse IP>:0.0.
% PATH=/Software/tools/misc/bin:$PATH
% export PATH
% LD_LIBRARY_PATH=/Software/tools/misc/lib:$PATH
% export LD_LIBRARY_PATH
% DISPLAY=10.128.148.144:0.0
% export DISPLAY
Binaires tclsh et winsh
2 binaires sont créés dans le répertoire $DIR/bin
: tclsh8.5 et wish8.5. Pour
s’affranchir de la version de Tcl/Tk, des liens tclsh
et wish
peuvent être
ajoutés :
% cd /Software/tools/misc/bin % ln -fs tclsh8.5 tclsh % ln -fs wish8.5 wish % ls -ll
tclsh8.5 tclsh -> tclsh8.5 wish8.5 wish -> wish8.5
tclsh
tclsh
est l’interpréteur de commandes tcl en mode interactif ou en donnant
un fichier tcl en entrée. Un exemple classique : l’affichage de "Hello
world"
Mode interactif | Avec fichier en entrée |
---|---|
|
|
En mode interactif, à l’ouverture, tclsh
recherche un fichier .tclshrc
dans
le répertoire $HOME
du compte Unix utilisé et évalue ce dernier si il existe.
Ce n’est pas le cas lorsqu’un fichier tcl est donné en entrée, cependant on
peut forcer le fichier tcl de sourcer .tclshrc
.
wish
wish
est l’interpréteur de commandes tcl/tk pour les développements
graphiques en mode interactif ou en donnant un script tcl en entrée. wish
ouvre
une fenêtre graphique (X11 pour Solaris) pour exécuter, développer et tester
les interfaces avec Tk.
En exemple : la création d’un bouton avec le libellé "Hello world"
Mode interactif | Avec fichier en entrée |
---|---|
|
|
Comme pour tclsh
, en mode interactif, à l’ouverture, wish
recherche un
fichier .wishrc
dans le répertoire $HOME
du compte Unix utilisé et évalue ce
dernier si il existe. Ce n’est pas le cas lorsqu’un fichier tcl est donné en
entrée, .wishrc
doit être sourcé dans le script tcl/tk si nécessaire.
Librairies, tclConfig.sh et tkConfig.sh
Outre les librairies statiques (archives *.a
) et librairies dynamiques
(*.so
) créées lors de la compilation dans le répertoire $DIR/lib
:
libtcl8.5.so
libtclstub8.5.a
libtk8.5.so
libtkstub8.5.a
2 scripts shell sont également créés dans $DIR/lib
: tclConfig.sh
et
tkConfig.sh
. Ces 2 scripts rassemblent respectivement pour Tcl et Tk les
informations sur la configuration de la compilation.
tclConfig.sh | tkConfig.sh |
---|---|
|
|
Ces 2 scripts importants sont généralement inclus dans les scripts configure
des produits (PostgreSQL, Oracle Berkeley DB…) qui embarquent ou utilisent
les extensions Tcl/Tk. Ils facilitent la détection de l’environnement
Tcl/Tk.
- Pour PostgreSQL :
--with-tclconfig= DIRECTORY (Sets this directory to hold tcl or tk Config.sh files.)
- Pour Oracle Berkeley DB :
--with-tcl=DIR (Directory location of tclConfig.sh)
.
Exécuter une démo graphique Tcl/Tk
Des démos graphiques, pour découvrir le code Tcl/Tk et vérifier la bonne
exécution de Tcl/Tk avec X11 sous Solaris, sont disponibles dans le répertoire
$DIR/lib/tk8.5/demos
.
% cd /Software/tools/misc/lib/tk8.5/demos
% tcolor