qtwebkit编译过程

71 篇文章 0 订阅
14 篇文章 1 订阅
执行编译qtwebkit命令: ./Tools/Scripts/build-webkit --qt --no-video --debug

./Tools/Scripts/build-webkit  590
588     }  elsif (isQt()) { 
589          # FIXME: $dir should probably be $project.
590          $result = buildQMakeQtProject( $dir$clean@options);

Tools/Scripts/webkitdirs.pm  1788
1788  sub buildQMakeQtProject($$@)
1789 {       
1790      my ( $project$clean@buildArgs) =  @_;
1791         
1792      return buildQMakeProject( ""$clean@buildArgs);
1793 }  

一、Source/DerivedSources.pro 
Tools/Scripts/webkitdirs.pm  1660
1659      print  " Calling '$qmakebin @dsQmakeArgs' in  " .  $dir .  " \n\n ";
# Calling 'qmake -r OUTPUT_DIR=/root/QtWebKit-2.2.0/WebKitBuild/Debug -r /root/QtWebKit-2.2.0/Source/DerivedSources.pro -o Makefile.DerivedSources' in /root/QtWebKit-2.2.0/WebKitBuild/Debug
1660      my  $result =  system  " $qmakebin @dsQmakeArgs ";
1661      if ( $result ne  0) {
1662          die  " Failed while running $qmakebin to generate derived sources!\n ";
1663     }
Source/DerivedSources.pro 的内容:
linux-pl6d:~/QtWebKit- 2.2. 0  #  cat Source/DerivedSources.pro 
TEMPLATE = subdirs
CONFIG += ordered

SUBDIRS += \
        JavaScriptCore/DerivedSources.pro \
        WebCore/DerivedSources.pro \
        WebKit/qt/Api/DerivedSources.pro

webkit2: SUBDIRS += WebKit2/DerivedSources.pro

for(subpro, SUBDIRS) {
    subdir = $${dirname(subpro)}
    subtarget =  $$replace(subpro, [^a-zA-Z0-9_], -)
     eval($${subtarget}.makefile =  " Makefile.DerivedSources ")
     eval(generated_files-$${subtarget}.commands = (cd  $$subdir && $(MAKE) -f Makefile.DerivedSources generated_files))
    QMAKE_EXTRA_TARGETS += generated_files-$${subtarget}
    generated_files.depends += generated_files-$${subtarget}
}

QMAKE_EXTRA_TARGETS += generated_files
执行Source/DerivedSources.pro 之后生成三个目录( JavaScriptCore WebCore WebKit/qt/Api)下的makefile文件(例如: /usr/bin/qmake OUTPUT_DIR=/root/QtWebKit-2.2.0/WebKitBuild/Debug -o Makefile.DerivedSources ../Source/JavaScriptCore/DerivedSources.pro

二、执行三个目录下的makefile
1685      for  my  $subdir ( @subdirs) {
1686          my  $dsMakefile =  " Makefile.DerivedSources ";
1687          print  " Calling '$make $makeargs -C $subdir -f $dsMakefile generated_files' in  " .  $dir .  " /$subdir\n\n ";
# Calling 'make  -C JavaScriptCore -f Makefile.DerivedSources generated_files' in /root/QtWebKit-2.2.0/WebKitBuild/Debug/JavaScriptCore
1688          if ( $make eq  " nmake ") {
1689              my  $subdirWindows =  $subdir;
1690              $subdirWindows =~ s:/:\\:g;
1691              $result =  system  " pushd $subdirWindows && $make $makeargs -f $dsMakefile generated_files && popd ";
1692         }  else {
1693              $result =  system  " $make $makeargs -C $subdir -f $dsMakefile generated_files ";
1694         }
1695          if ( $result ne  0) {
1696              die  " Failed to generate ${subdir}'s derived sources!\n ";
1697         }
1698     }
1、JavaScriptCore:
dir="JavaScriptCore";
qmake OUTPUT_DIR=/root/TestQtWebKit-2.2.0/QtWebKit-2.2.0/WebKitBuild/Debug -o $dir/Makefile.DerivedSources  Source/$dir/DerivedSources.pro;
make  -C $dir -f Makefile.DerivedSources generated_files;
在$dir/ generated目录下生成 hashtable头文件: DatePrototype.lut.hJSONObject.lut.h……
2、 WebCore
dir="";qmake; make;同上
执行Source/ WebCore/bindings/scripts/generate-bindings.pl脚本,输入参数为Source/WebCore/目录下的各种idl文件
83  $codeGen->ProcessDocument( $document$defines);
Source/WebCore/bindings/scripts/CodeGenerator.pm
148          $codeGenerator->GenerateInterface( $class$defines);
Source/WebCore/bindings/scripts/CodeGeneratorJS.pm
生成WebCore/generated目录下的各种JS头文件、cpp文件,例如:JSComment.h JSComment.cpp等等 
  117      #  Open files for writing
  118      my  $headerFileName =  " $outputDir/JS$name.h ";
  119      my  $implFileName =  " $outputDir/JS$name.cpp ";
  120      my  $depsFileName =  " $outputDir/JS$name.dep ";
  121 
  122      #  Remove old dependency file.
  123      unlink( $depsFileName);
  124 
  125      open( $IMPL" >$implFileName ") ||  die  " Couldn't open file $implFileName ";
  126      open( $HEADER" >$headerFileName ") ||  die  " Couldn't open file $headerFileName ";
  127      if ( @depsContent) {
  128          open( $DEPS" >$depsFileName ") ||  die  " Couldn't open file $depsFileName ";
  129     }

   84  sub finish
   85 {   
   86      my  $object =  shift;
   87     
   88      #  Commit changes!
   89      $object->WriteData();
   90 }
 3、 WebKit/qt/Api
dir="";qmake;make;同上
生成include/QtWebKit/目录下文件:qwebframe.h QWebHitTestResult

四、Source/WebKit.pro 生成makefile
1725      $result =  system  " $qmakebin @buildArgs ";

qmake -r OUTPUT_DIR=/root/TestQtWebKit-2.2.0/QtWebKit-2.2.0/WebKitBuild/Debug CONFIG-=release CONFIG+=debug /root/TestQtWebKit-2.2.0/QtWebKit-2.2.0/Source/WebKit.pro
根据 Source/WebKit/qt/ declarative/、Source/WebKit/qt/tests/目录下的所有pro文件生成 WebKitBuild/Debug/WebKit/qt目录下的Makefile文件

五、 Tools/Tools.pro 生成Makefile
qmake -r OUTPUT_DIR=/root/TestQtWebKit-2.2.0/QtWebKit-2.2.0/WebKitBuild/Debug CONFIG-=release CONFIG+=debug /root/TestQtWebKit-2.2.0/QtWebKit-2.2.0/Tools/Tools.pro -o Makefile.Tools

六、 Source/WebKit/qt/examples/examples.pro
qmake -r OUTPUT_DIR=/root/TestQtWebKit-2.2.0/QtWebKit-2.2.0/WebKitBuild/Debug CONFIG-=release CONFIG+=debug /root/TestQtWebKit-2.2.0/QtWebKit-2.2.0/Source/WebKit/qt/examples/examples.pro

七、执行make
Tools/Scripts/webkitdirs.pm
1780        $result =  system  " $make $makeargs ";

如下目录下执行
Source/JavaScriptCore Source/JavaScriptGlue Source/ThirdParty/ANGLE Source/WebCore Source/WebKit Source/WebKit2 Tools
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值