9

我不得不承认我是 WebKit 的新手,所以提出正确的问题并不是那么容易。

我拥有的是来自WebKit.org的 WebKit 。它更新、构建、我可以调试 - 我让它在 Windows 上运行。

我感兴趣的是如何为我拥有的一些 IDL 文件生成存根文件。我理解高级图片:

  1. 使用 IDL 语言编写接口
  2. 生成存根文件(.h 和 .cpp 文件)。
  3. 在之前生成的存根文件中添加您的代码。

我在“WebCore.gypi”中指定了我的 IDL 文件。然后我在“WebCore.gyp”中指定了我的 IDL 文件的路径。显然这还不够,因为构建 WebKit 不会为我的 IDL 文件生成存根文件。

我一度怀疑我的 IDL 文件可能包含未定义的属性,但一切似乎都很好。

有小费吗?另外,您知道任何明确的“如何”吗?

谢谢!

编辑 130206:

我挖了更多,显然 WebKit 与几个构建系统交互;例如 GYP 代表 Chromium。老实说,我没想到会这么复杂,所以我没有提到我需要为 Safari 生成绑定,该绑定具有不同的构建系统,因此它有自己独特的“操作方法”。那么,现在的问题是,Safari 构建系统是如何工作的?我需要将 IDL 文件放在哪里?谢谢!

4

1 回答 1

8

好吧,我可以告诉你是什么帮助了我。不幸的是,我仍然找不到任何文档,因此涉及了大量的试验和错误。

如果你想为 Safari 生成 JS 绑定,你必须:

  1. 修改“DerivedSources.make”。
  2. 确保您的 IDL 文件是正确的。

'DerivedSources.make' 可以在'\WebKit\Source\WebCore\' 中找到。在此 make 文件中,您必须指定以下内容:

  1. 'VPATH' 中文件夹的路径(包含 IDL 文件)。
  2. 'BINDINGS_IDLS' 中的每个和所有 IDL 文件。
  3. 再次是“IDL_INCLUDES”中文件夹的路径。

构建 WebKit。如果在这一步之后您仍然看不到您的 JSXXX.h 和 JSXXX.cpp 文件(为每个 XXX.IDL 文件生成),那么您必须检查您的 IDL 文件。

在我的情况下,构建步骤之后没有生成任何内容,并且出现如下错误:

6>下一个令牌应该实现,但 MyModule 在模块 MyModule {
6> IDLParser.pm:750 at /WebKit/Source/WebCore/bindings/scripts//IDLParser.pm line 129.
6> in /WebKit/Source/WebCore/ /WebKit/Source/WebCore/bindings/scripts//IDLParser.pm 第 173 行的 MyFolder/XXX.idl。6
>/WebKit/Source/WebCore/DerivedSources.make:1024:目标“XXX.h”的配方失败
6>制作:* [XXX.h] 错误 255

问题是每个 IDL 接口都包含在一个名为 MyModule 的模块(命名空间)中,如上所示。我已经删除了所有这些模块(当然保留了接口),并且在下一次构建时,一切都生成得很好。使用您自己的模块名称似乎不像用它包含 IDL 接口那么简单;很可能您将被迫编写自定义绑定来完成此操作(WebKit 团队不建议这样做)。

对我来说就是这样,希望对你也有帮助。

于 2013-02-12T07:56:24.943 回答