# [EBUILD] SFML - Simple and Fast Multimedia Library

## TrizoLakai

Salut,

http://sfml.sourceforge.net

```
SFML est une API portable et facile à utiliser, écrite en C++. Vous pouvez la voir comme une alternative orientée objet à la SDL.

SFML est composée de nombreux modules pour coller parfaitement à vos besoins. Vous pouvez utiliser la SFML en tant que système de fenêtrage minimal pour s'interfacer avec OpenGL, ou en tant que bibliothèque multimédia riche en fonctionnalités pour construire des jeux vidéo ou des programmes interactifs.
```

ebuild :

http://opensvn.csie.org/trizorepo/

Vous pouvez commenter un peu cet ebuild ? (C'est mon premier, donc j'ai surement des choses à changer)

Merci,

ps : Ha oui je sais pas quoi mettre en warning si on active toute les useflags : noaudio, novideo, nonetwork. Pour dire que ça va installer presque rien de la librairie.

----------

## Alexis

hello, 

tu peux ptetre remplacer les noaudio & cie par des IUSE defaults avec EAPI="1", cf http://archives.gentoo.org/gentoo-dev/msg_148307.xml

tu devrais ptetre mettre au lieu de noaudio/nonetwork & cie des useflag plus spécifiques genre sndfile, openal, etc.

de manière générale, met des quotes ("") autour de chaque variable de répertoire que l'utilisateur peut changer ($S,$D,$WORKDIR), sans quote si y'a un espace, ça pète

la license est invalide je crois (fais 'repoman full' dans le répertoire de l'ebuild, il te sortira plein de warnings facile à corriger)

le epause est moche ;p

les die dans le src_compile pour emake, je les ferais plus parlants, genre 'die "emake toto failed"' pour qu'on sache ce qui a foiré

pour le src_install, au lieu d'utiliser cp, utilise plutot insinto + doins

pourquoi installer les libs dans /lib ? et pas /usr/lib ? d'ailleurs, pour lib, faut inheriter multilib et utiliser la fonction get_libdir sinon ça foire avec le multilib strict (l'idée est de pouvoir avoir un système 32 bits & 64 bits en parallèle sur un amd64 par ex., et donc /usr/lib est mal défini dans ce cas)

