Description
We currently have a few hundred :all
bottles in this repository. I count another 200 or so more (see candidate formulae below) that could have an :all
bottle but don't currently have one.
These are typically due to /usr/local
references inside that bottles that are relocated on x86_64 macOS but not on arm64 macOS or Linux. To fix these, we typically only need a few inreplace
lines. See below for example PRs.
Example PRs
Candidate Formulae
- abi3audit
- alluxio
- angular-cli
- apify-cli
- appium
- appwrite
- arttime
- asciidoc
- asyncapi
- autoconf
- automake
- autopsy
- autorest
- aws-amplify
- aws-auth
- awscli-local
- b2-tools
- bandcamp-dl
- basedpyright
- basti
- bork
- bower
- braid
- bundletool
- cdk8s
- censys
- certbot
- certifi
- chruby
- cimg
- cloudflare-wrangler2
- cmake-docs
- cocoapods
- commitlint
- composer
- contentful-cli
- cpanminus
- cpm
- cppman
- credstash
- cubejs-cli
- dbml-cli
- ddclient
- devcontainer
- dicebear
- diceware
- diffoscope
- dita-ot
- doc8
- dockerfile-language-server
- druid
- duply
- easyengine
- eleventy
- eslint
- extra-cmake-modules
- fades
- fail2ban
- fanyi
- fauna-shell
- firebase-cli
- flake8
- flamebearer
- flawfinder
- flit
- fnt
- fonts-encodings
- foreman
- fred
- geoip2fast
- getmail6
- git-big-picture
- git-cola
- git-number
- git-remote-codecommit
- git-review
- git-subrepo
- gitlab-ci-local
- gitmoji
- gitter-cli
- go
- goenv
- goolabs
- gorilla-cli
- gost
- gprof2dot
- grails
- graphql-cli
- graphqurl
- grokmirror
- groovysdk
- grunt-cli
- gsettings-desktop-schemas
- gtop
- gulp-cli
- hadoop
- haste-client
- hexo
- http-server
- httpyac
- hyfetch
- insect
- instalooter
- intltool
- inxi
- ios-sim
- ipython
- itstool
- jruby
- js-beautify
- jscpd
- json2ts
- jtbl
- kafka
- keyring
- kubevious
- lando-cli
- latexdiff
- lerna
- liquibase
- luarocks
- lynis
- libclc
- libunwind-headers
- mailsy
- markdownlint-cli
- marp-cli
- maven
- maxwell
- mjml
- mysqltuner
- n
- nativefier
- naturaldocs
- nave
- nb
- nbdime
- neonctl
- netsurf-buildsystem
- newman
- nicotine-plus
- nikto
- nox
- npm-check-updates
- osc-cli
- osc
- pandemics
- pass-git-helper
- pass
- patch-package
- pedump
- phoronix-test-suite
- phpbrew
- phpstan
- pip-tools
- pipdeptree
- pipenv
- pipgrip
- pipx
- platformio
- pnpm
- pnpm@8
- postgraphile
- powerlevel10k
- principalmapper
- psalm
- psysh
- ptpython
- px
- pycparser
- pyenv-virtualenv
- pylint
- pyqt-builder
- pyright
- python-argcomplete
- pythran
- quicktype
- rbtools
- redo - redo: build an
:all
bottle #191545 - release-it
- rich-cli
- rollup
- saf-cli
- scons
- seam
- search-that-hash
- serveit
- serverless
- shallow-backup
- shodan
- sip
- slimerjs
- snyk-cli
- solhint
- sonarqube-lts
- sonarqube
- spack
- spectral-cli
- speedtest-cli
- spotbugs
- sql-lint
- sqlite-utils
- sqlmap
- sslmate
- standard
- stepci
- stylelint
- subliminal
- sugarjar
- supervisor
- tailwindcss-language-server
- tartufo
- teku
- terrahub
- tmuxinator-completion
- tmuxinator
- tox
- twarc
- ungit
- unoconv
- unum
- urlscan
- util-macros
- vcs
- vercel-cli
- virtualenv
- vite
- vue-cli
- waybackpy
- web-ext
- webpack
- wikibase-cli
- wildfly-as
- wiremock-standalone
- wp-cli
- xmltoman
- xorgproto
- yaml-language-server
- yapf
- yo
- yuicompressor
- z
- zim
- zinit
How do I identify the files to `inreplace`?
diffoscope
is your best friend here (install it with brew intall diffoscope
).
If you're trying to fix formula foo
, you'll want to first check foo
for which bottles have different checksums, e.g., with brew cat foo
(if you have homebrew/core
tapped), or with
brew info --json=v2 foo | jq '.formulae[].bottle.stable.files'
Typically, the Intel macOS bottles will all have the same checksums, but these will be different from the arm64 macOS bottles and Linux bottles (which often all have the same checksums as well).
Pull down the relevant bottles with:
brew fetch --bottle-tag arm64_sonoma foo
brew fetch --bottle-tag sonoma foo
and then examine them using diffoscope
:
diffoscope "$(brew --cache --bottle-tag arm64_sonoma foo)" "$(brew --cache --bottle-tag sonoma foo)"
diffoscope
will tell you which files differ, and these are the ones you'll want to inreplace
.
Why do we care about `:all` bottles?
An :all
bottle can be installed by any Homebrew user, regardless of their HOMEBREW_PREFIX
or OS version, so having more :all
bottles mean that more users can benefit from bottle usage.
Moreover, :all
bottles are a signal that our builds are (somewhat) reproducible, which is important when providing pre-built packages. See https://reproducible-builds.org for more on this.