# Passaggio da gcc 3.4.6 e 4.1.1

## stblack

Avrei bisogno del vs aiuto per riuscire a completare la migrazione da gcc 3.4.6 a gcc 4.1.1.

Seguendo il link [1] sono assirrivato al punto più lungo e snervante : emerge -eav world.

dopo 2 giorni e mezzo in cui ha ricompilato 801 pacchetti su 845 si è bloccato su :

```
>>> Emerging (801 of 845) games-strategy/freecol-0.4.0 to /

 * freecol-0.4.0-src.tar.gz MD5 ;-) ...                                                                                           [ ok ]

 * freecol-0.4.0-src.tar.gz RMD160 ;-) ...                                                                                        [ ok ]

 * freecol-0.4.0-src.tar.gz SHA1 ;-) ...                                                                                          [ ok ]

 * freecol-0.4.0-src.tar.gz SHA256 ;-) ...                                                                                        [ ok ]

 * freecol-0.4.0-src.tar.gz size ;-) ...                                                                                          [ ok ]

 * checking ebuild checksums ;-) ...                                                                                              [ ok ]

 * checking auxfile checksums ;-) ...                                                                                             [ ok ]

 * checking miscfile checksums ;-) ...                                                                                            [ ok ]

 * checking freecol-0.4.0-src.tar.gz ;-) ...                                                                                      [ ok ]

>>> Unpacking source...

>>> Unpacking freecol-0.4.0-src.tar.gz to /var/tmp/portage/freecol-0.4.0/work

>>> Source unpacked.

>>> Compiling source in /var/tmp/portage/freecol-0.4.0/work/freecol ...

Unable to locate tools.jar. Expected to find it in /opt/blackdown-jre-1.4.2.03/lib/tools.jar

Buildfile: build.xml

init:

compile:

    [mkdir] Created dir: /var/tmp/portage/freecol-0.4.0/work/freecol/src/classes

    [javac] Compiling 182 source files to /var/tmp/portage/freecol-0.4.0/work/freecol/src/classes

BUILD FAILED

/var/tmp/portage/freecol-0.4.0/work/freecol/build.xml:25: Unable to find a javac compiler;

com.sun.tools.javac.Main is not on the classpath.

Perhaps JAVA_HOME does not point to the JDK

Total time: 1 second

!!! ERROR: games-strategy/freecol-0.4.0 failed.

Call stack:

  ebuild.sh, line 1546:   Called dyn_compile

  ebuild.sh, line 937:   Called src_compile

  freecol-0.4.0.ebuild, line 43:   Called die

!!! ant failed

!!! If you need support, post the topmost build error, and the call stack if relevant.
```

Ora oltre a questo problema c'è che per errore ho fatto partire un altro emerge, per cui un emerge --resume non riesce ad andare a buon fine. Scartando completamente la possibilità di rifare da capo la ricompilazione di 845 pacchetti mi aiutate a veniene fuori?

Grazie

Stblack

[1] http://www.gentoo.org/doc/en/gcc-upgrading.xml

----------

## funkoolow

uhm, ho fatto esattamente la stessa cosa due giorni fa e personalmente (e sottolineo personalmente), potrei sbilanciarmi al massimo su due opzioni:

1) nel caso in cui avessi (incredibilmente?) provveduto a segnarti la lista di pacchetti ancora da compilare:

```
emerge -O [nomepacchetto]
```

 uno per uno. Ah, buon divertimento  :Rolling Eyes: 

2) lanci un bel revdep-rebuild che *CREDO* sia in grado di capire che pacchetto ha bisogno di essere riemerso causa dipendenza inversa da pacchetto già ricompilato col gcc-4.1.1.

Personalmente, metterei una pietra sopra la cazzata del nuovo emerge e ripartirei per bene con un emerge -e world, tanto per fare una cosa come si deve e non avere un sistema sistemato *EVENTUALMENTE* a metà.

Ma forse sto diventando troppo integralista e il revdep-rebuild va più che bene  :Razz: 

----------

## stblack

Grazie per la risposta. Mi consola il fatto di non essere l'unico ad avere avuto questo problema. Incredibilmente ho l'elenco i 845 pacchetti che stava emergendo per cui incrociando i dati con l'emerge.log anche la prima opzione è fattibile.

Proverò con un revdep-rebuild e poi posterò il risultato, perchè rifare da capo tutto dorrei che fosse l'ultima possibilità. 

Stefano

