MacPorts:如何重建特定端口?

ton*_*y19 5 macports qt osx-mountain-lion

如何强制 MacPorts 重建特定端口?我手动更改了 MacPorts makefile 以链接到特定库,但仍然找不到丢失的符号。也许我需要重建,但是如何在不清除端口(这会删除我修改的文件)的情况下实现这一目标?

动机

我尝试使用 MacPortsqt4-mac-devel在 Mac OS X Mountain Lion 中安装 Qt(即端口),但失败并出现未定义的符号 ( _objc_msgSend_fixup)。具有类似问题的MacPorts 票证让我检查了QtWebKit.pro以下有问题的文件:

QT4_SRC=/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_aqua_qt4-mac-devel/qt4-mac-devel/work/qt-everywhere-opensource-src-4.8.0/src/3rdparty/webkit/Source/WebKit/qt/
Run Code Online (Sandbox Code Playgroud)

第 254 行的谓词else检查 Darwin 11 或 10.7 SDK(两者都在 Lion 中,但在 Mountain Lion 中不可用)。列表中没有if-elseMountain Lion 的 WebKit 谓词。

254:  } else: equals(DARWIN_MAJOR_VERSION, "11") | contains(QMAKE_MAC_SDK, "/Developer/SDKs/MacOSX10.7.sdk") {
255:    LIBS += $$SOURCE_DIR/../WebKitLibraries/libWebKitSystemInterfaceLion.a
256:  }
257:}
Run Code Online (Sandbox Code Playgroud)

作为一个肮脏的快速修复,我将第 254 行更改为无条件else。当我尝试通过重新运行命令来测试这一点时port install ,我看到了相同的原始错误。我很确定 MacPorts 甚至没有查看我的更改,因为我在将垃圾文本输入到文件并重命名文件后重新运行了命令。所以,我现在正在寻找一种强制重建的方法。

我尝试过的事情

  • 使用标志重建-s(从源重建):sudo port install -s qt4-mac-devel
  • 接触所有 Qt 源文件后重建:find ${QT4_SRC} -name "*.cpp" -exec touch {} \;
  • 清理端口然后重建(不行...port clean删除QtWebKit.pro文件,其中包含我必要的更改)

有什么建议么?谢谢。

小智 2

我建议为 qt4-mac-devel 创建一个本地端口文件,并将您的更改添加为在构建过程中应用的补丁。

  1. 创建本地端口文件存储库:howto
  2. 复制 qt4-mac-devel portfile 目录(名为“qt4-mac-devel”的目录(路径“/opt/local/var/macports/sources/rsync.macports.org/release/ports/aqua/qt4-mac- devel/") 包含文件“Portfile”和目录“files”) 到本地 portfile 存储库
  3. 使用您对 qt4-mac-devel 源代码的更改创建补丁并将其添加到“files”目录中。
  4. 编辑本地 qt4-mac-devel 端口文件以包含以下行patchfiles yourpatch.diff
  5. portindex在本地端口文件存储库中再次运行
  6. 安装 qt4-mac-develport install -s qt4-mac-devel

我希望这能有所帮助。