homebrew와 함께 설치된 패키지에 제공된 플래그 결정


17

패키지가 homebrew와 함께 설치 될 때 어떤 플래그가 제공되었는지 확인하는 방법이 있습니까?

예를 들어, emacs 공식에는 불합리한 수의 플래그가 있습니다. 내가 한 경우

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

나는 emacs의 homebrew 설치를 위해 --with-glib --with-librsvg다른 깃발이 아닌 깃발을 주었다는 것을 나중에 결정하고 싶습니다 .

루아 패키지 테스트 케이스 :

패키지를 설치하기 전에 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"


추출 정보의 출력에는 항상 패키지가 설치된 경우 사용 된 옵션이 아니라 수식에 사용 가능한 모든 옵션이 나열됩니다.
Praxeolitic

1
그건 사실이 아니야. 이 정보는 패키지가 병에서 설치되었거나 소스에서 빌드되었는지 여부를 지정하고 소스에서 빌드 된 경우 사용 된 플래그를 표시합니다.
André

내가 알 수있는 한 info에서 소스로 작성된 패키지에 사용되는 플래그를 지정하지 않는 예제를 사용하여 OP를 수정했습니다.
Praxeolitic

2
죄송합니다. 이제 grep 명령이 의미가 있습니다.
Praxeolitic

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-Handily available via homebrew)를 통해 보내면 다음 과 같이 패키지를 설치하는 데 사용한 옵션을 선택할 수 있습니다 ( gnuplot패키지 확인 ) :

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

다음을 gnuplot사용하여 설치되었음을 알려줍니다 .

brew install --with-qt gnuplot 

이것이 답이되어야합니다.
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 다른 곳에서 사용할 수있는 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.