----------

## stblack

No, il revdep non la riemerso i pacchetti mancanti ma soltanto uno (transcode).

Ho provato anche con emerge -O ma non ha fatto la rimozione della vrsione compilata con il gcc 3.4.6 come ho visto fare a emerge -e.

Come si può fare tale rimozione a mano?

Grazie

Stefano

----------

## Dece

Onestamente mi pare che il problema sia un altro...

```
Unable to locate tools.jar. Expected to find it in /opt/blackdown-jre-1.4.2.03/lib/tools.jar

Buildfile: build.xml

...

BUILD FAILED

/var/tmp/portage/freecol-0.4.0/work/freecol/build.xml:25: Unable to find a javac compiler;

com.sun.tools.javac.Main is not on the classpath.

Perhaps JAVA_HOME does not point to the JDK 
```

hai seguito questa guida per l'upgrade di Java?

http://www.gentoo.org/proj/en/java/java-upgrade.xml

http://www.gentoo.org/doc/en/java.xml

----------

## funkoolow

la flag -O di emerge dice al comando di emergere solo il pacchetto specificato senza nessuna dipendenza.

Accoppiato alla flag -e (e qui mi scuso, non avevo specificato) ti permette di ricompilarti uno specifico pacchetto senza tutte le relative dipendenze, quindi, dato che come dici hai la lista di tutti i pacchetti che il tuo emerge -e world lavorerebbe + la lista di quelli già ricompilati, puoi in teoria fare:

```
emerge -eO nomepacchetto
```

e ti riemerge solo nomepacchetto. Ora, stando a quanto dici:

 *Quote:*   

> [...]dopo 2 giorni e mezzo in cui ha ricompilato 801 pacchetti su 845[...]

 

se hai modo/tempo/voglia di ricavarti il comando:

```
emerge -eO pacchetto1 pacchetto2 pacchetto3 [...] pacchetto44
```

secondo il mio modesto parere, la cosa dovrebbe funzionare. Io la flag -O l'ho usata per compilare i pacchetti che per qualche motivo fallivano: me li sono segnati e, dopo aver completato l'emerge -e world aggiungendo  --resume --skipfirst ad ogni interruzione, ho rifinito il tutto grazie all'opzione -O pacchetto per pacchetto di cui sopra.

----------

## stblack

Già, infatto quel problema è già risolto e riemergendo freecol è andato tutto bene. 

Mi resta da capire come rimuovere le versioni compilate con il vecchio gcc 3.4.6 come fa emerge -e dopo avere ricompilato con il 4.1.1

Grazie

Stefano

----------

## stblack

L'ultimo messaggio di funkoolow mi chiarisce un po' di più, anche se io mi sto convincendo che un semplice 

```
emerge -1 nomepacchetto1 nomepacchetto2 ....
```

 riemerge i pacchetto che mi servono e mette a posto tutto. Che ne dite ?

Stefano

----------

## Onip

effettivamente anche secondo me basta un bel

```
# emerge -1 <lista_pacchetti>
```

Byez

----------

## funkoolow

boh, non so valutare: -1 emerge il singolo pacchetto e non lo inserisce nel file world, -eO compila come se si stesse emergendo il pacchetto per la prima volta senza le necessare dipendenze.

Certo, l'effetto di -eO è concettualmente identico a -1, dato che entrambi emergono un solo pacchetto alla volta, ma idealmente mi piace pensare che sia più adatto l'emerge -eO, poichè originariamente si trattava di un emerge -e world successivamente da rifinire pacchetto per pacchetto senza le dipendenze (che sono già state affrontate portando a termine l'emerge -e world con l'aggiunta di --resume --skipfirst).

Insomma, un pò il classico "do it your way, but do it"  :Rolling Eyes: 

----------

## Flameeyes

emerge -eO non ha molto senso, -e richiede un emptytree, -O salta _tutte_ le dipendenze, quindi hai l'effetto di un emerge -O.

A differenza di emerge -1, emerge -eO inserirà il pacchetto nel worldfile, inquinandolo con pacchetti che in teoria là non dovrebbero esserci, quindi lo sconsiglierei.

Quello che cercavate dovrebbe essere emerge -O1 invece.

----------

## GiRa

A me sembra che a chi ha scritto il primo post serva un 

```
emerge --resume --skipfirst
```

e a chi ha scritto che -e emerge solo quel pacchetto una bella lettura al man.

----------

