我想修改dtc公式,以构建与Beaglebone Black(和其他设备树ARM板)一起使用的专用dtc版本。问题是多方面的。 dtc公式提供瓶装版本,并安装1.4.0。我想安装一个来自更新源的版本,但不是绝对最新版本,并应用其他地方提供的补丁。我可以在OS X上手动构建它,但我不知道在自制软件中使用它的最佳方法。
我想把它变成一个变种。可以是完全独立的公式,也可以是当前公式中可以使用命令行参数选择的公式。但是,我并不精通酿造,知道如何最好地做到这一点。
我尝试创建名为" dtc-dyn"但它并不像名字中的破折号。
我也想把它变成一个瓶子,对其他人来说也是如此。方便,但这似乎更复杂。
我尝试修改当前的dtc并删除所有瓶子,然后修改URL,版本和添加系统步骤。但是有些操作失败了(从原始构建脚本运行时似乎有效):
def install
git_sha = "f6dbc6ca9618391e4f30c415a0a09b7af35f7647"
system "git checkout master -f"
system "git pull"
system "git checkout #{git_sha} -b #{git_sha}-build"
system "git pull --no-edit https://github.com/pantoniou/dtc dt-overlays5"
system "make clean"
system "make all"
end
可悲的是,这不起作用:
$ brew install dtc
==> Cloning git://git.kernel.org/pub/scm/utils/dtc/dtc.git
Updating /Library/Caches/Homebrew/dtc--git
==> Checking out branch master
==> git checkout master -f
==> git pull
==> git checkout f6dbc6ca9618391e4f30c415a0a09b7af35f7647 -b f6dbc6ca9618391e4f30c415a0a09b7af35f7647-build
2015-09-21 00:22:37 -0700
git checkout f6dbc6ca9618391e4f30c415a0a09b7af35f7647 -b f6dbc6ca9618391e4f30c415a0a09b7af35f7647-build
fatal: reference is not a tree: f6dbc6ca9618391e4f30c415a0a09b7af35f7647
READ THIS: https://git.io/brew-troubleshooting
可以找到原始脚本here。
无论如何,最好的方法是什么?我认为基于一些示例脚本的某种选项,但我不确定如何避免瓶子业务。谢谢!
好的,经过更多的文档阅读和实验,我尝试了这个:
class Dtc < Formula
desc "Device tree compiler"
homepage "http://www.devicetree.org/"
url "https://mirrors.kernel.org/debian/pool/main/d/device-tree-compiler/device-tree-compiler_1.4.0+dfsg.orig.tar.gz"
mirror "https://mirrors.ocf.berkeley.edu/debian/pool/main/d/device-tree-compiler/device-tree-compiler_1.4.0+dfsg.orig.tar.gz"
sha256 "f5f9a1aea478ee6dbcece8907fd4551058fe72fc2c2a7be972e3d0b7eec4fa43"
version "1.4.0"
option "with-symbols", "Add symbols/fixup support (-@ option)."
bottle…
if build.with? "symbols"
url "http://git.kernel.org/pub/scm/utils/dtc/dtc.git", :revision => "f6dbc6ca9618391e4f30c415a0a09b7af35f7647"
system "git", "pull", "--no-edit", "https://github.com/pantoniou/dtc", "dt-overlays5"
end
def install
system "make"
system "make", "DESTDIR=#{prefix}", "PREFIX=", "install"
mv lib/"libfdt.dylib.1", lib/"libfdt.1.dylib"
end
end
不幸的是,git pull失败了,因为它在克隆git repo之前就这样做了,而且它不在正确的目录中。我首先考虑补丁做...但是它还不清楚如何通过git pull应用补丁。我试过这个:
if build.with? "symbols"
url "http://git.kernel.org/pub/scm/utils/dtc/dtc.git", :revision => "f6dbc6ca9618391e4f30c415a0a09b7af35f7647"
patch do
system "git", "pull", "--no-edit", "https://github.com/pantoniou/dtc", "dt-overlays5"
end
end
但它仍然试图在克隆存储库之前进行git pull。并将其归结为它。