[ RISOLTO ] Bash scripting: codice ostico

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
scartozzo
Packager
Packager
Messaggi: 254
Iscritto il: mar 8 feb 2005, 0:00
Nome Cognome: Flavio Gallucci
Kernel: 3.19
Desktop: fluxbox
Distribuzione: ScarTOzzoLinux
Località: Torino

[ RISOLTO ] Bash scripting: codice ostico

Messaggio da scartozzo »

In un momento di follia ho deciso di compilarmi un sistema LFS.
Attraverso alcuni script bash e il metodo fake install tengo traccia dei pacchetti.
Arrivato alla compilazione del gcc-4.5.1 incontro l'istruzione riportata in calce. In generale mi è chiaro che si tratta di un link simbolico da libgcc.a a libgcc_eh.a, dato che la compilazione, con l'opzione --disable-shared passata al configure, non produce gli effetti desiderati.
Dato che le mie nozioni arrivano alla comprensione di "ln -vs libgcc.a", qualcuno potrebbe aiutarmi a capire la sintassi del comando?
PS. L'obiettivo è linkare la libreria nella directory di fake install (DESTDIR).
Grazie

Codice: Seleziona tutto

ln -vs libgcc.a `$LFS_TGT-gcc -print-libgcc-file-name | \
    sed 's/libgcc/&_eh/'` 

E' semplicemente un modo più raffinato del semplice link simbolico.
Ho trovato riferimento nel manuale gcc-4.5.1.
Non mi sembra si possa modificare il percorso, per il link alla libreria, previsto dal comando.
Comunque grazie.

I riferimenti alla documentazione sono i seguenti
http://lists.diy-linux.org/pipermail/di ... 00556.html
http://gcc.gnu.org/ml/gcc-patches/2005-02/msg00591.html
http://gcc.gnu.org/onlinedocs/gcc-4.5.2 ... ng-Options
Ultima modifica di scartozzo il mar 25 gen 2011, 0:36, modificato 2 volte in totale.

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Bash scripting: codice ostico

Messaggio da targzeta »

Bhé, crea un link simbolico verso un file che è l'output del comando:

Codice: Seleziona tutto

`$LFS_TGT-gcc -print-libgcc-file-name | \
    sed 's/libgcc/&_eh/'`
dove, $LFS_TGT-gcc dovrebbe essere un comando (o meglio, la variabile $LFS_TGT-gcc dovrebbe contenere il nome di un comando, presumibilmente il gcc). Prova a fare:

Codice: Seleziona tutto

gcc -print-libgcc-file-name
quindi l'output viene ridiretto a 'sed' il quale semplicemente sostituisce la stringa 'libgcc' con la stringa 'libgcc_eh'.

Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
scartozzo
Packager
Packager
Messaggi: 254
Iscritto il: mar 8 feb 2005, 0:00
Nome Cognome: Flavio Gallucci
Kernel: 3.19
Desktop: fluxbox
Distribuzione: ScarTOzzoLinux
Località: Torino

Re: Bash scripting: codice ostico

Messaggio da scartozzo »

"LFS_TGT=$(uname -m)-lfs-linux-gnu" dovrebbe essere "la target triplet".
Al momento del comando make install sono ancora all'interno della directory dei sorgenti.
Ora, data la mia ignoranza,
1) la libreria libgcc.a dovrebbe essere installata in "/tools//lib/gcc/i686-lfs-linux-gnu/4.5.1"
ed il comando $LFS_TGT-gcc -print-libgcc-file-name restituisce l'output seguente:
/mnt/flinux/tools/bin/../lib/gcc/i686-lfs-linux-gnu/4.5.1/libgcc.a
(non mi è chiaro il significato dei puntini tra bin e lib ed il percorso della libreria in questione è il seguente /tools/lib/gcc/i686-lfs-linux-gnu/4.5.1/libgcc.a)

2) Data l'installazione con l'opzione DESTDIR come faccio a modificare il comando al fine di creare il link all'interno della "falsa installazione"?
Risolverei se il comando equivalesse ad un semplice "ls -sv libgcc.a libgcc_eh.a".

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: [ RISOLTO ] Bash scripting: codice ostico

Messaggio da conraid »

scartozzo ha scritto:"LFS_TGT=$(uname -m)-lfs-linux-gnu" dovrebbe essere "la target triplet".
Al momento del comando make install sono ancora all'interno della directory dei sorgenti.
Ora, data la mia ignoranza,
1) la libreria libgcc.a dovrebbe essere installata in "/tools//lib/gcc/i686-lfs-linux-gnu/4.5.1"
ed il comando $LFS_TGT-gcc -print-libgcc-file-name restituisce l'output seguente:
/mnt/flinux/tools/bin/../lib/gcc/i686-lfs-linux-gnu/4.5.1/libgcc.a
(non mi è chiaro il significato dei puntini tra bin e lib ed il percorso della libreria in questione è il seguente /tools/lib/gcc/i686-lfs-linux-gnu/4.5.1/libgcc.a)

2) Data l'installazione con l'opzione DESTDIR come faccio a modificare il comando al fine di creare il link all'interno della "falsa installazione"?
Risolverei se il comando equivalesse ad un semplice "ls -sv libgcc.a libgcc_eh.a".

1) i puntini servono proprio per dare il percorso giusto, nel senso che la variabile punta a bin, e siccome sai che hai bisogno di lib effettuano questo trucco per usare la variabile e posizionarsi in lib
bin/../lib
è come scrivere
lib

2) no, non risolveresti. è un procedimento simile a quando fai i link simbolici all'interno di uno slackbuild, anche se "forse" potresti fare prima un cd verso la directory interessata
cd /mnt/flinux/tools/lib/gcc/i686-lfs-linux-gnu/4.5.1/
e poi fare quel link simbolico, ma il comando ti da già il percorso completo della libreria quindi fai prima a fare così

Rispondi