Subito qualche aggiornamento, ho tolto il ciclo if che scaricava i sorgenti all'inizio dello script
Puoi anche lasciarlo ma devi inizializzare le variabili prima di utilizzarle, e poi la condizione e' da invertire (!) altrimenti scarichi i sorgenti solo se esistono gia'
mi ha riportato 2 volte questo warning però:
Codice: Seleziona tutto
configure: WARNING: you should use --build, --host, --target
dovuto ad un "\" di troppo alla fine della lista di SLKCFLAGS.
Con quel "\" di troppo hai passato "make" come parametro al configure, e il configure lo ha interpretato come "system type".
Il "system type" andrebbe preceduto da una delle opzioni --build, --host o --target e questo ha causato il warning.
Approposito, e' la prima volta che vedo uno SlackBuild che usa le opzioni --build o --host. Perche' nessuno lo fa, nonostante il warning? (SlackBuild ufficiali compresi)
Un'altra cosa, ho visto che gli SlackBuild di Loris (e derivati) usano $CHOST-slackware-linux al posto di ARCH... In effetti se ARCH e' diverso da i486 il configure non trova nessuno strumento specifico per il "system type" indicato e usa gli strumenti generici, ma cosa comporta questo, e come mai gli SlackBuild ufficiali non lo fanno?
l'unica stranezza è data dal fatto che mi riporta un file di lunghezza 0, precisamente
Codice: Seleziona tutto
WARNING: zero length file ./usr/doc/prozilla-2.0.4/docs/Makefile
E' vuoto anche nel sorgente, ti conviene copiare solo "FAQ" e non l'intera directory "docs":
Codice: Seleziona tutto
cp -a CREDITS COPYING ChangeLog README TODO docs/FAQ $PKG/usr/doc/$APP-$VERSION
Probabilmente non vale la pena di spaccarsi la testa su queste cose che vanno viste caso per caso, ma se il
make install comprime le pagine man e poi crea dei link, questa istruzione te li distrugge:
Codice: Seleziona tutto
for i in `find . -type l` ; do ln -s $( readlink $i ).gz $i.gz; rm $i; done
Io aggiungerei una condizione al find:
Codice: Seleziona tutto
for i in `find . -type l ! -name "*.gz"`; do ln -s $(readlink $i).gz $i.gz; rm $i; done
Ancora, per renderlo più portabile questo (ed altri simili):
dovrebbe essere riscritto come:
versioni precedenti della sh accettano questa scrittura, mentre la tua potrebbero non capirla (anche se fin ora non ho mai incontrato una sh stile bash che non capisse la tua sintassi).
Ho guardato e riguardato gli SlackBuild ufficiali ma non c'e' stato verso di capire con che criterio quelli decidono di usare o no le graffe, aiutatemi voi, per esempio:
Codice: Seleziona tutto
cat $page | gzip -9c > $PKG/usr/man/man1/$page.gz
makepkg -l y -c n ../${PKGNAM}-$VERSION-$ARCH-$BUILD.tgz
Perche' proprio PKGNAM e' tra parentesi? Evidentemente non e' ne per il trattino che segue ne per lo slash che precede... Boh, piuttosto che mettere parentesi a caso preferisco non metterle.
Ancora, fai i controlli su quasi tutti i comandi ( || exit) ma non lo fai per il configure. Secondo me se i controlli non li fai va bene comunque.
Io consiglio di mettere gli
exit almeno ai principali cambi di directory per non rischiare di fare cose scomode nella directory sbagliata (tipo un
chown -R root:root . in
/tmp o peggio).
In alternativa si puo' usare
set -e per uscire automaticamente ad ogni errore, ma poi bisogna preoccuparsi del problema opposto (
|| true).
Il warning è rimasto, ma al fine dell'installazione del programma non mi ha dato problemi...
Sei sicuro di avere ancora quello stesso warning? A me non capita, non e' che hai lasciato qualche spazio dopo i "\"?
Gli unici warning che ottengo io sono questi:
Codice: Seleziona tutto
configure: WARNING: dlfcn.h: accepted by the compiler, rejected by the preprocessor!
configure: WARNING: dlfcn.h: proceeding with the compiler's result
Questo è uno dei punti in cui non sono riuscito a capire bene il comando
Codice: Seleziona tutto
find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip unneeded 2> /dev/null
Sono comandi che girano in parallelo e ognuno passa il proprio output al successivo:
find . visita ricorsivamente la directory corrente (.) e produce come output una lista di tutti i file che trova, uno per linea;
xargs file per ogni
linea lancia il comando
file <linea> e produce come output la concatenazione dell'output di tutti i comandi "file" eseguiti;
grep "executable" lascia passare solo le linee che contengono la parola
"executable"
grep ELF lascia passare solo le linee che contengono la parola
ELF
cut -f 1 -d : lascia passare solo la parte di ogni linea che sta prima dei ":" in questo modo estrae i nomi dei file dalle linee rimaste;
xargs strip --strip unneeded per ogni
linea lancia il comando
strip --strip unneeded <linea>;
file analizza e classifica i file e stampa una descrizione del loro tipo;
strip ripulisce i file oggetto dai simboli di debug e altro per ridurne le dimensioni;
il tutto non fa altro che strippare tutti i file che hanno nella loro descrizione di tipo sia la parola
"executable" che la parola
ELF
spero di essermi fatto capire...
Invece di nascondere lo standard error (che puo' tornare utile in caso di errori insoliti) si puo' passare agli
xargs l'opzione
-r per evitare che
strip venga lanciato a vuoto.
Alcuni usano un comando dello stesso tipo per
"current ar archive", altri come quelli ufficiali usano piu' spesso qualcosa come
strip -g $PKG/usr/lib/*.a, altri invece tralasciano, voi cosa consigliate?