homebrewでインストールされたパッケージに与えられたフラグを決定する


17

homebrewでパッケージをインストールしたときにどのフラグが与えられたかを確認する方法はありますか?

たとえば、emacsの式には不条理な数のフラグがあります。私がやったら

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

後で、自作のemacsのインストールで--with-glib --with-librsvgは、他のフラグではなくフラグを指定したと判断したいと思います。

luaパッケージを使用したテストケース:

パッケージをインストールする前に、infoにはすべてのオプションが表示されます。

$ 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

--with-completionフラグだけでパッケージをインストールします。

$ 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

パッケージをインストールすると、infoには、使用しなかったオプションを含むすべてのオプションが表示されます。このコマンドは、パッケージがソースからビルドされ、ボトルから注がれたことを認識しません。

$ 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

回答:


15

パッケージがソースからビルドされると、ビルドに使用されたフラグが表示されますbrew info <package>

この場合: brew info emacs | grep "Built from source"


醸造情報の出力には、パッケージがインストールされている場合に使用されるオプションではなく、常に数式で使用可能なすべてのオプションがリストされます。
プラキソライト14年

1
それは真実ではない。この情報は、パッケージがボトルからインストールされたか、ソースからビルドされたかを指定し、ソースからビルドされた場合、使用されたフラグを示します。
アンドレ14年

私が知る限り、infoがソースからビルドされたパッケージに使用されるフラグを指定していない例を使用してOPを編集しました。
プラキソライト14年

2
ああ、わかりました。grepコマンドは今では意味をなします。
プラキソライト14年

6

/usr/local/Cellar呼び出される各パッケージの下にファイルがありますINSTALL_RECEIPT.json。たとえばgawk

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

パッケージのインストール方法を定義します。それにアクセスする正しい方法は

brew info --json=v1 <packagename>

例えば

brew info --json=v1 gnuplot

それはたくさんのものを吐き出しますが、jq(JSON Processor-を介してhomebrew手軽に利用可能)を通してそれを送るなら、あなたはこのようなパッケージをインストールするために使用したオプションを選択することができます(gnuplotパッケージをチェックします):

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

以下をgnuplot使用してインストールしたことがわかります:

brew install --with-qt gnuplot 

これが答えです。
ジェイコブデゲリング

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 他の場所で使用できるbrew installコマンドのリストを出力するために使用できます。
Sankalp

4

別の便利なツールはhomebrew-bundlerです。を介してインストールbrew tap Homebrew/bundleするbrew bundle dumpと、実行することができ、インストールしたすべてのパッケージとそれらをインストールするために使用される追加の引数をリストするBrewfileファイルが作成されます。


これは確かに素晴らしいオプションです。また、編集Brewfileしてドットファイルリポジトリにチェックインすると、新しいマシンを簡単に「セットアップ」できます。ただし、すべての依存関係を含むすべてのパッケージがリストされます。現在brew leaves、最上位のインストール済みパッケージのみをリストするリストからリストを解析する必要があります。
eduncan911

3

パッケージがソースからビルドされたかどうかに関係なく、フラグを返す小さなbash関数を次に示します。

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

}

bashスクリプト内でこのbash関数を使用するには

 brew_options PKGNAME

ここPKGNAMEで、希望するhomebrewパッケージ名です。bashスクリプト内でインストールされているすべてのhomebrewパッケージを次のように繰り返すこともできます。

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

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

   echo $PKG `brew_options $PKG`

 done


依存関係の注意:jqコマンドラインJSONプロセッサ
l --marc l
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.