voilà pour ces commentaires vites faits, hésite pas à poser des questions si je suis pas clair (et c'est probablement le cas)

----------

## TrizoLakai

D'abord merci de t'être penché dessus. Je vais relire tout ça cette après midi parce que c'est vrai qu'il y a quelques trucs que je n'intercepte pas  :Smile: 

----------

## TrizoLakai

 *Alexis wrote:*   

> 
> 
> tu peux ptetre remplacer les noaudio & cie par des IUSE defaults avec EAPI="1", cf http://archives.gentoo.org/gentoo-dev/msg_148307.xml
> 
> 

 

 *Quote:*   

> 
> 
> tu devrais ptetre mettre au lieu de noaudio/nonetwork & cie des useflag plus spécifiques genre sndfile, openal, etc.
> 
> 

 

La librarie est composée de 5 sous librairies : sfml-graphics, sfml-window, sfml-system, sfml-network et sfml-audio.

sfml-audio a pour dépendances openal et libsndfile.

sfml-graphics lui c'est devil freetype et zlib. 

Et on ne peux pas compiler sfml-audio sans les deux à première vu. Donc je pense que c'est mieux de spécifier les "modules" de SFML, plutot que le nom des dépendances non ?

 *Quote:*   

> 
> 
> de manière générale, met des quotes ("") autour de chaque variable de répertoire que l'utilisateur peut changer ($S,$D,$WORKDIR), sans quote si y'a un espace, ça pète
> 
> 

 

J'ai fais des quotes autour des chemins qui utilisent les variables. C'est ce qu'il fallait faire ?

 *Quote:*   

> 
> 
> la license est invalide je crois (fais 'repoman full' dans le répertoire de l'ebuild, il te sortira plein de warnings facile à corriger)
> 
> 

 

Hmm, la commande n'a pas fonctionnée 

```
Repoman is unable to determine PORTDIR or PORTDIR_OVERLAY from the current

working directory.

```

J'utilise paludis, ça viens peut-être de là, je lirais le man après ce post.

 *Quote:*   

> 
> 
> le epause est moche ;p
> 
> 

 

Je l'ai supprimé, Laurent (le developpeur de SFML) qu'il ne trouvait pas ça nécessaire de mettre un warning si on ne compilait aucun des modules audio, graphics, window et network.

 *Quote:*   

> 
> 
> les die dans le src_compile pour emake, je les ferais plus parlants, genre 'die "emake toto failed"' pour qu'on sache ce qui a foiré
> 
> 

 

Fais.

 *Quote:*   

> 
> 
> pour le src_install, au lieu d'utiliser cp, utilise plutot insinto + doins
> 
> 

 

Fais pour les includes.

 *Quote:*   

> 
> 
> pourquoi installer les libs dans /lib ? et pas /usr/lib ? d'ailleurs, pour lib, faut inheriter multilib et utiliser la fonction get_libdir sinon ça foire avec le multilib strict (l'idée est de pouvoir avoir un système 32 bits & 64 bits en parallèle sur un amd64 par ex., et donc /usr/lib est mal défini dans ce cas)
> 
> 

 

J'ai pas du tout compris ce passage.

 *Quote:*   

> 
> 
> voilà pour ces commentaires vites faits, hésite pas à poser des questions si je suis pas clair (et c'est probablement le cas)

 

Merci pour ton aide.

----------

## TrizoLakai

 *Quote:*   

> LICENSE
> 
> This should be a space delimited list of licenses that the package falls under. This _must_ be set to a matching license in /usr/portage/licenses/. If the license does not exist in portage yet, you must add it first.

 

source : http://gentoo-wiki.com/MAN_ebuild_5

Donc j'ai regardé dedan, il y a que ZLIB et pas ZLIB/PNG ni PNG.

Donc je doit mettre ZLIB ?

Bon sinon j'ai pas mal modifié l'ebuild là.

J'utilise dolib.so pour les libs.

Par contre pour les includes il semble que doins Repertoire ne fonctionne pas. Donc j'ai essayé doins avec un * ça fonctionne pas non plus.

----------

## Alexis

 *TrizoLakai wrote:*   

> 
> 
> La librarie est composée de 5 sous librairies : sfml-graphics, sfml-window, sfml-system, sfml-network et sfml-audio.
> 
> sfml-audio a pour dépendances openal et libsndfile.
> ...

 

dans ce cas là pourquoi pas, je croyais qu'on pouvait désactiver le support pour chaque truc un par un

 *Quote:*   

> 
> 
>  *Quote:*   
> 
> de manière générale, met des quotes ("") autour de chaque variable de répertoire que l'utilisateur peut changer ($S,$D,$WORKDIR), sans quote si y'a un espace, ça pète
> ...

 

parfait, juste un truc :

```

dodoc "${S}/doc/*"

```

ça va te faire "*" no such file ou directory à l'install, l'étoile ne passe pas les quotes

ce que tu veux c'est:

```

dodoc "${S}/doc/"*

```

 *Quote:*   

> 
> 
>  *Quote:*   
> 
> la license est invalide je crois (fais 'repoman full' dans le répertoire de l'ebuild, il te sortira plein de warnings facile à corriger)
> ...

 

faut que tu mettes ton overlay dans PORTDIR_OVERLAY dans le make.conf pour qu'il le trouve en effet

 *Quote:*   

> 
> 
>  *Quote:*   
> 
> pourquoi installer les libs dans /lib ? et pas /usr/lib ? d'ailleurs, pour lib, faut inheriter multilib et utiliser la fonction get_libdir sinon ça foire avec le multilib strict (l'idée est de pouvoir avoir un système 32 bits & 64 bits en parallèle sur un amd64 par ex., et donc /usr/lib est mal défini dans ce cas)
> ...

 

comme t'utilises dolib c'est plus un souci maintenant  :Wink: 

en fait faut pas hardcoder "lib" mais choper sa valeur avec $(get_libdir), qui renvoie lib sur x86 ou lib64 sur x86_64 par exemple.

pour le doins repertoire : tu veux probablement faire doins -r (pour récursif)

pour la license, faut voir quelle license il utilise, je sais pas ce qu'est la license PNG :/

si y'a pas la license dans portage/licenses, rajoute la dans ton overlay : à la racine dans le répertoire licenses comme c'est fait dans portage et c'est bon je pense

----------

## Alexis

Ha autre chose, ton src_unpack est celui par défaut, tu peux donc le virer complètement

En plus faut pas quoter ${A} cette fois justement, unpack peut prendre plusieurs arguments et c'est fait pour  :Wink: 

----------

## TrizoLakai

 *Quote:*   

> 
> 
> ```
> 
> dodoc "${S}/doc/*"
> ...

 

Oui merci  :Smile: 

 *Quote:*   

> 
> 
>  *Quote:*   
> 
>  *Quote:*   
> ...

 

Ok je vais essayer ça alors.

 *Quote:*   

> 
> 
> pour le doins repertoire : tu veux probablement faire doins -r (pour récursif)
> 
> 

 

Changé.

 *Quote:*   

> 
> 
> pour la license, faut voir quelle license il utilise, je sais pas ce qu'est la license PNG :/
> 
> si y'a pas la license dans portage/licenses, rajoute la dans ton overlay : à la racine dans le répertoire licenses comme c'est fait dans portage et c'est bon je pense

 

Je verra ça avec lui alors.

Par contre pour les libs j'ai pas les liens d'un .so au .so.1 c'est grave pour le linkage après ou pas ?

```
localhost trizolakai # ls /usr/lib64 | grep libsfml

libsfml-graphics.so.1

libsfml-system.so.1

libsfml-window.so.1

localhost trizolakai # 
```

Merci encore.

----------

## Alexis

 *TrizoLakai wrote:*   

> 
> 
> Par contre pour les libs j'ai pas les liens d'un .so au .so.1 c'est grave pour le linkage après ou pas ?
> 
> ```
> ...

 

ldconfig te le fait pas tout seul ?

sinon essaye de faire un programme bidon et compile le avec '-lsfml-graphics' et regarde si ça marche  :Wink: 

----------

## TrizoLakai

J'ai tappé à la main et non il ne fait pas les liens.

J'ai essayé avec un programme :

```
~/de % g++ -o TT test.cc -lsfml-graphics -lsfml-window -lsfml-system                                                   °trizolakai°

/usr/lib/gcc/x86_64-pc-linux-gnu/4.2.1/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -lsfml-[color=green]graphics[/color]

collect2: ld a retourné 1 code d'état d'exécution
```

Et ensuite en faisant ln -sf libsfml-graphics.so.1 libsfml-graphics.so

```
~/de % g++ -o TT test.cc -lsfml-graphics -lsfml-window -lsfml-system                                                   °trizolakai°

/usr/lib/gcc/x86_64-pc-linux-gnu/4.2.1/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -lsfml-[color=green]window[/color]

collect2: ld a retourné 1 code d'état d'exécution

~/de %  
```

Donc ouai il y a bien problème.

J'ai essayé de passé de dolib.so à dolib ça ne change rien.

----------

## Alexis

hé mais attends, ya un support pour "make install" qui fait les liens j'ai l'impression

le seul souci c'est qu'on peut pas lui spécifier de DESTDIR, ça serait ptetre mieux de patcher et d'envoyer aux devs le patch pour qu'il supporte.

Ex: 

```

install:

        @($(CP) $(LIBPATH)/$(LIB).$(VERSION) /usr/lib && $(LN) $(LNFLAGS) /usr/lib/$(LIB).$(VERSION) /usr/lib/$(LIB))
```

pourrait être : 

```
install:

        @($(CP) $(LIBPATH)/$(LIB).$(VERSION) $(DESTDIR)/usr/lib && $(LN) $(LNFLAGS) /usr/lib/$(LIB).$(VERSION) $(DESTDIR)/usr/lib/$(LIB))
```

plus faudrait modifier pour pas qu'il envoie dans lib, mais dans un répertoire qu'on peut modifier, genre :

```

libdir=lib

```

et remplacer lib par $(libdir)

puis dans l'ebuild : 

```

emake DESTDIR="${D}" libdir=$(get_libdir) install || die "emake install failed"

```

dernier ptit truc, pour le SRC_URI, mets plutot mirror://sourceforge/sfml/SFML-${PV}-sdk-linux.tar.gz

juste histoire qu'il télécharge ça sur un mirroir près de chez les gens  :Wink: 

----------

## TrizoLakai

Pourquoi ne pas le faire dans l'ebuild le linkage ?

(SRC_URI changé.

----------

## Alexis

 *TrizoLakai wrote:*   

> Pourquoi ne pas le faire dans l'ebuild le linkage ?
> 
> 

 

bah tu peux faire un dosym aussi alors, mais c'est pénible, si tu peux te contenter d'un make install c'est d'autant plus simple et t'auras pas tout à revérifier à chaque nouvelle version

----------

## TrizoLakai

La fonction get_libdir me renvois rien. 

J'ai essayé en faisant un eerror $(get_libdir) est j'ai juste 

*

Donc mes symlink sont erronés avec cette commande :

```
dosym "$(get_libdir)/libsfml-system.so.1" "$(get_libdir)/libsfml-system.so"
```

----------

## Alexis

faut rajouter "multilib" à la ligne d'inherit

et $(get_libdir) renverra lib ou lib64, donc tu échappes pas à mettre /usr devant

----------

## TrizoLakai

Ok ça fonctionne.

Bon je pense qu'on approche de la fin là.

----------

