From b11c6de9abfcf373f985b2c6629f34ec28b81ea6 Mon Sep 17 00:00:00 2001 From: Ariya Hidayat Date: Fri, 27 Jul 2012 20:58:15 -0700 Subject: [PATCH] WIP: Get the PhantomJS+Qt build for MSVC working. http://code.google.com/p/phantomjs/issues/detail?id=598 http://code.google.com/p/phantomjs/issues/detail?id=424 --- src/linenoise/src/linenoise.c | 2 +- src/main.cpp | 25 +++++++ src/phantomjs.pro | 11 +++ src/qt/bin/syncqt | 21 +----- src/qt/mkspecs/win32-msvc2008/qmake.conf | 6 +- src/qt/preconfig.cmd | 70 +++++++++++++++++++ .../webkit/Source/WebCore/page/Console.h | 2 +- src/qt/src/3rdparty/webkit/Source/WebKit.pro | 2 - .../webkit/Source/WebKit/qt/QtWebKit.pro | 2 + src/qt/src/gui/accessible/qaccessible_win.cpp | 5 +- src/qt/src/gui/gui.pro | 1 - .../qwinnativepangesturerecognizer_win.cpp | 2 + src/qt/src/gui/painting/qpaintengine.h | 2 +- .../src/network/kernel/qnetworkproxy_win.cpp | 1 - src/qt/src/src.pro | 2 - src/qt/src/tools/tools.pro | 1 - 16 files changed, 121 insertions(+), 34 deletions(-) create mode 100644 src/qt/preconfig.cmd diff --git a/src/linenoise/src/linenoise.c b/src/linenoise/src/linenoise.c index a8c858e8..bac2491e 100644 --- a/src/linenoise/src/linenoise.c +++ b/src/linenoise/src/linenoise.c @@ -542,7 +542,7 @@ static int outputChars(struct current *current, const char *buf, int len) COORD pos = { current->x, current->y }; DWORD n; - WriteConsoleOutputCharacter(current->outh, buf, len, pos, &n); + WriteConsoleOutputCharacterA(current->outh, buf, len, pos, &n); current->x += len; return 0; } diff --git a/src/main.cpp b/src/main.cpp index ebd27142..04ee580d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -41,6 +41,31 @@ #include +#if !defined(QT_SHARED) && !defined(QT_DLL) +#include + +// HACK: When linking a static PhantomJS + MSVC agains the +// static Qt included in PhantomJS, we get linker errors. +// This noop function can cure them. +#include +#include +#include +void makeLinkerHappy() +{ + QWidget().colorCount(); + QUuid().createUuid(); + QPainter().drawImage(QPointF(), QImage(), QRect()); + const QXmlStreamAttributes foo; + foo[0]; +} +// End of linker hack. + +Q_IMPORT_PLUGIN(qcncodecs) +Q_IMPORT_PLUGIN(qjpcodecs) +Q_IMPORT_PLUGIN(qkrcodecs) +Q_IMPORT_PLUGIN(qtwcodecs) +#endif + #if QT_VERSION != QT_VERSION_CHECK(4, 8, 2) #error Something is wrong with the setup. Please report to the mailing list! #endif diff --git a/src/phantomjs.pro b/src/phantomjs.pro index db6bde13..a704623f 100644 --- a/src/phantomjs.pro +++ b/src/phantomjs.pro @@ -105,3 +105,14 @@ mac { # Uncomment to build a Mac OS X Universal Binary (i.e. x86 + ppc) # CONFIG += x86 ppc } + +CONFIG(static) { + DEFINES += STATIC_BUILD + QTPLUGIN += \ + qcncodecs \ + qjpcodecs \ + qkrcodecs \ + qtwcodecs +} + +win32-msvc*:LIBS += -lCrypt32 diff --git a/src/qt/bin/syncqt b/src/qt/bin/syncqt index 05c4dfc5..7596bda8 100755 --- a/src/qt/bin/syncqt +++ b/src/qt/bin/syncqt @@ -30,28 +30,10 @@ my $basedir = $ENV{"QTDIR"}; $basedir =~ s=\\=/=g; my %modules = ( # path to module name map "QtGui" => "$basedir/src/gui", - "QtOpenGL" => "$basedir/src/opengl", - "QtOpenVG" => "$basedir/src/openvg", "QtCore" => "$basedir/src/corelib", "QtXml" => "$basedir/src/xml", - "QtXmlPatterns" => "$basedir/src/xmlpatterns", - "QtSql" => "$basedir/src/sql", "QtNetwork" => "$basedir/src/network", - "QtSvg" => "$basedir/src/svg", - "QtDeclarative" => "$basedir/src/declarative", - "QtScript" => "$basedir/src/script", - "QtScriptTools" => "$basedir/src/scripttools", - "Qt3Support" => "$basedir/src/qt3support", - "ActiveQt" => "$basedir/src/activeqt", - "QtTest" => "$basedir/src/testlib", - "QtHelp" => "$basedir/tools/assistant/lib", - "QtDesigner" => "$basedir/tools/designer/src/lib", - "QtUiTools" => "$basedir/tools/designer/src/uitools", - "QtDBus" => "$basedir/src/dbus", "QtWebKit" => "$basedir/src/3rdparty/webkit/Source/WebKit/qt", - "phonon" => "$basedir/src/phonon", - "QtMultimedia" => "$basedir/src/multimedia", - "QtMeeGoGraphicsSystemHelper" => "$basedir/tools/qmeegographicssystemhelper", ); my %moduleheaders = ( # restrict the module headers to those found in relative path "QtWebKit" => "Api", @@ -694,7 +676,7 @@ my @ignore_for_master_contents = ( "qt.h", "qpaintdevicedefs.h" ); my @ignore_for_include_check = ( "qatomic.h" ); my @ignore_for_qt_begin_header_check = ( "qiconset.h", "qconfig.h", "qconfig-dist.h", "qconfig-large.h", "qconfig-medium.h", "qconfig-minimal.h", "qconfig-small.h", "qfeatures.h", "qt_windows.h" ); my @ignore_for_qt_begin_namespace_check = ( "qconfig.h", "qconfig-dist.h", "qconfig-large.h", "qconfig-medium.h", "qconfig-minimal.h", "qconfig-small.h", "qfeatures.h", "qatomic_arch.h", "qatomic_windowsce.h", "qt_windows.h", "qatomic_macosx.h", "qatomic_arm.h", "qatomic_armv7.h" ); -my @ignore_for_qt_module_check = ( "$modules{QtCore}/arch", "$modules{QtCore}/global", "$modules{QtSql}/drivers", "$modules{QtTest}", "$modules{QtDesigner}", "$modules{QtUiTools}", "$modules{QtDBus}", "$modules{phonon}" ); +my @ignore_for_qt_module_check = ( "$modules{QtCore}/arch", "$modules{QtCore}/global" ); my %colliding_headers = (); my %inject_headers = ( "$basedir/src/corelib/global" => ( "qconfig.h" ) ); # all from build dir @@ -740,7 +722,6 @@ foreach my $lib (@modules_to_sync) { $master_contents .= "#include \n" if($_ eq "core"); $master_contents .= "#include \n" if($_ eq "gui"); $master_contents .= "#include \n" if($_ eq "network"); - $master_contents .= "#include \n" if($_ eq "svg"); $master_contents .= "#include \n" if($_ eq "declarative"); $master_contents .= "#include \n" if($_ eq "script"); $master_contents .= "#include \n" if($_ eq "scripttools"); diff --git a/src/qt/mkspecs/win32-msvc2008/qmake.conf b/src/qt/mkspecs/win32-msvc2008/qmake.conf index c7655626..b846e20e 100644 --- a/src/qt/mkspecs/win32-msvc2008/qmake.conf +++ b/src/qt/mkspecs/win32-msvc2008/qmake.conf @@ -19,9 +19,9 @@ QMAKE_YACCFLAGS = -d QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t- QMAKE_CFLAGS_WARN_ON = -W3 QMAKE_CFLAGS_WARN_OFF = -W0 -QMAKE_CFLAGS_RELEASE = -O2 -MD -QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi -QMAKE_CFLAGS_DEBUG = -Zi -MDd +QMAKE_CFLAGS_RELEASE = -O2 -MT +QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi +QMAKE_CFLAGS_DEBUG = -Zi -MTd QMAKE_CFLAGS_YACC = QMAKE_CFLAGS_LTCG = -GL QMAKE_CFLAGS_MP = -MP diff --git a/src/qt/preconfig.cmd b/src/qt/preconfig.cmd new file mode 100644 index 00000000..04524496 --- /dev/null +++ b/src/qt/preconfig.cmd @@ -0,0 +1,70 @@ +@echo off + +set QT_CFG= + +set QT_CFG=%QT_CFG% -opensource +set QT_CFG=%QT_CFG% -confirm-license + +set QT_CFG=%QT_CFG% -release +set QT_CFG=%QT_CFG% -static + +set QT_CFG=%QT_CFG% -no-exceptions +set QT_CFG=%QT_CFG% -no-stl +set QT_CFG=%QT_CFG% -no-xmlpatterns +set QT_CFG=%QT_CFG% -no-phonon +set QT_CFG=%QT_CFG% -no-qt3support +set QT_CFG=%QT_CFG% -no-opengl +set QT_CFG=%QT_CFG% -no-declarative +set QT_CFG=%QT_CFG% -no-script +set QT_CFG=%QT_CFG% -no-multimedia + +set QT_CFG=%QT_CFG% -qt-libpng +set QT_CFG=%QT_CFG% -qt-libjpeg +set QT_CFG=%QT_CFG% -no-libmng +set QT_CFG=%QT_CFG% -no-libtiff + +set QT_CFG=%QT_CFG% -D QT_NO_GRAPHICSVIEW +set QT_CFG=%QT_CFG% -D QT_NO_GRAPHICSEFFECT +rem set QT_CFG=%QT_CFG% -D QT_NO_NATIVE_GESTURES + +set QT_CFG=%QT_CFG% -D QT_NO_STYLE_CDE +set QT_CFG=%QT_CFG% -D QT_NO_STYLE_CLEANLOOKS +set QT_CFG=%QT_CFG% -D QT_NO_STYLE_MOTIF +set QT_CFG=%QT_CFG% -D QT_NO_STYLE_PLASTIQUE + +set QT_CFG=%QT_CFG% -nomake demos +set QT_CFG=%QT_CFG% -nomake examples +set QT_CFG=%QT_CFG% -nomake tools +set QT_CFG=%QT_CFG% -nomake translations + +set OPEN_SSL_DIR=d:\ownprojects\OpenSSL + +set QT_CFG=%QT_CFG% -openssl-linked +set QT_CFG=%QT_CFG% -I %OPEN_SSL_DIR%\include +set QT_CFG=%QT_CFG% -L %OPEN_SSL_DIR%\lib +set QT_CFG=%QT_CFG% -l libeay32 +set QT_CFG=%QT_CFG% -l ssleay32 +set QT_CFG=%QT_CFG% OPENSSL_LIBS="-L%OPEN_SSL_DIR%\lib -lssleay32 -llibeay32 -luser32 -lgdi32" + +set MAKE_COMMAND=nmake +rem set QT_CFG=%QT_CFG% -make %MAKE_COMMAND% + +configure %QT_CFG% + +%MAKE_COMMAND% + +cd src\plugins\codecs\ +..\..\..\bin\qmake -r +%MAKE_COMMAND% +cd ..\..\..\ + +cd src\3rdparty\webkit\Source\ +..\..\..\..\bin\qmake -r +%MAKE_COMMAND% +cd ..\..\..\..\ + +set PHANTOMJSDIR=..\..\ +md %PHANTOMJSDIR%\..\JavaScriptCore\release +copy src\3rdparty\webkit\Source\JavaScriptCore\release %PHANTOMJSDIR%\..\JavaScriptCore\release\ +md %PHANTOMJSDIR%\..\WebCore\release +copy src\3rdparty\webkit\Source\WebCore\release %PHANTOMJSDIR%\..\WebCore\release\ diff --git a/src/qt/src/3rdparty/webkit/Source/WebCore/page/Console.h b/src/qt/src/3rdparty/webkit/Source/WebCore/page/Console.h index cc0d32b8..3287582b 100644 --- a/src/qt/src/3rdparty/webkit/Source/WebCore/page/Console.h +++ b/src/qt/src/3rdparty/webkit/Source/WebCore/page/Console.h @@ -33,6 +33,7 @@ #include "PlatformString.h" #include "ScriptProfile.h" #include "ScriptState.h" +#include "../inspector/ScriptCallStack.h" #include #include @@ -48,7 +49,6 @@ typedef Vector > ProfilesArray; class Frame; class Page; -class ScriptCallStack; enum MessageSource { HTMLMessageSource, diff --git a/src/qt/src/3rdparty/webkit/Source/WebKit.pro b/src/qt/src/3rdparty/webkit/Source/WebKit.pro index abbccf71..a98a5f4b 100644 --- a/src/qt/src/3rdparty/webkit/Source/WebKit.pro +++ b/src/qt/src/3rdparty/webkit/Source/WebKit.pro @@ -32,5 +32,3 @@ symbian { install.commands = $(MAKE) -C WebCore install QMAKE_EXTRA_TARGETS += install } - -include(WebKit/qt/docs/docs.pri) diff --git a/src/qt/src/3rdparty/webkit/Source/WebKit/qt/QtWebKit.pro b/src/qt/src/3rdparty/webkit/Source/WebKit/qt/QtWebKit.pro index 7e0b0d2d..bf2bbeb6 100644 --- a/src/qt/src/3rdparty/webkit/Source/WebKit/qt/QtWebKit.pro +++ b/src/qt/src/3rdparty/webkit/Source/WebKit/qt/QtWebKit.pro @@ -63,6 +63,8 @@ win32*:!win32-msvc* { contains(DEFINES, ENABLE_WEBGL=1)|contains(CONFIG, texmap): LIBS += $$QMAKE_LIBS_OPENGL } +win32-msvc*:LIBS += -lAdvapi32 + include_webinspector: RESOURCES += $$SOURCE_DIR/WebCore/inspector/front-end/WebKit.qrc $$WC_GENERATED_SOURCES_DIR/InspectorBackendStub.qrc # Extract sources to build from the generator definitions diff --git a/src/qt/src/gui/accessible/qaccessible_win.cpp b/src/qt/src/gui/accessible/qaccessible_win.cpp index bb5cf693..9747d86f 100644 --- a/src/qt/src/gui/accessible/qaccessible_win.cpp +++ b/src/qt/src/gui/accessible/qaccessible_win.cpp @@ -369,6 +369,7 @@ void QAccessible::updateAccessibility(QObject *o, int who, Event reason) if (w->internalWinId()) break; } +#ifndef QT_NO_GRAPHICSVIEW if (QGraphicsObject *gfxObj = qobject_cast(p)) { QGraphicsItem *parentItem = gfxObj->parentItem(); if (parentItem) { @@ -384,7 +385,9 @@ void QAccessible::updateAccessibility(QObject *o, int who, Event reason) } p = view; } - } else { + } else +#endif // QT_NO_GRAPHICSVIEW + { p = p->parent(); } diff --git a/src/qt/src/gui/gui.pro b/src/qt/src/gui/gui.pro index 8f72fead..c42692b3 100644 --- a/src/qt/src/gui/gui.pro +++ b/src/qt/src/gui/gui.pro @@ -41,7 +41,6 @@ include(statemachine/statemachine.pri) include(math3d/math3d.pri) include(effects/effects.pri) -include(egl/egl.pri) win32:!wince*: DEFINES += QT_NO_EGL embedded: QT += network diff --git a/src/qt/src/gui/kernel/qwinnativepangesturerecognizer_win.cpp b/src/qt/src/gui/kernel/qwinnativepangesturerecognizer_win.cpp index 86f2ffa5..8430bb4b 100644 --- a/src/qt/src/gui/kernel/qwinnativepangesturerecognizer_win.cpp +++ b/src/qt/src/gui/kernel/qwinnativepangesturerecognizer_win.cpp @@ -66,8 +66,10 @@ QGesture *QWinNativePanGestureRecognizer::create(QObject *target) return new QPanGesture; // a special case if (!target->isWidgetType()) return 0; +#ifndef QT_NO_GRAPHICSVIEW if (qobject_cast(target)) return 0; +#endif // QT_NO_GRAPHICSVIEW QWidget *q = static_cast(target); QWidgetPrivate *d = q->d_func(); diff --git a/src/qt/src/gui/painting/qpaintengine.h b/src/qt/src/gui/painting/qpaintengine.h index 4625ad29..ebb56f63 100644 --- a/src/qt/src/gui/painting/qpaintengine.h +++ b/src/qt/src/gui/painting/qpaintengine.h @@ -172,7 +172,7 @@ public: virtual void addCheckBox(const QRectF &r, bool checked, const QString &name, bool readOnly) { Q_UNUSED(r); Q_UNUSED(checked); Q_UNUSED(name); Q_UNUSED(readOnly); } - virtual void addRadioButton(const QRectF &r, const QString & group="", bool checked=false, const QString &name="", bool readOnly=false) { + virtual void addRadioButton(const QRectF &r, const QString &group = QString(), bool checked = false, const QString &name = QString(), bool readOnly = false) { Q_UNUSED(r); Q_UNUSED(checked); Q_UNUSED(name); Q_UNUSED(readOnly); Q_UNUSED(group); } diff --git a/src/qt/src/network/kernel/qnetworkproxy_win.cpp b/src/qt/src/network/kernel/qnetworkproxy_win.cpp index 90aae0af..89ea29d8 100644 --- a/src/qt/src/network/kernel/qnetworkproxy_win.cpp +++ b/src/qt/src/network/kernel/qnetworkproxy_win.cpp @@ -53,7 +53,6 @@ #include #include #include -#include "qnetworkfunctions_wince.h" /* * Information on the WinHTTP DLL: diff --git a/src/qt/src/src.pro b/src/qt/src/src.pro index 70e7341f..413acbab 100644 --- a/src/qt/src/src.pro +++ b/src/qt/src/src.pro @@ -11,14 +11,12 @@ nacl: SRC_SUBDIRS -= src_network src_testlib !wince*:!symbian:!vxworks:!integrity:contains(QT_CONFIG, qt3support): SRC_SUBDIRS += src_qt3support !wince*:!symbian-abld:!symbian-sbsv2:include(tools/tools.pro) -win32:SRC_SUBDIRS += src_activeqt contains(QT_CONFIG, opengl)|contains(QT_CONFIG, opengles1)|contains(QT_CONFIG, opengles2): SRC_SUBDIRS += src_opengl contains(QT_CONFIG, openvg): SRC_SUBDIRS += src_openvg contains(QT_CONFIG, xmlpatterns): SRC_SUBDIRS += src_xmlpatterns contains(QT_CONFIG, phonon): SRC_SUBDIRS += src_phonon contains(QT_CONFIG, multimedia): SRC_SUBDIRS += src_multimedia -contains(QT_CONFIG, svg): SRC_SUBDIRS += src_svg contains(QT_CONFIG, script): SRC_SUBDIRS += src_script contains(QT_CONFIG, declarative): SRC_SUBDIRS += src_declarative contains(QT_CONFIG, webkit) { diff --git a/src/qt/src/tools/tools.pro b/src/qt/src/tools/tools.pro index 32b920c2..28c8ca4e 100644 --- a/src/qt/src/tools/tools.pro +++ b/src/qt/src/tools/tools.pro @@ -4,7 +4,6 @@ TOOLS_SUBDIRS = src_tools_bootstrap src_tools_moc src_tools_rcc !contains(QT_CONFIG, no-gui): TOOLS_SUBDIRS += src_tools_uic !cross_compile { contains(QT_CONFIG, qt3support): SRC_SUBDIRS += src_tools_uic3 - win32:!wince*:!win32-g++*: SRC_SUBDIRS += src_tools_idc } # Set subdir and respective target name