Homebrew: como alternar entre as versões do GCC `gcc49` e` gcc`?

3

Eu instintivamente desinstalei o GCC 4.9 depois brew upgrade para o GCC 5. No entanto, eu preciso das duas versões e preciso ser capaz de alternar entre elas. Eu pensei que poderia apenas fazer brew switch 4.9.2 mas a versão antiga do GCC foi instalada na pasta Cellar/gcc49/4.9.2 ao invés de Cellar/gcc/4.9.2então o Homebrew não sabe onde encontrar a versão antiga.

Como posso forçar o Homebrew a instalar as duas versões em Cellar/gcc?

Ou seja, eu tenho:

brew list --versions gcc
# gcc 5.1.0
brew list --versions gcc49
# gcc49 4.9.2_1

Mas gostaria de ter:

brew list --versions gcc
# gcc 5.1.0 4.9.2_1
shadowtalker
fonte

Respostas:

3

Você não pode, essas são fórmulas diferentes, e o Homebrew não permite que você instale uma versão anterior de uma fórmula.

A solução é remover gcc, então volte na história do Homebrew (lembre-se que é um repositório Git), pegue o gcc como era antes da atualização 5.1.0, instalá-lo e atualizar gcc para obter a versão mais recente.

O 5.1.0 gcc atualização foi feita em Homebrew cometer 9cf3d4da1148c0a0d2f42c2fbe75f9a557339bab:

$ cd $(brew --prefix)
$ git show -s 9cf3d4da1148c0a0d2f42c2fbe75f9a557339bab
commit 9cf3d4da1148c0a0d2f42c2fbe75f9a557339bab
Author: David Christenson <[email protected]>
Date:   Sat May 2 18:58:17 2015 -0600

    gcc 5.1.0

    Update to latest stable release, add option and patch for JIT, remove CLooG dependency,
    refactor language selection, add HEAD, use HTTPS mirror.

Você precisa fazer o checkout do commit pai:

$ git checkout 9cf3d4da1148c0a0d2f42c2fbe75f9a557339bab^

Então pegue o gcc fórmula e salve-o em algum lugar:

$ brew cat gcc > /tmp/gcc.rb

Se você é preguiçoso eu coloco esta fórmula online aqui . Agora você pode ir De volta para o Futuro :

$ git checkout master

Certifique-se de ter removido o atual gcc:

$ brew rm gcc

Agora instale a versão 4.9, a partir da sua cópia local:

$ brew install /tmp/gcc.rb

Ou da minha cópia on-line:

$ brew install https://gist.githubusercontent.com/bfontaine/eacd18e2c413005a7526/raw/320a73fc6e1bbf0009a08e6bd90e9d32c3409007/gcc.rb

Agora você deve ter uma instalação do GCC 4.9 funcionando. Agora, atualize para obter o 5.2:

$ brew upgrade gcc

Feito.

$ brew ls --versions gcc
gcc 4.9.2_1 5.2.0
bfontaine
fonte
Que pena. Existe uma maneira de proteger a versão antiga de ser removida novamente?
shadowtalker
Homebrew não vai removê-lo, a menos que você diga. Então não, não há como protegê-lo.
bfontaine
Eu quero dizer protegê-lo de brew cleanup, que é o que removeu em primeiro lugar.
shadowtalker
Eu abri um problema para isso aqui: github.com/Homebrew/homebrew/issues/42039
bfontaine
3

Você também pode instalar o gcc49 e o gcc5 homebrew/versions:

brew tap homebrew/versions
brew install gcc49 gcc5

Você pode então referir-se a eles explicitamente gcc-4.9 e gcc-5 (ou exportando variáveis ​​de ambiente como CC, CXX etc)

Sam Brightman
fonte
Eu percebo agora que este é o único caminho, mas eu estava bem explícito na minha pergunta que eu não queria fazer desse jeito.
shadowtalker
1
Eu não vejo isso na sua pergunta. Você diz que precisa das duas versões e de poder alternar, o que isso permite (embora não usar brew switch; você poderia ter um pequeno alias para fazer isso).
Sam Brightman