Determina i flag forniti per i pacchetti installati con homebrew

17

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

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

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

Mi piacerebbe in seguito determinare che per l'installazione homebrew di emacs ho dato i flag --with-glib --with-librsvg e non altri flag.

Test case con pacchetto lua:

Prima di installare il pacchetto, le informazioni mostrano 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

Installa il pacchetto con solo il --with-completion flag.

$ 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
                    
posta Praxeolitic 22.10.2014 - 19:51
fonte

4 risposte

15

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

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

    
risposta data 27.10.2014 - 21:57
fonte
6

C'è un file in /usr/local/Cellar sotto ogni pacchetto chiamato INSTALL_RECEIPT.json , ad es. per gawk :

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

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

brew info --json=v1 <packagename>

per es.

brew info --json=v1 gnuplot

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

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

che mi dice che ho installato gnuplot usando:

brew install --with-qt gnuplot 
    
risposta data 17.02.2016 - 16:59
fonte
4

Un altro utile strumento è homebrew-bundler . Una volta installato tramite brew tap Homebrew/bundle , puoi eseguire brew bundle dump e creerà un file Brewfile che elenca tutti i pacchetti che hai installato insieme a eventuali argomenti aggiuntivi usati per installarli.

    
risposta data 24.02.2016 - 19:23
fonte
3

Ecco una piccola funzione di 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 all'interno di uno script di bash scrivi

 brew_options PKGNAME

dove PKGNAME è il nome del pacchetto homebrew desiderato. Puoi anche eseguire iterazioni su 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

.

    
risposta data 18.07.2016 - 16:06
fonte

Leggi altre domande sui tag