如何在新的 macOS 版本上为旧版本创建自制软件瓶?

How do I create homebrew bottle for old version on a new macOS version?

我想为 Sierra 创建一瓶 zsh 5.1.1,因为 zsh 5.2 有一个严重的错误,会破坏某些功能。

Sierra 附带 zsh 5.2,它因多字节绑定键击键而损坏(参见:http://www.zsh.org/mla/users/2015/msg01400.html)。我已经设法让 5.1.1 在一台机器上从源代码构建,但为了更广泛的分发,在 zsh 的新版本发布之前,一瓶 zsh 5.1.1 的 Sierra 会更好。

该错误不仅会阻止 utf-8 多字节 ascii 字符的绑定(我使用了很多 Option 键组合),而且还会阻止其他具有相同初始字节的字符甚至无法输入。

我认为这是 bug 出现之前 zsh 配方的最后一个版本:https://github.com/Homebrew/homebrew-core/blob/1a4461ad2a0f1bc7074d9817db059147a31eeee6/Formula/zsh.rb

How do I create homebrew bottle for old version on a new macOS version?

我已经在 macOS Sierra 上成功构建了一个 zsh 5.1.1 bottle。方法如下:

首先,您需要从 homebrew-core 存储库下载所有提交,因为默认情况下它是一个浅存储库(并非所有提交都存在)。

cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core
git fetch --unshallow

然后您必须 select zsh 5.1.1 的最后一次提交

brew log zsh

这里是提交 1a4461ad2a0f1bc7074d9817d,检查此提交的 zsh 公式

git checkout 1a4461ad2a0f1bc7074d9817d -- Formula/zsh.rb

使用 --build-bottle

安装 zsh
brew install --build-bottle zsh

并建造瓶子

brew bottle zsh

然后你得到瓶子文件 zsh-5.1.1.sierra.bottle.1.tar.gz

不要忘记用

恢复zsh.rb的原始状态
git checkout -- Formula/zsh.rb

安装bottle,直接复制到/usr/local/Cellar,用

解压
tar xzvf zsh-5.1.1.sierra.bottle.1.tar.gz 

和link它与

brew link zsh

== 编辑以回答 OP 评论 ==

官方自制酒瓶存储在 bintray.com。 Bintray 是一个带有 REST api 的分发平台。当您启动 brew install 时,它首先检查那里是否有瓶子。 zsh 5.1.1 bottles 存储在:https://bintray.com/homebrew/bottles/zsh/5.1.1#files。如您所见,有 yosemite、mavericks 和 el capitan 的版本,但没有 sierra 的版本。您可以在 github 上要求将 zsh-5.1.1 sierra bottle 放在那里。

我知道这是一个老问题,但对于新手来说,我已经发布了一个自动构建工作流来使用 Azure Pipelines 和 Bintray 为您的水龙头创建和发布瓶子。

您可以在此处找到更多信息:

https://github.com/ladislas/homebrew-greetings

一个现实生活中的例子是我维护的 osx-cross/avr 水龙头,它现在为所有配方提供瓶子,包括从 9.1.0 到 4.x.x 的所有 avr-gcc 版本。

https://github.com/osx-cross/homebrew-avr/

编辑 (2021/03/15) - Homebrew 大大改进了对自定义水龙头瓶的支持,请参阅:

Homebrew tap with bottles uploaded to GitHub Releases

osx-cross/avr 现在通过 Github 操作充分利用了这一点,您可以查看 .github/workflows 了解详情。

这里有一个 link 到一个有用的博客 post,由一位自制软件维护者撰写,内容是关于使用 bottles 维护您自己的存储库:

https://jonathanchang.org/blog/maintain-your-own-homebrew-repository-with-binary-bottles/

从下面的部分可以看出,为其他 macOS 版本创建瓶子就像修改 .json 文件一样简单(一旦完成其他设置):

https://jonathanchang.org/blog/maintain-your-own-homebrew-repository-with-binary-bottles/#bottling-for-multiple-systems