Clanlib: il porting su Solaris


Non so  per quale spirito di autolesionismo mi sia cimentato in questa impresa...

Le Clanlib sono librerie per lo sviluppo di giochi in ambiente Linux/FreeBSD.
Mentre mi accingevo a compilarle sulla mia SPARC Solaris 8 mi accorgo che -oooooohhhhh meravigliiiiiiia- non compilano !!
Allora mi son detto: patchiamo a manetta, in qualche modo le compilero', anche se non avro' tutte le funzioni a disposizione. Solo che mi accorgo ben presto che l'impresa non era proprio semplice, i sorgenti andavano patchati pesantemente, al punto da mettermi di fronte ad un bivio: patchare o portare ?
Vista la mole di lavoro che richiedeva metter pezze qua e la' forse e' meglio -mi son detto- iniziare un vero e proprio porting.
Mi iscrivo alla mailing-list degli sviluppatori e butto li' l'idea. Qualcuno s'e' pure esaltato, peccato che pero' mi sto facendo tutto il lavoro da solo...!

Attualmente alcune delle mie patch sono gia' state inserite nel ramo di sviluppo delle Clanlib 0.6 e 0.7.

Con le mie patch riuscirete a compilare le Clanlib su Solaris pero' avete bisogno di fare qualche hack qua e la':

  • Eliminare ogni occorrenza del flag -lXxf86 dai file:  Setup/Unix/Makefile.gl e Setup/Unix/Makefile.display;
  • Ancora il configure non definisce "Solaris" quindi dovrete farlo voi a mano. In Setup/Unix/Makefile.conf aggiungete il flag -DSolaris;
  • Un grave problema e' il seguente. Solaris, nel suo /usr/include/sys/socket.haggiunge, non so per quale motivo, il prefisso __xnet_ a tutte le funzioni come: bind, connect, send, ecc. tali da risultare: __xnet_bind, __xnet_connect e via dicendo. Questa cosa non affligge la compilazione, che avviene senza problemi, bensi' il linkaggio, infatti quando viene chiesto di linkare l'oggetto __xnet_bind il nostro caro ld s'inkazza (se la prende proprio a morte) e non linka xche' non capisce che cazzo sia __xnet_bind (e dategli torto...). L'hack allora sta nel commentare la riga 411 di /usr/include/sys/socket.h che dice: #ifdef __PRAGMA_REDEFINE_EXTNAME.
Per il resto non ci sono altre cose particolari, a parte le mie patch che pero' sono gia' nei sorgenti delle Clanlib 0.6 e 0.7.



To do:

Tuttora il porting e' ancora in fase di sviluppo. Sto lavorando su questo messaggio d'errore che mi appare quando avvio un qualunque gioco che usa le Clanlib:

ClanLib Assert: Sources/Display/Display/X11/target_ximage_shm.cpp:91
                'm_shminfo.shmid >= 0' failed.

Abort (core dumped)


Il che ha a che fare con la gestione della shared memory, tradotto: so' cazzi.


Newz !
Parlando col grande Magnus (il papa' delle clanlib) abbiamo capito che il problema e' dovuto al fatto che Solaris e' Big-Endian, questo comportava un sovraccarico della memoria che faceva cosi' crashare il programma lanciato.
Per le clanlib 0.6 il problema va risolto, mentre x le 0.7, in teoria, dovrebbe pensarci il ./configure a sistemar le cose... non ho ancora provato.

Altra cosettuccia da vedere e' come viene gestito un audio cd. Il file Source/Sound/Sound/ClanSound/cdaudio_linux.cpp va sistemato. Per adesso compila e linka, pero' cosi' com'e' non si e' in grado di sfruttare i cd audio con le Clanlib.





Ah, dimenticavo. Se volete utilizzare le Clanlib su Solaris (ma anche su altri OS) avete bisogno di settare X con almeno 16 bit di profondita'. Per sapere come va fatto su Solaris leggete questo mio breve articolo (io sto usando 24 bit, da 8... !), visto che non e' documentato dalla Sun (!!!!!).

Se vi interessa partecipare a questo massacro... unitevi !


by darko

Riferimenti: www.clanlib.org

Si ringrazia: il non avere un cazzo da fare.