Compilare libresprite per slackware

Revision as of 14:58, 5 January 2025 by Wikiuser (talk | contribs) (Aggiunto pagina relativa a LibreSprite)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Benvenuti nella pagina Wiki di Simone Giustetti.


Lingue: English - Italiano


Compilare un Pacchetto Funzionante di LibreSprite per Slackware Linux

LibreSprite è un programma di disegno orientato alla realizzazione di immagini digitali in pixel art. Permette di disegnare sprite ed animazioni in 2 dimensioni utili per videogiochi, ad esempio, e dispone di tutte le funzionalità che ci si potrebbe aspettare da un programma di disegno moderno oltre a funzioni dedicate specificamente per la realizzazione di sprite e sfondi. Il programma supporta, tra le altre cose:

  • Anteprima in tempo reale delle animazioni;
  • Lo "Onion Skinning" che consente di visualizzare sullo sfondo un frame di una animazione mentre se ne disegna un altro;
  • Possibilità di modificare molti sprite contemporaneamente;
  • Palette di colori pronte per l'uso;
  • Possibilità di creare palette di colori personalizzate;
  • Sprite composti sia da livelli che da frame;
  • Possibilità di creare tile e poi utilizzarli per disegni a mosaico;
  • Strumenti di disegno e selezione precisi al pixel;
  • Supporto per molti formati di file per gli sprite e le animazioni.

Una delle ultime novità introdotte in LibreSprite consiste nella possibilità di creare script in JavaScript, ma ciò richiede che NodeJs, l'interprete JavaScript basato sul motore V8 di Chromium, sia installato sulla macchina.

LibreSprite nasce come clone di Aseprite nel 2016 a seguito di un cambio di licenza di quest'ultimo. Lo sviluppo è proseguito in parallelo ed i due progetti sono ormai distinti. LibreSprite è distribuito per diversi sistemi UNIX tra cui Linux, Android e, dalla versione 1.1, il MacOsX e ne esiste una versione per Windows. Non esiste un pacchetto ufficiale per Slackware Linux dato che il gruppo di sviluppo non pare prediligere alcuna distribuzione, distribuisce invece un pacchetto in formato AppImage, formalmente in grado di girare su qualsiasi versione di Linux a 64 bit. Purtroppo il pacchetto dell'ultima versione del programma, la 1.1, include una dipendenza da una versione delle librerie glibc più recente di quella inclusa in Slackware 15.0 ed incompatibile. Agli utenti Slackware non resta che usare la versione 1.0 del 2021, che risulta priva di tutte le funzionalità introdotte nel corso del triennio passato. Volendo giocare un po' con l'ultimissima versione stabile del programma, ho provveduto a compilarne i pacchetti ed a rilasciare gli script usati, in modo che altri possano usufruirne. Nel seguito dell'articolo verrà illustrata la procedura di compilazione e gli accorgimenti adottati per realizzare lo script.

Una Panoramica del Codice di LibreSprite

Il primo passo per giungere alla meta ha consistito nella consultazione del codice sorgente di LibreSprite per capire quali fossero il linguaggio di programmazione adottato, le dipendenze richieste e gli strumenti da utilizzare di conseguenza. Il codice sorgente è reperibile su GitHub, nella pagina dedicata al progetto (In inglese). Si consiglia lettura dei file README.md ed INSTALL.md, che contengono una mole di informazioni utili allo scopo. In particolare:

  • Il programma è scritto in linguaggio C++ versione 2014 o C++14.
  • Il sistema di compilazione adottato consiste in una combinazione di CMake e Ninja. Il primo serve per produrre i makefile per il secondo, che si occupa invece di tutte le operazioni di compilazione ed installazione.
  • Il supporto per il linguaggio lua, utilizzato nelle versioni precedenti per realizzare script internamente al programma, è stato rimosso in favore di JavaScript. Per aggiungere le funzionalità di scripting è richiesta la presenza di una versione di NodeJS funzionante sulla macchina. Dato che NodeJS è una dipendenza opzionale non supportata ufficialmente da Slackware Linux, la ho ignorata anche per non appesantire troppo il pacchetto finale. Per chi fosse interessato, pacchetti di NodeJS di terze parti sono facilmente reperibili in rete. AlienBob ne fornisce uno scaricabile dal suo blog. Per chi preferisse cimentarsi nella compilazione, script preposti sono reperibili nelle pagine del progetto SlackBuils.org.
  • Si basa su molte librerie in modo da supportare un vasto numero di formati per le immagini e le animazioni. Alcune dipendenze sono incluse tra i pacchetti standard Slackware mentre le altre sono reperibili altrove. Maggiori dettagli saranno forniti nel prossimo paragrafo.
  • Esistono due versioni distinte dell'archivio contenente il codice sorgente di LibreSprite. Purtroppo a questa nozione non viene assegnato il giusto peso e ci sono arrivato solo dopo una serie, per fortuna breve, di fallimenti. L'archivio LibreSprite-1.1.tar.gz contiene il codice sorgente del solo programma, epurato di tutti i moduli di terze parti, che sono richiesti per compilare il programma che non può farne a meno. Invece l'archivio SOURCE.CODE.+.submodules.tar.gz è quello veramente completo e consente di compilare il programma senza errori. Tratto in inganno dal nome, ritenendo che i moduli di terze parti fossero opzionali, in un primo momento avevo scaricato il primo archivio, solo per rendermi conto della sua inadeguatezza a seguito di fallimenti e continue segnalazioni di librerie mancanti. L'uso del secondo archivio ha risolto.

