Pagina 1 di 1

[RISOLTO] Correzione di un errore nel sorgente di GDAL per rendere possibile l'installazione dallo SB sulla current

Inviato: lun 8 apr 2019, 22:25
da gian_d
Non so se sia attinente agli argomenti del forum, ma avrei una segnalazione da fare a Ponce. Sto installando gqis e tutte le dipendenze dagli Slackbuild usando il repository dei SB per la current su GitHub, come suggerito dallo stesso Ponce.
La compilazione dei sorgenti di GDAL 2.2.4 ha dato però un errore causato da poppler, in quanto il codice di un file cpp è incompatibile con la nuova versione di poppler presente sulla current nella dichiarazione (credo) di una costante.
Cercando in rete ho trovato un contesto simile, ma non ricordo l'indirizzo, credo sia in un forum attinente a GDAL. Chi ha risposto al quesito ha detto che il bug è stato corretto nelle versioni successive (da GDAL 2.3.0)
Ho provato a installare la 2.3.0 modificando l'impostazione della versione nello SlackBuild, ma l'errore persisteva perché probabilmente lo SlackBuild va integrato con l'applicazione di una patch.

Detto questo, dal momento che non so come impostare una patch, ho aggirato l'ostacolo in modo poco ortodosso, scompattando l'archivio tar.xz dei sorgenti di GDAL 2.2.4 e modificando direttamente la riga specifica del codice del file incriminato. Poi ho ricreato il tar compresso con xz e ho rilanciato lo SlackBuild. È andato a buon fine! Peraltro ho integrato lo SB con la specifica --with-ecw=/usr/local \ per permettere la visualizzazione dei file in formato JPEG 2000 e nel formato proprietario ECW usando libecwj2 3.3, una vecchia libreria del 2006, l'ultima open source, che ancora è disponibile in un repository in rete.

Venendo al dunque, il file sorgente incriminato è pdfobject.cpp presente nell'archivio scompattato nel percorso gdal-2.2.4/frmts/pdf/.

Il sorgente va modificato sostituendo la riga 1058

Codice: Seleziona tutto

GooString* gooString = m_po->getString();
con la riga

Codice: Seleziona tutto

const GooString* gooString = m_po->getString();
Volendo si possono mantenere entrambe le righe in una condizione if per rendere la patch retrocompatibile con le vecchie versioni di poppler, ma non so fino a quale versione.

Questo è quanto, spero di essere stato chiaro.

Re: Correzione di un errore nel sorgente di GDAL per rendere possibile l'installazione dallo SlackBuild sulla current

Inviato: mar 9 apr 2019, 7:21
da conraid
Questo lo puoi fare in due modi:
1) con diff.
Metti i sorgenti in due directory diverse (per esempio a e b) e poi fai una cosa tipo

Codice: Seleziona tutto

# diff -Naupr a b > nome.patch
metti il file nome.patch dove c'è lo slackbuild e dentro lo slackbuild poi dai

Codice: Seleziona tutto

patch -p1 -i $CWD/nome.patch
2) con sed
Dentro lo slackbuild prima del configure, o quel che c'è, metti una cosa tipo

Codice: Seleziona tutto

sed '/gooString = m_po->getString/s/^GooString/const GooString/' -i pathfile/nomefile
ma controlla bene che l'ho scritta così di getto

Re: Correzione di un errore nel sorgente di GDAL per rendere possibile l'installazione dallo SlackBuild sulla current

Inviato: mar 9 apr 2019, 9:04
da ponce
grazie mille della segnalazione, Giancarlo!

cercando un po' nel loro repository git ho trovato la patch che corregge la compatibilita' con la versione di poppler in current (ci sono pure quelle per le versioni superiori ed e' molto probabile che andranno applicate anche quelle presto).

https://github.com/OSGeo/gdal/commit/12 ... 41ea.patch

https://github.com/OSGeo/gdal/commits/m ... object.cpp

Re: Correzione di un errore nel sorgente di GDAL per rendere possibile l'installazione dallo SlackBuild sulla current

Inviato: mar 9 apr 2019, 18:14
da gian_d
@ ponce: sì il codice della patch è proprio quello, solo che io l'avevo trovato in un forum. Comunque l'importate è trovarla per chi si occupa degli aggiornamenti dello slackbuild
@ conraid: grazie per la dritta, mi servirà in futuro nel caso dovessi trovare problemi simili. Per adesso avevo già risolto a modo mio e l'importante è che abbia funzionato

Metto il [risolto] anche se in questo caso si trattava solo di una segnalazione