Xác định các cờ được cung cấp cho các gói được cài đặt với homebrew


17

Có cách nào để kiểm tra những lá cờ nào được đưa ra khi một gói được cài đặt với homebrew không?

Ví dụ, công thức emacs có số lượng cờ vô lý. Nếu tôi đã làm

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

Sau này tôi muốn xác định rằng đối với việc cài đặt homacrew của emacs tôi đã cho các cờ --with-glib --with-librsvgchứ không phải bất kỳ cờ nào khác.

Trường hợp thử nghiệm với gói lua:

Trước khi cài đặt gói, thông tin hiển thị tất cả các tùy chọn.

$ 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

Tôi cài đặt gói chỉ với --with-completioncờ.

$ 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

Sau khi cài đặt gói, thông tin hiển thị tất cả các tùy chọn, bao gồm cả những tùy chọn tôi không sử dụng. Lệnh này xác nhận rằng gói được xây dựng từ nguồn và không được đổ từ chai.

$ 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

Câu trả lời:


15

Khi một gói được xây dựng từ nguồn, các cờ được sử dụng để xây dựng sẽ được hiển thị khi bạn thực hiện brew info <package>.

Trong trường hợp này: brew info emacs | grep "Built from source"


Đầu ra của thông tin brew luôn liệt kê tất cả các tùy chọn có sẵn cho công thức, không phải các tùy chọn được sử dụng nếu gói được cài đặt.
Praxeolitic

1
Đo không phải sự thật. Thông tin chỉ định nếu gói được cài đặt từ chai hoặc được xây dựng từ nguồn và nếu được xây dựng từ nguồn, nó sẽ hiển thị các cờ được sử dụng.
André

Đã chỉnh sửa OP với một ví dụ trong đó, theo như tôi có thể nói, thông tin không chỉ định các cờ được sử dụng cho gói được xây dựng từ nguồn.
Praxeolitic

2
Ôi, tôi thấy nó và lệnh grep của bạn bây giờ có ý nghĩa.
Praxeolitic

6

Có một tệp ở /usr/local/Cellarbên dưới mỗi gói được gọi INSTALL_RECEIPT.json, ví dụ gawk:

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

xác định cách gói được cài đặt. Tôi nghĩ rằng cách chính xác để truy cập nó là với

brew info --json=v1 <packagename>

ví dụ

brew info --json=v1 gnuplot

Điều đó sẽ tạo ra vô số thứ, nhưng nếu bạn gửi nó qua jq(Bộ xử lý JSON - có sẵn thông qua homebrew), bạn có thể chọn các tùy chọn bạn đã sử dụng để cài đặt gói như thế này (kiểm tra gnuplotgói):

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

cho tôi biết tôi đã cài đặt gnuplotbằng cách sử dụng:

brew install --with-qt gnuplot 

Đây nên là câu trả lời.
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 có thể được sử dụng để xuất ra một danh sách các lệnh cài đặt brew mà bạn có thể sử dụng ở nơi khác.
Sankalp

4

Một công cụ hữu ích khác là homebrew-bundler. Sau khi cài đặt qua brew tap Homebrew/bundle, bạn có thể chạy brew bundle dumpvà nó sẽ tạo một tệp Brewfile liệt kê tất cả các gói bạn đã cài đặt cùng với bất kỳ đối số bổ sung nào được sử dụng để cài đặt chúng.


Đây thực sự là một lựa chọn tốt. Và, để chỉnh sửa Brewfilevà kiểm tra nó vào repo dotfiles của bạn, giúp bạn dễ dàng "thiết lập" các máy mới. Mặc dù, nó liệt kê tất cả các gói bao gồm tất cả các phụ thuộc. Tôi hiện đang phải phân tích danh sách từ một brew leavesdanh sách chỉ liệt kê các gói được cài đặt cấp cao nhất.
eduncan911

3

Đây là một hàm bash nhỏ trả về các cờ bất kể gói có được xây dựng từ nguồn hay không.

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

}

Để sử dụng hàm bash này trong tập lệnh bash, hãy viết

 brew_options PKGNAME

PKGNAMEtên gói homebrew mong muốn ở đâu . Bạn cũng có thể lặp qua tất cả các gói homebrew đã cài đặt trong tập lệnh bash như

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

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

   echo $PKG `brew_options $PKG`

 done

.


ghi chú depencency: jqbộ xử lý JSON dòng lệnh
l --marc l
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.