Homebrew ile kurulan paketler için verilen bayrakları belirleme


17

Homebrew ile bir paket kurulduğunda hangi bayrakların verildiğini kontrol etmenin bir yolu var mı?

Örneğin, emacs formülünde çok sayıda bayrak bulunur. Yapsaydım

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

Daha sonra emacs homebrew kurulumu için --with-glib --with-librsvgdiğer bayrakları değil , bayrakları verdiğimi belirlemek istiyorum .

Lua paketi ile test çantası:

Paketi yüklemeden önce, bilgi tüm seçenekleri gösterir.

$ 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

Paketi sadece --with-completionbayrakla yüklüyorum.

$ 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

Paketi yükledikten sonra, kullanmadığım bilgiler de dahil olmak üzere tüm seçenekler gösterilir. Komut, paketin kaynaktan üretildiğini ve bir şişeden dökülmediğini kabul eder.

$ 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

Yanıtlar:


15

Bir paket kaynaktan oluşturulduğunda, oluşturmak için kullanılan bayraklar bunu yaptığınızda gösterilir brew info <package>.

Bu durumda: brew info emacs | grep "Built from source"


Demleme bilgisinin çıktısı, paket kuruluysa kullanılan seçenekleri değil, her zaman formül için kullanılabilir tüm seçenekleri listeler.
Praxeolitic

1
Bu doğru değil. Bilgiler, paketin bir şişeden mi yüklendiğini veya kaynaktan mı oluşturulduğunu belirtir ve kaynaktan oluşturulmuşsa, kullanılan bayrakları gösterir.
André

OP, anlayabildiğim kadarıyla, bilginin kaynaktan oluşturulan bir paket için kullanılan bayrakları belirtmediği bir örnekle düzenlendi.
Praxeolitic

2
Hata! Görüyorum ve grep komutun şimdi mantıklı.
Praxeolitic

6

/usr/local/CellarÇağrılan her paketin altında bir dosya vardır INSTALL_RECEIPT.json, örneğin gawk:

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

paketin nasıl kurulduğunu tanımlar. Sanırım ona erişmenin doğru yolu

brew info --json=v1 <packagename>

Örneğin

brew info --json=v1 gnuplot

Bu, bir sürü şeyi yayar, ancak jq(JSON İşlemci - kolayca erişilebilir) aracılığıyla homebrewgönderirseniz, paketi şu şekilde yüklemek için kullandığınız seçenekleri seçebilirsiniz ( gnuplotpaketi kontrol edin ):

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

bana şunu gnuplotkullanarak yüklediğimi söyler :

brew install --with-qt gnuplot 

Cevap bu olmalı.
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 başka bir yerde kullanabileceğiniz demleme kurulum komutlarının bir listesini çıkarmak için kullanılabilir.
Sankalp

4

Başka bir yararlı araç homebrew-bundler. Üzerinden yüklendikten sonra brew tap Homebrew/bundle, çalıştırabilirsiniz brew bundle dumpve yüklediğiniz tüm paketleri ve bunları yüklemek için kullanılan ek argümanları listeleyen bir Brewfile dosyası oluşturur.


Bu gerçekten güzel bir seçenek. Ve, düzenlemek Brewfileve dotfiles repo kontrol etmek yeni makineleri "kurulumu" kolaylaştırır. Yine de, tüm bağımlılıkları içeren tüm paketleri listeler. Şu anda brew leavesyalnızca üst düzey yüklü paketleri listeleyen bir listeden ayrıştırmak zorundayım .
eduncan911

3

Paketin kaynaktan oluşturulmuş olup olmadığına bakılmaksızın bayrakları döndüren küçük bir bash işlevi.

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

}

Bu bash işlevini bir bash betiği içinde kullanmak için şunu yazın

 brew_options PKGNAME

burada PKGNAMEarzu edilen homebrewleri paket adıdır. Ayrıca, bir bash betiği içindeki tüm kurulu homebrew paketleri aracılığıyla

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

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

   echo $PKG `brew_options $PKG`

 done

.


bağımlılık notu: jqkomut satırı JSON işlemci
l - marc l
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.