Difference between revisions of "User:Robin Cornelius/standalone qtwebkit"

From Second Life Wiki
Jump to navigation Jump to search
(→‎Part 1 qtwebkit in shared form: "workaround" for MOZ-39 (use unaffected revision))
(Update shared_qt.patch for revision 264 (needed also LINKTARGETPATCH to be commented))
Line 5: Line 5:
First of all you need to grab the latest code for qt/webkit this is in a mecurial (hg) repository and if you install the mecurial tools for your distribution you can then fetch the code with
First of all you need to grab the latest code for qt/webkit this is in a mecurial (hg) repository and if you install the mecurial tools for your distribution you can then fetch the code with
   hg clone http://hg.secondlife.com/llqtwebkit/
   hg clone http://hg.secondlife.com/llqtwebkit/
{{KBnote|please see {{jira|MOZ-39}}.
To get an unaffected revision,
cd llqtwebkit
hg checkout 240
}}


To get this to build some minor changes are required :-
To get this to build some minor changes are required :-


  diff -r d3b5f3a6f6c1 llembeddedbrowserwindow.cpp
  diff -r 808d018bf497 llembeddedbrowserwindow.cpp
  --- a/llembeddedbrowserwindow.cpp Mon Sep 21 14:26:31 2009 -0700
  --- a/llembeddedbrowserwindow.cpp Tue Dec 01 16:01:02 2009 -0800
  +++ b/llembeddedbrowserwindow.cpp Tue Nov 03 20:50:14 2009 +0000
  +++ b/llembeddedbrowserwindow.cpp Thu Dec 10 17:43:04 2009 +0100
  @@ -68,7 +68,7 @@
  @@ -68,7 +68,7 @@
   #include <qdebug.h>
   #include <qdebug.h>
Line 25: Line 20:
   LLEmbeddedBrowserWindow::LLEmbeddedBrowserWindow()
   LLEmbeddedBrowserWindow::LLEmbeddedBrowserWindow()
   {
   {
  diff -r d3b5f3a6f6c1 llnetworkaccessmanager.cpp
  diff -r 808d018bf497 llnetworkaccessmanager.cpp
  --- a/llnetworkaccessmanager.cpp Mon Sep 21 14:26:31 2009 -0700
  --- a/llnetworkaccessmanager.cpp Tue Dec 01 16:01:02 2009 -0800
  +++ b/llnetworkaccessmanager.cpp Tue Nov 03 20:50:14 2009 +0000
  +++ b/llnetworkaccessmanager.cpp Thu Dec 10 17:43:04 2009 +0100
  @@ -75,7 +75,7 @@
  @@ -75,7 +75,7 @@
    
    
Line 46: Line 41:
   }
   }
    
    
  diff -r d3b5f3a6f6c1 llqtwebkit.pro
  diff -r 808d018bf497 llqtwebkit.pro
  --- a/llqtwebkit.pro Mon Sep 21 14:26:31 2009 -0700
  --- a/llqtwebkit.pro Tue Dec 01 16:01:02 2009 -0800
  +++ b/llqtwebkit.pro Tue Nov 03 20:50:14 2009 +0000
  +++ b/llqtwebkit.pro Thu Dec 10 17:43:04 2009 +0100
  @@ -1,4 +1,4 @@
  @@ -1,4 +1,4 @@
  -CONFIG += static
  -CONFIG += static
Line 55: Line 50:
   TARGET =  
   TARGET =  
   DEPENDPATH += .
   DEPENDPATH += .
  diff -r d3b5f3a6f6c1 static.pri
  diff -r 808d018bf497 llwebpage.cpp
  --- a/static.pri Mon Sep 21 14:26:31 2009 -0700
--- a/llwebpage.cpp Tue Dec 01 16:01:02 2009 -0800
  +++ b/static.pri Tue Nov 03 20:50:14 2009 +0000
+++ b/llwebpage.cpp Thu Dec 10 17:43:04 2009 +0100
@@ -42,7 +42,7 @@
  #include "llembeddedbrowserwindow.h"
  #include "llembeddedbrowserwindow_p.h"
 
-#define LINKTARGETPATCH
+//#define LINKTARGETPATCH
 
  LLWebPage::LLWebPage(QObject *parent)
      : QWebPage(parent)
