Określ flagi, które zostały podane dla pakietów zainstalowanych z homebrew

17

Czy istnieje sposób, aby sprawdzić, jakie flagi zostały podane, gdy pakiet został zainstalowany z Homebrew?

Na przykład formuła emacs ma absurdalną liczbę flag. Gdybym to zrobił

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

Chciałbym później ustalić, że dla domowej instalacji emacsa podałem flagi, --with-glib --with-librsvga nie inne flagi.

Walizka testowa z pakietem lua:

Przed zainstalowaniem pakietu informacje pokazują wszystkie opcje.

$ 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

Instaluję pakiet tylko z --with-completionflagą.

$ 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

Po zainstalowaniu pakietu informacje pokazują wszystkie opcje, w tym te, których nie użyłem. Polecenie potwierdza, że ​​paczka została zbudowana ze źródła i nie została wylana z butelki.

$ 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
Praxeolitic
źródło

Odpowiedzi:

15

Gdy pakiet jest budowany ze źródła, flagi, które zostały użyte do kompilacji, są wyświetlane, gdy to robisz brew info <package>.

W tym przypadku: brew info emacs | grep "Built from source"

André
źródło
Dane wyjściowe informacji o naparach zawsze zawierają wszystkie dostępne opcje formuły, a nie opcje używane, jeśli pakiet został zainstalowany.
Praxeolitic
1
To nieprawda. Informacje określają, czy pakiet został zainstalowany z butelki, czy zbudowany ze źródła, a jeśli został zbudowany ze źródła, pokazuje użyte flagi.
André
Edytowano OP z przykładem, w którym, o ile mogę stwierdzić, informacje nie określają flag używanych dla pakietu zbudowanego ze źródła.
Praxeolitic
2
Ojej, widzę to, a twoje polecenie grep ma teraz sens.
Praxeolitic
6

/usr/local/CellarPod każdym pakietem, który jest wywoływany INSTALL_RECEIPT.json, znajduje się plik , np. Dla gawk:

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

określa sposób instalacji pakietu. Myślę, że właściwym sposobem jest dostęp do niego

brew info --json=v1 <packagename>

na przykład

brew info --json=v1 gnuplot

To wyrzuca mnóstwo rzeczy, ale jeśli wyślesz go przez jq(JSON Processor - łatwo dostępny przez homebrew), możesz wybrać opcje użyte do zainstalowania pakietu w ten sposób (sprawdzanie gnuplotpakietu):

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

co mówi mi, że zainstalowałem gnuplotza pomocą:

brew install --with-qt gnuplot 
Mark Setchell
źródło
To powinna być odpowiedź.
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 może służyć do wyświetlania listy poleceń instalacji parzenia, których można użyć w innym miejscu.
Sankalp
4

Innym przydatnym narzędziem jest homebrew-bundler. Po zainstalowaniu brew tap Homebrew/bundlemożesz uruchomić brew bundle dumpi utworzy plik Brewfile, który zawiera listę wszystkich zainstalowanych pakietów wraz z wszelkimi dodatkowymi argumentami użytymi do ich zainstalowania.

rmarscher
źródło
To naprawdę fajna opcja. A edytowanie Brewfilei sprawdzanie w repozytorium dotfiles ułatwia „konfigurowanie” nowych maszyn. Chociaż zawiera listę wszystkich pakietów, w tym wszystkich zależności. Obecnie muszę analizować listę z brew leaveslisty, która zawiera tylko zainstalowane pakiety najwyższego poziomu.
eduncan911
3

Oto mała funkcja bash, która zwraca flagi niezależnie od tego, czy pakiet został zbudowany ze źródła, czy nie.

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

}

Aby użyć tej funkcji bash w skrypcie bash, napisz

 brew_options PKGNAME

gdzie PKGNAMEjest pożądana nazwa pakietu homebrew. Możesz także iterować przez wszystkie zainstalowane pakiety homebrew w skrypcie bash jako

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

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

   echo $PKG `brew_options $PKG`

 done

.

Killeroid
źródło
Uwaga depencency: jqprocesor JSON wiersza polecenia
l