Closed carlocab closed 3 years ago
Try running it with brew deps --verbose --debug tree-sitter
to see what might be going on. There's likely an error somewhere that we're silently ignoring in brew deps
.
Not sure if this says anything useful:
āÆ brew deps --verbose --debug tree-sitter
/usr/local/Homebrew/Library/Homebrew/brew.rb (Formulary::FormulaLoader): loading /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/tree-sitter.rb
/usr/local/Homebrew/Library/Homebrew/brew.rb (Formulary::FormulaLoader): loading /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/rust.rb
/usr/local/Homebrew/Library/Homebrew/brew.rb (Formulary::FormulaLoader): loading /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/cmake.rb
/usr/local/Homebrew/Library/Homebrew/brew.rb (Formulary::FormulaLoader): loading /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/sphinx-doc.rb
/usr/local/Homebrew/Library/Homebrew/brew.rb (Formulary::FormulaLoader): loading /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/python@3.9.rb
/usr/local/Homebrew/Library/Homebrew/brew.rb (Formulary::FormulaLoader): loading /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/pkg-config.rb
/usr/local/Homebrew/Library/Homebrew/brew.rb (Formulary::FormulaLoader): loading /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/gdbm.rb
/usr/local/Homebrew/Library/Homebrew/brew.rb (Formulary::FormulaLoader): loading /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/openssl@1.1.rb
/usr/local/Homebrew/Library/Homebrew/brew.rb (Formulary::FormulaLoader): loading /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/readline.rb
/usr/local/Homebrew/Library/Homebrew/brew.rb (Formulary::FormulaLoader): loading /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/sqlite.rb
/usr/local/Homebrew/Library/Homebrew/brew.rb (Formulary::FormulaLoader): loading /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/xz.rb
/usr/local/Homebrew/Library/Homebrew/brew.rb (Formulary::FormulaLoader): loading /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/libssh2.rb
/usr/local/Homebrew/Library/Homebrew/brew.rb (Formulary::FormulaLoader): loading /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/emscripten.rb
/usr/local/Homebrew/Library/Homebrew/brew.rb (Formulary::FormulaLoader): loading /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/binaryen.rb
/usr/local/Homebrew/Library/Homebrew/brew.rb (Formulary::FormulaLoader): loading /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/node.rb
/usr/local/Homebrew/Library/Homebrew/brew.rb (Formulary::FormulaLoader): loading /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/icu4c.rb
/usr/local/Homebrew/Library/Homebrew/brew.rb (Formulary::FormulaLoader): loading /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/yuicompressor.rb
/usr/local/Homebrew/Library/Homebrew/brew.rb (Formulary::FormulaLoader): loading /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/openjdk.rb
/usr/local/Homebrew/Library/Homebrew/brew.rb (Formulary::FormulaLoader): loading /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/autoconf.rb
It seems like deps
finds all the formulae that tree-sitter
depends on just fine (though I suppose that is no surprise given that it works with --tree
), it's just not printing them.
I'll try to have a poke around cmd/deps.rb
to see if I can figure something out.
Could be related to @use_runtime_dependencies
. Try running brew deps --include-test --verbose --debug tree-sitter
which will force it to be false.
Yes, I had discovered that brew deps --include-test tree-sitter
correctly returns the (recursive) list of dependencies. I tried each of the possible flags for deps
. Didn't try combinations of them though.
Adding the flags --verbose
and --debug
just prepends that list with the output from my last comment.
In case it's helpful:
n
: nothing1
: completeinclude-build
: completeunion
: nothingfull-name
: nothinginclude-test
: completeannotate
: nothinginclude-requirements
: :macOS >= 10.11
installed
: nothingfor-each
: just tree-sitter:
Of course, "complete" is with respect to what that flag is supposed to print out.
Looking back at deps.rb
, it does look related to @use_runtime_dependencies
.
Try running brew ruby -e 'puts "tree-sitter".f.runtime_dependencies'
. For me it returns this, but it might be blank for you:
$ brew ruby -e 'puts "tree-sitter".f.runtime_dependencies'
binaryen
icu4c
node
gdbm
openssl@1.1
readline
sqlite
xz
python@3.9
openjdk
yuicompressor
emscripten
I don't understand enough of the brew
codebase to figure out what's happening, but I did wonder if other formulae were also not reporting their dependencies correctly.
I wrote a little script to check:
#!/usr/bin/env zsh
formulae_dir="/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula"
for formula in $formulae_dir/*.rb; do
if [[ -n "$(brew deps --include-test $formula)" ]]; then
if [[ -z "$(brew deps $formula)" ]]; then
echo $formula
fi
fi
done
I don't actually recommend you run that, because it will take ages. However, I did run a version of this using parallel
. This will produce false positives: some formulae may have no dependencies other than those required for testing.
After filtering out the formulae that actually do have test dependencies, I came up with this list:
acme
ddrescue
ed
lcs
make
moe
ocrad
snap7
spim
tree-sitter
It seems there's a second kind of problem, where brew deps --include-test
falsely reports non-existent dependencies.
For example:
āÆ cd $(brew --repo homebrew/core)/Formula
āÆ grep ':test' acme.rb
āÆ brew deps --include-test acme
apr
apr-util
gettext
lz4
openssl@1.1
perl
readline
sqlite
subversion
utf8proc
āÆ brew deps --tree acme
acme
brew deps --tree acme
is correct: acme
has no listed dependencies.
Try running
brew ruby -e 'puts "tree-sitter".f.runtime_dependencies'
.
It is blank for me.
It seems there's a second kind of problem, where
brew deps --include-test
falsely reports non-existent dependencies.
I can reproduce this one š¤. It seems that brew deps --include-test acme
and brew deps --include-build acme
show lists of dependencies that, according to the formula file, don't exist (as the formula seems to declare no dependencies).
Based on the output of brew info acme
and adding --tree
to the above commands, it seems that subversion
is appearing as a build dependency of acme
. Not sure why š¤
$ brew info acme
acme: stable 0.97 (bottled)
Crossassembler for multiple environments
https://sourceforge.net/projects/acme-crossass/
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/acme.rb
License: GPL-2.0-or-later
==> Dependencies
Build: subversion
==> Analytics
install: 639 (30 days), 1,763 (90 days), 9,978 (365 days)
install-on-request: 638 (30 days), 1,758 (90 days), 9,953 (365 days)
build-error: 0 (30 days)
$ brew deps --tree acme
acme
$ brew deps --include-test --tree acme
acme
āāā subversion
āāā apr
āāā apr-util
ā āāā apr
ā āāā openssl@1.1
āāā gettext
āāā lz4
āāā openssl@1.1
āāā perl
āāā sqlite
ā āāā readline
āāā utf8proc
$ brew deps --include-build --tree acme
acme
āāā subversion
āāā openjdk
ā āāā autoconf
āāā pkg-config
āāā python@3.9
ā āāā pkg-config
ā āāā gdbm
ā āāā openssl@1.1
ā āāā readline
ā āāā sqlite
ā ā āāā readline
ā āāā xz
āāā scons
ā āāā python@3.9
ā āāā pkg-config
ā āāā gdbm
ā āāā openssl@1.1
ā āāā readline
ā āāā sqlite
ā ā āāā readline
ā āāā xz
āāā swig
ā āāā pcre
āāā apr
ā āāā autoconf
āāā apr-util
ā āāā apr
ā ā āāā autoconf
ā āāā openssl@1.1
āāā gettext
āāā lz4
āāā openssl@1.1
āāā perl
āāā sqlite
ā āāā readline
āāā utf8proc
Unfortunately, it's getting late for me so I'll have to wait until tomorrow to investigate...
I can reproduce this one š¤. It seems that
brew deps --include-test acme
andbrew deps --include-build acme
show lists of dependencies that, according to the formula file, don't exist (as the formula seems to declare no dependencies).
The formula file is not authoritative for installed formulae, the actual detected linkage of the formula is.
Closing as the original issue cannot be reproduced by multiple maintainers. Feel free to continue discussion here though.
The formula file is not authoritative for installed formulae, the actual detected linkage of the formula is.
Doesn't brew need the formula installed to detect linkage though? At least, that's my guess since brew linkage <formula>
returns an error for formulae that are not installed (which brew help linkage
also mentions).
This makes the acme
example troubling for me, as it seems to detect linkage (or otherwise think there's a dependency) even though I don't have acme
installed.
Closing as the original issue cannot be reproduced by multiple maintainers. Feel free to continue discussion here though.
Right. I just tried it again and I can't reproduce it anymore either, so... š¤· Apologies if this was all a waste of time.
acme
has subversion
as a build dependency because its URL is detected to be for an SVN repo and your system's Xcode or CLT don't ship with svn
.
Cool. I wish I understood how brew deps
actually resolved dependencies.
Thanks for taking the time to look into this, everyone.
Bug report
Please note we will close your issue without comment if you delete, do not read or do not fill out the issue checklist below and provide ALL the requested information. If you repeatedly fail to use the issue template, we will block you from ever submitting issues to Homebrew again.
brew update
and can still reproduce the problem?brew doctor
, fixed all issues and can still reproduce the problem?brew config
andbrew doctor
and included their output with your issue?What you were trying to do (and why)
I ran
brew deps tree-sitter
, because I was interested in the footprint of this package on my system.What happened (include command output)
Nothing happened. This was surprising because tree-sitter does have dependents. The dependency tree is reported correctly by
brew deps --tree tree-sitter
.Other formulae seem to report their dependencies correctly (e.g. python@3.9).
Command output
What you expected to happen
I expected
brew deps tree-sitter
to correctly report tree-sitter's dependencies.Step-by-step reproduction instructions (by running
brew
commands)Just
brew deps tree-sitter
.Output of
brew config
andbrew doctor
commands