diff -r 808d018bf497 static.pri
  --- a/static.pri Tue Dec 01 16:01:02 2009 -0800
  +++ b/static.pri Thu Dec 10 17:43:04 2009 +0100
  @@ -1,4 +1,5 @@
  @@ -1,4 +1,5 @@
   unix {
   unix {

Revision as of 09:49, 10 December 2009

Instructions for building the qt/webkit media plugin using distribution (shared) qt4, instead of static qt4 that the default LL build uses.

Part 1 qtwebkit in shared form

First of all you need to grab the latest code for qt/webkit this is in a mecurial (hg) repository and if you install the mecurial tools for your distribution you can then fetch the code with

 hg clone http://hg.secondlife.com/llqtwebkit/

To get this to build some minor changes are required :-

diff -r 808d018bf497 llembeddedbrowserwindow.cpp
--- a/llembeddedbrowserwindow.cpp	Tue Dec 01 16:01:02 2009 -0800
+++ b/llembeddedbrowserwindow.cpp	Thu Dec 10 17:43:04 2009 +0100
@@ -68,7 +68,7 @@
 #include <qdebug.h>
 #endif
 
-#define WEBHISTORYPATCH
+//#define WEBHISTORYPATCH
 
 LLEmbeddedBrowserWindow::LLEmbeddedBrowserWindow()
 {
diff -r 808d018bf497 llnetworkaccessmanager.cpp
--- a/llnetworkaccessmanager.cpp	Tue Dec 01 16:01:02 2009 -0800
+++ b/llnetworkaccessmanager.cpp	Thu Dec 10 17:43:04 2009 +0100
@@ -75,7 +75,7 @@
 
 void LLNetworkAccessManager::authenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator)
 {
-    authenticator->tryAgainLater = true;
+    //authenticator->tryAgainLater = true;
     AuthDialog authDialog;
     int i;
     for (i = 0; i < authDialogs.count(); ++i) {
@@ -107,7 +107,7 @@
         authDialog.authenticationDialog->deleteLater();
         authDialog.authenticationDialog = 0;
         authDialogs.removeAt(i);
-        authenticator->tryAgainLater = false;
+        //authenticator->tryAgainLater = false;
     }
 }
 
diff -r 808d018bf497 llqtwebkit.pro
--- a/llqtwebkit.pro	Tue Dec 01 16:01:02 2009 -0800
+++ b/llqtwebkit.pro	Thu Dec 10 17:43:04 2009 +0100
@@ -1,4 +1,4 @@
-CONFIG += static
+CONFIG += shared
 TEMPLATE = lib
 TARGET = 
 DEPENDPATH += .
diff -r 808d018bf497 llwebpage.cpp
--- a/llwebpage.cpp	Tue Dec 01 16:01:02 2009 -0800
+++ b/llwebpage.cpp	Thu Dec 10 17:43:04 2009 +0100
@@ -42,7 +42,7 @@
 #include "llembeddedbrowserwindow.h"
 #include "llembeddedbrowserwindow_p.h"
 
-#define LINKTARGETPATCH
+//#define LINKTARGETPATCH
 
 LLWebPage::LLWebPage(QObject *parent)
     : QWebPage(parent)
diff -r 808d018bf497 static.pri
--- a/static.pri	Tue Dec 01 16:01:02 2009 -0800
+++ b/static.pri	Thu Dec 10 17:43:04 2009 +0100
@@ -1,4 +1,5 @@
 unix {
-    DEFINES += STATIC_QT
-    QTPLUGIN += qgif
+    #DEFINES += STATIC_QT
+    #QTPLUGIN += qgif
+    QMAKE_LFLAGS_SHLIB *= "--rpath=/usr/lib/qt4/plugins/imageformats"
 }

This disables some features that are not avaiable in current qt4/ and in the case of the prepend patch will never be avaiable and also changes the build to use a shared qt4

To apply the above as a patch copy it to a local file, eg shared_qt.patch then from the llqtwebkit folder run :-

patch -p1 < shared_qt.patch

After sucessfully patching the code you can build with

qmake-qt4
make

This will produce a libqtwebkit.so and some symlinks to the library with so name versions. To install the quick and easy way is to

cp *.so /usr/local/lib/
cp llqtwebkit.h /usr/local/include/

Note that installation is necessary; using an CXXFLAGS that includes the header directly from the source tree will fail because the project contains a header (llstyle.h) with the same name as an already existing header file of the viewer, and compilation of the viewer will break.

Part 2 Patching the viewer to use a shared libqtwebkit

The following patch needs to be applied to viewer code older than SVN revision 2976, to only link against libqtwebkit. It is already included in snowglobe 1.2 (revision 2976 and higher).

Index: indra/cmake/WebKitLibPlugin.cmake
===================================================================
--- indra/cmake/WebKitLibPlugin.cmake	(revision 2973)
+++ indra/cmake/WebKitLibPlugin.cmake	(working copy)
@@ -34,30 +34,34 @@
         debug ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib
         )
 elseif (LINUX)
-    set(WEBKIT_PLUGIN_LIBRARIES
-        llqtwebkit
+    if (STANDALONE)
+       set(WEBKIT_PLUGIN_LIBRARIES llqtwebkit)
+    else (STANDALONE)
+       set(WEBKIT_PLUGIN_LIBRARIES
+           llqtwebkit
 
-        qgif
-#        qico
-        qjpeg
-#        qpng
-#        qtiff
-#        qsvg
+           qgif
+#           qico
+           qjpeg
+#           qpng
+#           qtiff
+#           qsvg
 
-#        QtSvg
-        QtWebKit
-        QtOpenGL
-        QtNetwork
-        QtGui
-        QtCore
+#           QtSvg
+           QtWebKit
+           QtOpenGL
+           QtNetwork
+           QtGui
+           QtCore
 
-        fontconfig
-        X11
-        Xrender
-        GL
+           fontconfig
+           X11
+           Xrender
+           GL
 
-#        sqlite3
-#        Xi
-#        SM
-        )
+#           sqlite3
+#           Xi
+#           SM
+           )
+    endif (STANDALONE)
 endif (WINDOWS)