Determina i flag forniti per i pacchetti installati con homebrew


17

C'è un modo per verificare quali flag sono stati dati quando è stato installato un pacchetto con homebrew?

Ad esempio, la formula di emacs ha un numero assurdo di flag. Se avessi fatto

brew install emacs --with-glib --with-librsvg

Vorrei determinare in seguito che per l'installazione homebrew di emacs ho dato le bandiere --with-glib --with-librsvge non altre bandiere.

Caso di prova con pacchetto lua:

Prima di installare il pacchetto, info mostra tutte le opzioni.

$ brew info lua
lua: stable 5.2.3 (bottled)
http://www.lua.org/
Not installed
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/lua.rb
==> Options
--universal
    Build a universal binary
--with-completion
    Enables advanced readline support
--without-sigaction
    Revert to ANSI signal instead of improved POSIX sigaction

Installo il pacchetto con solo la --with-completionbandiera.

$ brew install lua --with-completion
==> Downloading http://www.lua.org/ftp/lua-5.2.3.tar.gz
######################################################################## 100.0%
==> Downloading http://luajit.org/patches/lua-5.2.0-advanced_readline.patch
######################################################################## 100.0%
==> Downloading http://lua-users.org/files/wiki_insecure/power_patches/5.2/lua-5
######################################################################## 100.0%
==> Patching
patching file Makefile
patching file src/Makefile
patching file src/lua.c
Hunk #1 succeeded at 231 (offset -5 lines).
Hunk #2 succeeded at 559 (offset -4 lines).
Hunk #3 succeeded at 575 (offset -4 lines).
patching file src/lua.c
==> make macosx INSTALL_TOP=/usr/local/Cellar/lua/5.2.3_1 INSTALL_MAN=/usr/local
==> make install INSTALL_TOP=/usr/local/Cellar/lua/5.2.3_1 INSTALL_MAN=/usr/loca
🍺  /usr/local/Cellar/lua/5.2.3_1: 13 files, 312K, built in 6 seconds

Dopo aver installato il pacchetto, le informazioni mostrano tutte le opzioni, comprese quelle che non ho usato. Il comando riconosce che il pacchetto è stato creato dal sorgente e non versato da una bottiglia.

$ brew info lua
lua: stable 5.2.3 (bottled)
http://www.lua.org/
/usr/local/Cellar/lua/5.2.3_1 (13 files, 312K) *
  Built from source with: --with-completion
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/lua.rb
==> Options
--universal
    Build a universal binary
--with-completion
    Enables advanced readline support
--without-sigaction
    Revert to ANSI signal instead of improved POSIX sigaction

Risposte:


15

Quando un pacchetto viene creato dal sorgente, i flag che sono stati usati per costruire vengono mostrati quando lo fai brew info <package>.

In questo caso: brew info emacs | grep "Built from source"


L'output delle informazioni sulla birra elenca sempre tutte le opzioni disponibili per la formula, non le opzioni utilizzate se il pacchetto è stato installato.
Prassolitico,

1
Non è vero. Le informazioni specificano se il pacchetto è stato installato da una bottiglia o creato dalla fonte e se è stato creato dalla fonte mostra i flag che sono stati usati.
André,

OP modificato con un esempio in cui, per quanto ne so, le informazioni non specificano i flag utilizzati per un pacchetto creato dall'origine.
Prassolitico

2
Oh oops, lo vedo e il tuo comando grep ha senso ora.
Prassolitico

6

/usr/local/CellarSotto ogni pacchetto viene chiamato un file INSTALL_RECEIPT.json, ad esempio per gawk:

/usr/local/Cellar/gawk/4.1.3/INSTALL_RECEIPT.json

che definisce come è stato installato il pacchetto. Penso che il modo corretto di accedervi sia con

brew info --json=v1 <packagename>

per esempio

brew info --json=v1 gnuplot

Questo sputa un sacco di roba, ma se lo invii tramite jq(Processore JSON - facilmente disponibile tramite homebrew) puoi selezionare le opzioni che hai usato per installare il pacchetto in questo modo (controllando il gnuplotpacchetto):

brew info --json=v1 gnuplot | jq '.[].installed[0].used_options'
[
    "--with-qt"
]

che mi dice che ho installato gnuplotusando:

brew install --with-qt gnuplot 

Questa dovrebbe essere la risposta.
Jacob Degeling,

for package in $(brew list); do echo -n "brew install $package "; for item in $(brew info --json=v1 $package | jq -r '.[0].installed[0].used_options | .[]'); do echo -n "$item "; done; echo ; done 2>/dev/null può essere utilizzato per generare un elenco di comandi di installazione brew che è possibile utilizzare altrove.
Sankalp,

4

Un altro strumento utile è homebrew-bundler. Una volta installato tramite brew tap Homebrew/bundle, è possibile eseguire brew bundle dumpe verrà creato un file Brewfile che elenca tutti i pacchetti installati insieme a eventuali argomenti aggiuntivi utilizzati per installarli.


Questa è davvero una bella opzione. Inoltre, modificarlo Brewfilee controllarlo nel repository dotfiles semplifica la "configurazione" di nuove macchine. Tuttavia, elenca tutti i pacchetti comprese tutte le dipendenze. Attualmente sto analizzando l'elenco da un brew leaveselenco che elenca solo i pacchetti installati di livello superiore.
eduncan911,

3

Ecco una piccola funzione bash che restituisce i flag indipendentemente dal fatto che il pacchetto sia stato creato dal sorgente o meno.

function brew_options()
{
    [ "$#" -ne 1 ] && >&2 echo -e "$FUNCNAME requires only 1 option, the package name" && return 1

    local item=$1
    local opts

    ## Check if package installed
    [ -n "$(brew ls --versions $item)" ] || ( >&2 echo -e "$item is not installed" && return 1 )

    set -o pipefail

    ## Get options if built from source
    if ! opts="$(brew info $item | grep 'Built from source with:' | sed 's/^[ \t]*Built from source with:/ /g; s/\,/ /g')" ; then
        # If not built from source, get options from brew metadata
        opts="$(brew info --json=v1 $item | jq -ec '.[].installed[0].used_options' | awk '{print substr($0, 2, length($0) - 2)}' | sed 's/,/ /g;s/"//g')"
    fi

    ## If we're able to get options and its just not spaces echo it 
    if [ "$?" -eq 0 ] && [[ ! -z "${opts// }" ]]; then
        echo "$opts"
    fi

    set +o pipefail

}

Per usare questa funzione bash in uno script bash scrivere

 brew_options PKGNAME

dove si PKGNAMEtrova il nome del pacchetto homebrew desiderato. Puoi anche scorrere tutti i pacchetti homebrew installati all'interno di uno script bash come

 # Command to generate install script
 PKGS=$(brew list)

 # iterate through all packges
 for PKG in $PKGS; do

   echo $PKG `brew_options $PKG`

 done

.


nota di depencency: jqprocessore JSON da riga di comando
l --marc l
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.