Déterminer les indicateurs qui ont été donnés pour les packages installés avec homebrew

17

Existe-t-il un moyen de vérifier quels indicateurs ont été donnés lorsqu'un package a été installé avec homebrew?

Par exemple, la formule emacs a un nombre absurde de drapeaux. Si j'ai fait

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

Je voudrais déterminer plus tard que pour l'installation homebrew d'emacs, j'ai donné les drapeaux --with-glib --with-librsvget pas d'autres drapeaux.

Cas de test avec package lua:

Avant d'installer le package, info affiche toutes les options.

$ 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

J'installe le paquet avec juste le --with-completiondrapeau.

$ 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

Après l'installation du package, info affiche toutes les options, y compris celles que je n'ai pas utilisées. La commande reconnaît que le package a été construit à partir de la source et non versé à partir d'une bouteille.

$ 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
Praxéolitique
la source

Réponses:

15

Lorsqu'un package est construit à partir de la source, les indicateurs qui ont été utilisés pour générer sont affichés lorsque vous le faites brew info <package>.

Dans ce cas: brew info emacs | grep "Built from source"

André
la source
La sortie des informations de brassage répertorie toujours toutes les options disponibles pour la formule, pas les options utilisées si le package a été installé.
Praxeolitic
1
Ce n'est pas vrai. Les informations spécifient si le package a été installé à partir d'une bouteille ou construit à partir de la source, et s'il a été construit à partir de la source, il affiche les indicateurs qui ont été utilisés.
André
OP modifié avec un exemple dans lequel, pour autant que je sache, info ne spécifie pas les drapeaux utilisés pour un paquet construit à partir de la source.
Praxeolitic
2
Oh oups, je le vois et votre commande grep a du sens maintenant.
Praxeolitic
6

Il y a un fichier /usr/local/Cellarsous chaque paquet qui est appelé INSTALL_RECEIPT.json, par exemple pour gawk:

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

qui définit comment le package a été installé. Je pense que la bonne façon d'y accéder est avec

brew info --json=v1 <packagename>

par exemple

brew info --json=v1 gnuplot

Cela vomit beaucoup de choses, mais si vous l'envoyez via jq(Processeur JSON - disponible via homebrew), vous pouvez sélectionner les options que vous avez utilisées pour installer le package comme ceci (vérifier le gnuplotpackage):

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

ce qui me dit que j'ai installé en gnuplotutilisant:

brew install --with-qt gnuplot 
Mark Setchell
la source
Cela devrait être la réponse.
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 peut être utilisé pour afficher une liste de commandes d'installation de brew que vous pouvez utiliser ailleurs.
Sankalp
4

Un autre outil utile est homebrew-bundler. Une fois installé via brew tap Homebrew/bundle, vous pouvez l'exécuter brew bundle dumpet il créera un fichier Brewfile qui répertorie tous les packages que vous avez installés ainsi que les arguments supplémentaires utilisés pour les installer.

rmarscher
la source
C'est en effet une bonne option. Et, pour le modifier Brewfileet le vérifier dans votre dépôt dotfiles, il est facile de "configurer" de nouvelles machines. Cependant, il répertorie tous les packages, y compris toutes les dépendances. Je dois actuellement analyser la liste à partir d'une brew leavesliste qui répertorie uniquement les packages installés de niveau supérieur.
eduncan911
3

Voici une petite fonction bash qui retourne les drapeaux indépendamment du fait que le paquet ait été construit à partir de la source ou non.

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

}

Pour utiliser cette fonction bash dans un script bash, écrivez

 brew_options PKGNAME

PKGNAMEest le nom du package homebrew souhaité. Vous pouvez également parcourir tous les packages homebrew installés dans un script bash comme

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

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

   echo $PKG `brew_options $PKG`

 done

.

Killeroid
la source
note de dépendance: jqprocesseur JSON en ligne de commande
l --marc l