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
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
RSS
Follow
Preferencesoft Website Privacy Policy