Dipendenze di LibreSprite

Segue un elenco delle dipendenze richieste da LibreSprite per compilare un pacchetto funzionante e la fonte ove procurarsele:

  • curl: Pacchetto standard di Slackware Linux;
  • duktape: Reperibile nell'archivio SOURCE.CODE.+.submodules.tar.gz, ma non in LibreSprite-1.1.tar.gz;
  • freetype: Pacchetto standard di Slackware Linux;
  • giflib: Pacchetto standard di Slackware Linux;
  • gtest: Incluso tra i pacchetti del progetto SlackBuilds.org;
  • libjpeg: Pacchetto standard di Slackware Linux;
  • libpng: Pacchetto standard di Slackware Linux;
  • libwebp: Pacchetto standard di Slackware Linux;
  • libX11: Pacchetto standard di Slackware Linux;
  • libXcursor: Pacchetto standard di Slackware Linux;
  • loadpng: Sinceramente non sono riuscito a reperire la fonte, ma non ho ricevuto segnalazioni in merito durante la compilazione;
  • modp_b64: Reperibile nell'archivio SOURCE.CODE.+.submodules.tar.gz, ma non in LibreSprite-1.1.tar.gz;
  • pixman: Pacchetto standard di Slackware Linux;
  • SDL2: Pacchetto standard di Slackware Linux;
  • simpleini: Incluso tra i pacchetti del progetto SlackBuilds.org, ma qualcosa si trova anche nell'archivio SOURCE.CODE.+.submodules.tar.gz;
  • tinyxml2: Incluso tra i pacchetti del progetto SlackBuilds.org;
  • zlib: Pacchetto standard di Slackware Linux.

Prima di incominciare i test di compilazione, ho verificato di aver installato le librerie disponibili per Slackware Linux, ho scaricato ed installato le dipendenze reperibili nel sito del progetto SlackBuilds.org ed infine mi sono procurato l'archivio SOURCE.CODE.+.submodules.tar.gz, che contiene i componenti mancanti.

Lo Script SlackBuild

Una volta verificato che tutte le dipendenze fossero installate, mi sono dedicato allo script di compilazione. Volendo produrre uno script il più standard possibile, ho fatto riferimento ai modelli forniti dal progetto SlackBuilds.org ed alle relative linee guida per l'uso:

Ogni applicazione ha le sue peculiarità e LibreSprite non è da meno. Segue un elenco delle righe specifiche inserite nel modello generico di script per ottenerne uno funzionante:

Ovviamente ho dovuto impostare nome e versione del pacchetto:

   PRGNAM=libresprite
   VERSION=${VERSION:-1.1}

Ho dovuto aggiungere una variabile specifica per gestire il nome dell'archivio del codice sorgente dato che lo stesso non ha alcuna relazione con quello del programma, nel nostro caso:

   SRC="SOURCE.CODE.+.submodules"

Ho aggiunto una riga per creare la sotto-directory libresprite-1.1 ove salvare i file prodotti dato che l'organizzazione dell'archivio del codice sorgente non consente al comando tar di crearla durante l'estrazione del contenuto, come avviene invece in altri casi:

   mkdir ${PRGNAM}-${VERSION}

La variabile SRC è stata usata durante la decompressione dell'archivio del codice sorgente:

   tar -xvf ${CWD}/${SRC}.tar.gz

Ho incluso una riga che pulisse la cache di CMake prima di avviare la compilazione vera e propria. Il modello non la prevede, ma esperienze passate mi hanno convinto che sia preferibile farlo:

   # Clean cmake cache
   find . -name CMakeCache.txt -exec rm {} \;

