Table des matières
Gobo Eiffel sur OpenBSD

Le langage Eiffel fait partie des meilleurs langages de programmation orientés objets dont la plupart des concepts ont été repris par des langages comme Java, C# et d’autres.
Malheureusement, Eiffel a maintenant une popularité très faible, ce qui n’encourage guère les développeurs à l’apprendre ou à l’utiliser.
Historiquement, le langage Eiffel a été conçu par Bertrand Meyer en 1985. Il existe plusieurs compilateurs pour ce langage :
- Eiffel de B. Meyer
- Gobo Eiffel
- LibertyEiffel
Ces langages sont tous distribués en source libre, mais Gobo Eiffel a l’avantage d’avoir une licence très permissive et de s’installer facilement sur OpenBSD.
Installation sur OpenBSD
Commençons par télé-charger le paquet logiciel de Gobo Eiffel sur GitHub : gobo-master.zip
Décompressons ce fichier dans notre répertoire utilisateur.
Nous pouvons aussi utiliser la commande git
avec le lien
https://github.com/gobo-eiffel/gobo.git
Dans le fichier .profile de notre session utilisateur, insérons les lignes :
GOBO=/home/<user>/<path-to>/gobo-master
export GOBO
Installons en mode « root » le paquet libiconv qui s’avère indispensable à la compilation de Gobo Eiffel. Mais lors de l’installation de Gobo Eiffel, la compilation provoque une erreur de fichiers non trouvés (iconv.h
et libiconv.a
). Cela provient du fait que le gestionnaire de paquets d’OpenBSD les installe dans le répertoire /usr/local
et non dans /usr
.
Provisoirement, effectuons des liens symboliques comme suit :
ln -s /usr/local/lib/libiconv.a /usr/lib/libiconv.a
ln -s /usr/local/include/iconv.h /usr/include/iconv.h
Pour finir plaçons-nous dans le répertoire /home/<user>/<path-to>/gobo-master/bin
et lançons la commande :
sh install.sh -v clang
Tout se compile et s’installe normalement sans erreur.
Pour tester l’installation exécutons dans le répertoire /home/<user>/<path-to>/gobo-master
, la commande
geant test_ge
Malheureusement, les vérifications se terminent par plusieurs erreurs :
Test Summary for xparse_example
# Passed: 1 test
# FAILED: 4 tests
# Aborted: 0 test
# Total: 5 tests (15 assertions)
Après quelques essais de compilation sur l’exemple hello, je me suis rendu compte qu’il manquait dans la génération des fichiers make un lien -l iconv
à la bibliothèque. Mais le problème a déjà été signalé pour Mac OS X (Fixed iconv build issue for Mac OS X #48) sur GitHub.
Ajoutons au fichier .profile les lignes suivantes :
ISE_PLATFORM=openbsd-x86
export ISE_PLATFORM
Le plus important est qu’il y ait bsd dans le nom.
Recommençons l’installation. Dans le répertoire /home/<user>/<path-to>/gobo-master/bin
, lançons la commande :
sh install.sh -v clang
Effectuons encore un dernier test :
geant test_ge
Il échoue encore mais beaucoup plus loin.
Test Summary for xgec_tool
# Passed: 0 test
# FAILED: 1 test
# Aborted: 0 test
# Total: 1 test (5 assertions)
Test Results:
FAIL: [TEST_GEC.test_gec] expected_results
expected: output containing 'No Diff since last run'
but got:
Testing validation...
Running Test Cases
Test Summary for validation
# Passed: 189 tests
# FAILED: 298 tests
# Aborted: 0 test
# Total: 487 tests (6026 assertions)
Il se pourrait que certaines classes de la bibliothèque free_elks
ne soient pas utilisables.
Exemple
Essayons tout de même un exemple simple. Pour cela créons les fichiers suivants dans un même répertoire :
hello.e
class HELLO
create
make
feature
i: INTEGER
make
do
print ("Hello, World%N")
from
i := 0
until
i >= 10
loop
print (i)
i := i + 1
end
print ("%N")
end
end
hello.ecf
<?xml version="1.0" encoding="ISO-8859-1"?>
<system
xmlns="http://www.eiffel.com/developers/xml/configuration-1-22-0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.eiffel.com/developers/xml/configuration-1-22-0 http://www.eiffel.com/developers/xml/configuration-1-22-0.xsd"
name="hello"
uuid="8C35A383-9927-4EF8-8784-D6F287B296E7"
>
<target name="hello">
<root class="HELLO" feature="make"/>
<file_rule>
<exclude>.git</exclude>
</file_rule>
<option warning="true">
<assertions precondition="true" postcondition="true" check="true" invariant="true" loop="true" supplier_precondition="true"/>
</option>
<!-- Assumes you set the GOBO environment variable to the path to your gobo repo folder, as per gobo's install instructions. -->
<library name="free_elks" location="${GOBO}/library/free_elks/library_ge.ecf" readonly="true"/>
<cluster name="root_cluster" location="./" recursive="false">
<file_rule>
<exclude>.git</exclude>
</file_rule>
</cluster>
</target>
</system>
Puis compilons le programme en lançant la commande :
gec hello.ecf
Degree 6: 0/0/0 0:0:0.058
Degree 5: 0/0/0 0:0:0.522
Degree 4: 0/0/0 0:0:0.182
Degree 3: 0/0/0 0:0:0.244
Degree -2: 0/0/0 0:0:0.221
Degree -3: 0/0/0 0:0:0.210
hello1.c(hello1.o:(eif_file_creatable)): warning: strcpy() is almost always misused, please use strlcpy()
hello1.c(hello1.o:(eif_file_owner)): warning: sprintf() is often misused, please use snprintf()
Degree -4: 0/0/0 0:0:7.088
Total Time: 0/0/0 0:0:8.704
À part quelques messages d’avertissement, ça marche!
À l’exécution, il affiche :
Hello, World
0123456789