패키지가 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
답변
소스에서 패키지를 빌드하면 빌드에 사용 된 플래그가 표시됩니다 brew info <package>
.
이 경우 : brew info emacs | grep "Built from source"
답변
에있는 파일이 /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
답변
또 다른 유용한 도구는 homebrew-bundler
입니다. 을 통해 설치 한 후에 brew tap Homebrew/bundle
는 실행할 brew bundle dump
수 있으며 설치 한 모든 패키지와 함께 설치하는 데 사용되는 추가 인수가 모두 포함 된 Brewfile 파일을 만듭니다.
답변
다음은 패키지가 소스에서 빌드되었는지 여부에 관계없이 플래그를 반환하는 작은 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
.