Ho impostato i parametri di configurazione corretti per CMake e la cartella di installazione per Ninja:

   mkdir -p build
   cd build
   cmake \
      -DCMAKE_C_FLAGS:STRING="${SLKCFLAGS}" \
      -DCMAKE_CXX_FLAGS:STRING="${SLKCFLAGS}" \
      -DCMAKE_INSTALL_PREFIX=/usr \
      -DLIB_SUFFIX=${LIBDIRSUFFIX} \
      -G Ninja ..
   
   ninja libresprite
   
   DESTDIR=${PKG} ninja install

L'archivio del codice sorgente non contiene pagine man o info, ma include invece alcuni file di testo come documentazione di progetto:

   # No man pages & no info ones
   
   # Copy program documentation into the package
   mkdir -p ${PKG}/usr/doc/${PRGNAM}-${VERSION}
   cp -a \
      ${TMP}/${PRGNAM}-${VERSION}/docs/* \
      ${PKG}/usr/doc/${PRGNAM}-${VERSION}
   cat ${CWD}/${PRGNAM}.SlackBuild > ${PKG}/usr/doc/${PRGNAM}-${VERSION}/${PRGNAM}.SlackBuild

Infine, trattandosi di una applicazione grafica, LibreSprite necessita di alcune icone per le barre ed i menù delle applicazioni dei vari ambienti desktop supportati:

   # Copy some icons for the program
   mkdir -p ${PKG}/usr/share/applications/
   cp ${TMP}/${PRGNAM}-${VERSION}/desktop/libresprite.desktop ${PKG}/usr/share/applications/
   cp -r ${TMP}/${PRGNAM}-${VERSION}/desktop/icons ${PKG}/usr/share/
   mkdir -p ${PKG}/usr/share/pixmaps
   cp ${TMP}/${PRGNAM}-${VERSION}/desktop/icons/hicolor/48x48/apps/libresprite.png ${PKG}/usr/share/pixmaps/

E questo è quanto. Lo script completo è disponibile al seguente collegamento. Una versione modificata opportunamente è stata sottoposta al progetto SlackBuilds.org. Quest'ultima sarà disponibile una volta ultimati i controlli da parte dei membri del progetto. Le due versioni hanno differenze minime e funzionamento pressochè identico.

Usare lo Script SlackBuild

Per compilare LibreSprite mediante lo script bisogna:

  • Scaricare l'archivio SOURCE.CODE.+.submodules.tar.gz in una directory locale della propria Linux box: /usr/src/libresprite-1.1 o /tmp, ad esempio.
  • Copiare lo script libresprite.SlackBuild, il file doinst.sh ed il file slack-desc nella cartella contenente l'archivio precedentemente scaricato.
  • Rendere eseguibile lo script mediante il comando chmod
   chmod u+rx libresprite.SlackBuild
  • Lanciare lo script via shell:
   ./libresprite.SlackBuild

Lo script incomincerà a fare il suo estraendo e compilando il codice sorgente. L'operazione richiederà svariati minuti. Il tempo richiesto varia al variare della dotazione hardware della macchina: RAM, CPU, Hard Disk, ecc. Al termine della compilazione il pacchetto risultante sarà reperibile nella directory /tmp e potrà essere installato mediante comando installpkg:

   installpkg /tmp/libresprite-1.1-x86_64-1_sg.txz

Nell'esempio è stato installato un pacchetto per architettura Amd/Intel a 64 bit. Ultimata l'installazione, che richiede pochi istanti, LibreSprite sarà immediatamente disponibile.

Alcune Schermate del Programma

 

Fig: 1 - Come si presenta il programma.

 

Fig: 2 - Il nuovo tema opzionale.

 

Fig: 3 - Una semplice animazione di vettura 2-D.

 

Fig: 4 - Un frame di un vaso che vola.

 

Fig: 5 - L'animazione di un soldato (Solo i volumi, ma non i dettagli).

 

Fig: 6 - Un esempio di "Onion Skinning".


CONCLUSIONI

Nel corso del presente articolo è stato presentato LibreSprite: un programma di disegno orientato alla pixel art, agli sprite ed alla loro animazione. Il programma è multipiattaforma, gira su Linux, ma non supporta direttamente Slackware Linux o altra distribuzione. È stato proposto uno script di compilazione, illustrandone il contenuto e le modalità d'uso. In conclusione sono state fornite alcune schermate del programma in funzione.


Per commenti, consigli, domande inviate una e-mail all'indirizzo studiosg [chiocciola] giustetti [punto] net.


Link esterni





Lingue: English - Italiano