我如何强制 macports 从特定 url 获取端口源?

How can I force macports to fetch a port source from a specific url?

我正在编辑和测试我想通过 macports 构建的包。有没有办法强制 macports 从我的存储库中获取和构建包?我已经编辑了我的 Portfile 以指向单个存储库,但它似乎忽略了它。

MacPorts 在内部使用 curl 下载文件,这为您提供了几个选项来切换从哪里下载文件:

  • 您可以在 Portfile 的 master_sites 属性 中使用 file:// URL 指向本地目录。请注意,以 macports 用户身份获取 运行s,因此请确保允许该用户从该目录读取文件。
  • 对于文件下载,您可以替换缓存文件。 MacPorts 将在下次提取端口源代码时使用您的替代品。 运行 port distfiles $portname 查找可能缓存文件的本地路径。
  • 您可以通过将 fetch.type gitgit.url 设置为任何 git clone 接受克隆您的存储库(可以是本地的)和可选git.branch 给你想要签出的承诺。有关详细信息,请参阅 https://guide.macports.org/#reference.phases.fetch.git。同样,如果您使用本地 git 存储库,请确保 macports 用户可以读取本地文件。
  • MacPorts 支持的任何其他版本控制系统;详情请参阅指南。

注意 MacPorts 默认缓存文件下载(目前版本控制系统没有缓存),所以如果你没有修改文件名,你将不得不 运行 sudo port clean --dist $portname删除缓存。

构建 ports 的修改版本时,您还必须注意其他一些要点:

  • MacPorts 将下载预编译的二进制文件(如果可用)。由于该预编译的二进制文件将与您修改后的 Portfile 或源代码不匹配,因此将 -s 标志传递给 port 以强制从源代码构建。
  • 如果您 运行 'port install' 并且已经安装(激活或停用),MacPorts 将不会编译端口。

解决这两个潜在陷阱的最简单的解决方案可能是 运行宁 sudo port destroot $portname 而不是 sudo port install。这将 运行 到(包括)make install 的所有步骤,但实际上不会将文件放入 /opt/local。如果您可以从 port work $portname 的构建目录中调试需要调试的内容,这将简化事情。