[[PageOutline]] = Building the Qt port on Linux = These instructions apply to Ubuntu Linux 6.10 (Edgy Eft) and Ark Linux. == Dependencies == The code should be easily built on any Linux distribution which has development packages for Qt installed. The Qt port requires Qt version 4, and 4.2 is recommended. === Installing dependencies on Ubuntu Edgy === To install required dependencies on Ubuntu edgy, do {{{ sudo aptitude install libqt4-dev }}} or install the libqt4-dev package from Synaptic. You might also need to install gperf, libxslt1-dev, and bison to resolve some dependencies. {{{ sudo aptitude install gperf libxslt-dev bison flex }}} === Installing dependencies on Ark Linux === On Ark Linux, install the required dependencies using {{{ apt-get install devel-core qt4-devel qmake gperf libxslt-devel bison sqlite-devel }}} Alternatively, install the needed packages (see list above) through Mission Control -> Install Software. == Build WebKit == You'll then need to [http://webkit.org/building/checkout.html check out the source code from Subversion]. The Qt port is part of the WebKit source tree, so you don't need anything extra. Finally, set the QTDIR environment variable to Qt 4.x's installation path (`/usr/lib/qt4` on Ark Linux, `/usr/share/qt4` on *Ubuntu), and make sure Qt 4.x's qmake is the first qmake in your PATH (typically by running `export PATH=$QTDIR/bin:$PATH`). Build WebKit and the Qt test browser with {{{ WebKit/WebKitTools/Scripts/build-webkit }}} == Testing the port == A very simple test browser is built at WebKit/WebKitBuild/Release/WebKitQt/QtLauncher/QtLauncher. == Common Build Errors == === Missing gperf === {{{ ../../../WebCore/html/HTMLDocument.cpp: In member function 'virtual void WebCore::HTMLDocument::determineParseMode(const WebCore::String&)': ../../../WebCore/html/HTMLDocument.cpp:389: error: expected initializer before '*' token ../../../WebCore/html/HTMLDocument.cpp:390: error: 'doctypeEntry' was not declared in this scope ../../../WebCore/html/HTMLDocument.cpp:398: error: 'doctypeEntry' was not declared in this scope ../../../WebCore/html/HTMLDocument.cpp:401: error: 'PubIDInfo' has not been declared ../../../WebCore/html/HTMLDocument.cpp:405: error: 'PubIDInfo' has not been declared }}} This error is typically caused by not having `gperf` installed. Install `gperf`, run `touch WebCore/html/DocTypeStrings.gperf` and try building WebKit again. === Missing SQLite development package === {{{ ../../../WebCore/loader/icon/SQLDatabase.cpp:30:21: error: sqlite3.h: No such file or directory ../../../WebCore/loader/icon/SQLDatabase.cpp:36: error: "SQLITE_ERROR" was not declared in this scope ../../../WebCore/loader/icon/SQLDatabase.cpp:37: error: "SQLITE_DONE" was not declared in this scope ../../../WebCore/loader/icon/SQLDatabase.cpp:38: error: "SQLITE_OK" was not declared in this scope ../../../WebCore/loader/icon/SQLDatabase.cpp:39: error: "SQLITE_ROW" was not declared in this scope }}} This error is typically caused by not having the development component of `libsqlite3` installed. Install the development package and try building WebKit again. === Missing flex === {{{ .../WebKitBuild/Release/lib/libWebKitQt.so: undefined reference to `WebCore::CSSParser::lex()' }}} This error is typically caused by not having `flex` installed. Install `flex`, run `touch WebCore/css/tokenizer.flex` and try building WebKit again. === Incompatible version of bison === {{{ bison -d -p kjsyy JavaScriptCore/kjs/grammar.y -o grammar.tab.c && mv grammar.tab.c tmp/grammar.cpp && mv grammar.tab.h tmp/grammar.h JavaScriptCore/kjs/grammar.y:364.3-366.9: type clash (`node' `') on default action JavaScriptCore/kjs/grammar.y:366.10: parse error, unexpected ":", expecting ";" or "|" }}} This error is caused by having an incompatible version of `bison` installed. The single reported case of this error occurred with `bison` 1.75, and was resolved by updating to `bison` 2.3.