Gobo Eiffel sur OpenBSD

eiffel

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

RSS


Mail


Follow


Preferencesoft Website Privacy Policy