## funkoolow

 *GiRa wrote:*   

> [...] e a chi ha scritto che -e emerge solo quel pacchetto una bella lettura al man.

 

[polemica]

Con la dovuta umiltà e disponibilità ad essere sempre pronto ad imparare che credo non dovrebbe mai mancare in un post, faccio presente che non mi risulta di legger scritto da nessuna parte "che -e emerge solo quel pacchetto".

Più nel dettaglio, se così fosse stato (male) interpretato uno qualunque dei miei interventi, consiglierei a chi ha postato tale suggerimento, di provare prima a leggere per bene i post facendo attenzione alle diciture esatte, e forse solo successivamente arrivare a proporre qualsivoglia lettura a chicchessia

 :Rolling Eyes: 

[/polemica]

Chiuso il tag di cui sopra, torno a chiedermi: che problema c'è se usando -e1 i pacchetti vengono inseriti nel world file? non è forse vero anzi che DOVREBBERO STARCI, dato che se l'emerge -e world iniziale non si fosse interrotto per incidenti di compilazione, ce li avrebbe inseriti lui stesso (e anzi a dirla tutta, i pacchetti già erano nel world dato che si stava ricompilando per passaggio di stato da un gcc all'altro)?

----------

## Flameeyes

[quote="funkoolow"] *GiRa wrote:*   

> Chiuso il tag di cui sopra, torno a chiedermi: che problema c'è se usando -e1 i pacchetti vengono inseriti nel world file? non è forse vero anzi che DOVREBBERO STARCI, dato che se l'emerge -e world iniziale non si fosse interrotto per incidenti di compilazione, ce li avrebbe inseriti lui stesso (e anzi a dirla tutta, i pacchetti già erano nel world dato che si stava ricompilando per passaggio di stato da un gcc all'altro)?

 

Allora, intanto -e1 non li mette nel worldfile -eO li mette.

E no, -e non mette tutti i pacchetti che installa nel worldfile, giustamente.

Se io installo un'applicazione che dipende dalle librerie di gnome (brr), quell'applicazione starà nel worldfile, le librerie no. Quando la toglierò (perché la toglierò essendo roba di gnome  :Razz: ) emerge --depclean rimuoverà le librerie di gnome perché sono installate e non nel worldfile.

Se tutto fosse segnato nel worldfile, sarebbe impossibile rimuovere i pacchetti inutilizzati (e sarebbe una cosa tragica).

----------

## funkoolow

 *Flameeyes wrote:*   

>  *funkoolow wrote:*   Chiuso il tag di cui sopra, torno a chiedermi: che problema c'è se usando -e1 i pacchetti vengono inseriti nel world file? non è forse vero anzi che DOVREBBERO STARCI, dato che se l'emerge -e world iniziale non si fosse interrotto per incidenti di compilazione, ce li avrebbe inseriti lui stesso (e anzi a dirla tutta, i pacchetti già erano nel world dato che si stava ricompilando per passaggio di stato da un gcc all'altro)? 
> 
> Allora, intanto -e1 non li mette nel worldfile -eO li mette.
> 
> E no, -e non mette tutti i pacchetti che installa nel worldfile, giustamente.
> ...

 

Allora dov'è che viene deciso quando un pacchetto viene o meno inserito nel world?

perchè se viene stabilito nell'ebuild ed emerge -e world lo mette o meno, mi viene da pensare che anche un emerge -eO dovrebbe comportarsi di conseguenza che ci sia o meno la "O" dell'only deps (dato che cmq c'è la flag "e" prima) a meno che proprio la "O" non annulli l'eventuale comportamento stabilito nell'ebuild e metta prioritariamente il pacchetto nel world (a netta differenza dell' "1" del oneshot, evidentemente)

Non so se ho spiegato bene il mio dubbio  :Rolling Eyes: 

----------

## GiRa

@funkoolow: per riemergere solo un pacchetto non serve combinare le opzioni come hai detto tu, basa 

```
emerge nomepacchetto
```

----------

## Luca89

 *funkoolow wrote:*   

> Allora dov'è che viene deciso quando un pacchetto viene o meno inserito nel world?

 

Viene inserito nel world il pacchetto che specifichi quando dai:

```
# emerge nomepacchetto
```

A meno che non usi opzioni che modificano questo comportamento.

----------

## GiRa

Lo so, si parlava di ricompilare senza emergere le dipendenze.

Se non voglio inserire il file nel world uso -1.

----------

