blob: ddc73578df0dbb1135a3c549ed25b66a72fd799e [file] [log] [blame]
# -------------------------------------------------------------------
# Project file for the QtWebKit C++ APIs
#
# See 'Tools/qmake/README' for an overview of the build system
# -------------------------------------------------------------------
TEMPLATE = lib
TARGET = QtWebKit
WEBKIT_DESTDIR = $${ROOT_BUILD_DIR}/lib
haveQt(5) {
# Use Qt5's module system
load(qt_module)
MODULE = webkit
MODULE_PRI = $$QT.webkit.module_pri
CONFIG += module
BASE_TARGET = $$TARGET
load(qt_module_config)
# Make sure the module config doesn't override our preferred build config
debug_and_release:if(!debug|!release): CONFIG -= debug_and_release
# Allow doing a debug-only build of WebKit (not supported by Qt)
macx:!debug_and_release:debug: TARGET = $$BASE_TARGET
# ---------------- Custom developer-build handling -------------------
#
# The assumption for Qt developer builds is that the module file
# will be put into qtbase/mkspecs/modules, and the libraries into
# qtbase/lib, with rpath/install_name set to the Qt lib dir.
#
# For WebKit we don't want that behavior for the libraries, as we want
# them to be self-contained in the WebKit build dir. To achive that we
# trick Qt into thinking it's not a developer build, but setting QTDIR
# to a bogus path in default_pre.prf.
#
# We still want the module file to live in the Qt dir so the module can
# be used by setting QT += webkit, so we copy the file manually. We also
# have to make sure the rpath/install_name of the libraries are relative
# to the webkit build dir.
# We use private_tests to detect developer build, since the destdir will
# always be our webkit build dir. This might change as configure changes.
contains(QT_CONFIG, private_tests): CONFIG += qt_developer_build
!build_pass {
# Make a more accessible copy of the module forward file
# in the WebKit build directory.
convenience_module_path = $${ROOT_BUILD_DIR}/modules
module_filename = $$basename(QT.webkit.module_pri)
# The QMAKE_EXTRA_MODULE_FORWARDS might contain more than one path,
# so we iterate the paths and find one that matches our build dir.
for(module_forward, QMAKE_EXTRA_MODULE_FORWARDS) {
in_build_dir = $$find(module_forward, ^$${ROOT_BUILD_DIR})
!isEmpty(in_build_dir) {
webkit_module_forward = $$module_forward
break()
}
}
isEmpty(webkit_module_forward) {
warning(Could not resolve QMAKE_EXTRA_MODULE_FORWARDS path!)
} else {
make_module_fwd_convenience.target = $$convenience_module_path/$$module_filename
make_module_fwd_convenience.commands = $$QMAKE_MKDIR $$convenience_module_path \
&& echo \"include($$webkit_module_forward/$$module_filename)\" > $$convenience_module_path/$$module_filename
make_module_fwd_convenience.depends = $$webkit_module_forward/$$module_filename
QMAKE_EXTRA_TARGETS += make_module_fwd_convenience
DEFAULT_TARGETS += make_module_fwd_convenience
}
qt_developer_build {
# Copy the module forward file into Qt so that the module
# is immediately accessible.
qt_modules_path = $$[QT_INSTALL_PREFIX]/mkspecs/modules
copy_module_fwd_file.target = $$qt_modules_path/$$module_filename
copy_module_fwd_file.commands = $$QMAKE_COPY $$QMAKE_EXTRA_MODULE_FORWARDS/$$module_filename $$qt_modules_path
# FIXME: Add dependendy that ensures we copy the forward file if the target is updated
copy_module_fwd_file.depends = $$QMAKE_EXTRA_MODULE_FORWARDS/$$module_filename
QMAKE_EXTRA_TARGETS += copy_module_fwd_file
DEFAULT_TARGETS += copy_module_fwd_file
}
}
# Make sure the install_name of the QtWebKit library point to webkit
macx {
# We do our own absolute path so that we can trick qmake into
# using the webkit build path instead of the Qt install path.
CONFIG -= absolute_library_soname
QMAKE_LFLAGS_SONAME = $$QMAKE_LFLAGS_SONAME$$WEBKIT_DESTDIR/
!debug_and_release|build_pass {
# We also have to make sure the install_name is correct when
# the library is installed.
change_install_name.depends = install_target
# The install rules generated by qmake for frameworks are busted in
# that both the debug and the release makefile copy QtWebKit.framework
# into the install dir, so whatever changes we did to the release library
# will get overwritten when the debug library is installed. We work around
# that by running install_name on both, for both configs.
change_install_name.commands = framework_dir=\$\$(dirname $(TARGETD)); \
for file in \$\$(ls $$[QT_INSTALL_LIBS]/\$\$framework_dir/$$BASE_TARGET*); do \
install_name_tool -id \$\$file \$\$file; \
done
default_install_target.target = install
default_install_target.depends += change_install_name
QMAKE_EXTRA_TARGETS += change_install_name default_install_target
}
}
} else {
VERSION = $$QT_VERSION
DESTDIR = $$WEBKIT_DESTDIR
}
runSyncQt() # Generate forwarding headers for the QtWebKit API
load(features)
include(WebKit/WebKit.pri)
WEBKIT += wtf
!v8:WEBKIT += javascriptcore
WEBKIT += webcore
!no_webkit2 {
WEBKIT += webkit2
QT += declarative
# Ensure that changes to the WebKit2 API will trigger a qmake of this
# file, which in turn runs syncqt to update the forwarding headers.
QMAKE_INTERNAL_INCLUDED_FILES *= WebKit2/Target.pri
}
QT += network
haveQt(5): QT += widgets printsupport quick
contains(DEFINES, WTF_USE_TEXTURE_MAPPER_GL=1)|contains(DEFINES, ENABLE_WEBGL=1) {
QT *= opengl
# Make sure OpenGL libs are after the webcore lib so MinGW can resolve symbols
win32*:!win32-msvc*: LIBS += $$QMAKE_LIBS_OPENGL
}
!static: DEFINES += QT_MAKEDLL
SOURCES += \
$$PWD/WebKit/qt/WebCoreSupport/QtFallbackWebPopup.cpp \
$$PWD/WebKit/qt/WebCoreSupport/QtWebComboBox.cpp \
$$PWD/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp \
$$PWD/WebKit/qt/WebCoreSupport/ContextMenuClientQt.cpp \
$$PWD/WebKit/qt/WebCoreSupport/DragClientQt.cpp \
$$PWD/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp \
$$PWD/WebKit/qt/WebCoreSupport/EditorClientQt.cpp \
$$PWD/WebKit/qt/WebCoreSupport/UndoStepQt.cpp \
$$PWD/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp \
$$PWD/WebKit/qt/WebCoreSupport/FrameNetworkingContextQt.cpp \
$$PWD/WebKit/qt/WebCoreSupport/GeolocationPermissionClientQt.cpp \
$$PWD/WebKit/qt/WebCoreSupport/InitWebCoreQt.cpp \
$$PWD/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp \
$$PWD/WebKit/qt/WebCoreSupport/InspectorServerQt.cpp \
$$PWD/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp \
$$PWD/WebKit/qt/WebCoreSupport/PageClientQt.cpp \
$$PWD/WebKit/qt/WebCoreSupport/PopupMenuQt.cpp \
$$PWD/WebKit/qt/WebCoreSupport/QtPlatformPlugin.cpp \
$$PWD/WebKit/qt/WebCoreSupport/RenderThemeQStyle.cpp \
$$PWD/WebKit/qt/WebCoreSupport/ScrollbarThemeQStyle.cpp \
$$PWD/WebKit/qt/WebCoreSupport/SearchPopupMenuQt.cpp \
$$PWD/WebKit/qt/WebCoreSupport/TextCheckerClientQt.cpp \
$$PWD/WebKit/qt/WebCoreSupport/PlatformStrategiesQt.cpp \
$$PWD/WebKit/qt/WebCoreSupport/WebEventConversion.cpp
HEADERS += \
$$PWD/WebKit/qt/WebCoreSupport/InitWebCoreQt.h \
$$PWD/WebKit/qt/WebCoreSupport/InspectorServerQt.h \
$$PWD/WebKit/qt/WebCoreSupport/QtFallbackWebPopup.h \
$$PWD/WebKit/qt/WebCoreSupport/QtWebComboBox.h \
$$PWD/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h \
$$PWD/WebKit/qt/WebCoreSupport/FrameNetworkingContextQt.h \
$$PWD/WebKit/qt/WebCoreSupport/GeolocationPermissionClientQt.h \
$$PWD/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h \
$$PWD/WebKit/qt/WebCoreSupport/PageClientQt.h \
$$PWD/WebKit/qt/WebCoreSupport/PopupMenuQt.h \
$$PWD/WebKit/qt/WebCoreSupport/QtPlatformPlugin.h \
$$PWD/WebKit/qt/WebCoreSupport/RenderThemeQStyle.h \
$$PWD/WebKit/qt/WebCoreSupport/ScrollbarThemeQStyle.h \
$$PWD/WebKit/qt/WebCoreSupport/SearchPopupMenuQt.h \
$$PWD/WebKit/qt/WebCoreSupport/TextCheckerClientQt.h \
$$PWD/WebKit/qt/WebCoreSupport/PlatformStrategiesQt.h \
$$PWD/WebKit/qt/WebCoreSupport/WebEventConversion.h
INCLUDEPATH += \
$$PWD/WebKit/qt/Api \
$$PWD/WebKit/qt/WebCoreSupport \
$$PWD/WTF/wtf/qt
contains(DEFINES, ENABLE_VIDEO=1) {
!contains(DEFINES, WTF_USE_QTKIT=1):!contains(DEFINES, WTF_USE_GSTREAMER=1):contains(DEFINES, WTF_USE_QT_MULTIMEDIA=1) {
HEADERS += $$PWD/WebKit/qt/WebCoreSupport/FullScreenVideoWidget.h
SOURCES += $$PWD/WebKit/qt/WebCoreSupport/FullScreenVideoWidget.cpp
}
contains(DEFINES, WTF_USE_QTKIT=1) | contains(DEFINES, WTF_USE_GSTREAMER=1) | contains(DEFINES, WTF_USE_QT_MULTIMEDIA=1) {
HEADERS += $$PWD/WebKit/qt/WebCoreSupport/FullScreenVideoQt.h
SOURCES += $$PWD/WebKit/qt/WebCoreSupport/FullScreenVideoQt.cpp
}
contains(DEFINES, WTF_USE_QTKIT=1) {
INCLUDEPATH += \
$$PWD/WebCore/platform/qt/ \
$$PWD/WebCore/platform/mac/ \
$$PWD/../WebKitLibraries/
DEFINES += NSGEOMETRY_TYPES_SAME_AS_CGGEOMETRY_TYPES
contains(CONFIG, "x86") {
DEFINES+=NS_BUILD_32_LIKE_64
}
HEADERS += \
$$PWD/WebKit/qt/WebCoreSupport/WebSystemInterface.h \
$$PWD/WebKit/qt/WebCoreSupport/QTKitFullScreenVideoHandler.h
OBJECTIVE_SOURCES += \
$$PWD/WebKit/qt/WebCoreSupport/WebSystemInterface.mm \
$$PWD/WebKit/qt/WebCoreSupport/QTKitFullScreenVideoHandler.mm
LIBS += -framework Security -framework IOKit
# We can know the Mac OS version by using the Darwin major version
DARWIN_VERSION = $$split(QMAKE_HOST.version, ".")
DARWIN_MAJOR_VERSION = $$first(DARWIN_VERSION)
equals(DARWIN_MAJOR_VERSION, "11") {
LIBS += $${ROOT_WEBKIT_DIR}/WebKitLibraries/libWebKitSystemInterfaceLion.a
} else:equals(DARWIN_MAJOR_VERSION, "10") {
LIBS += $${ROOT_WEBKIT_DIR}/WebKitLibraries/libWebKitSystemInterfaceSnowLeopard.a
} else:equals(DARWIN_MAJOR_VERSION, "9") {
LIBS += $${ROOT_WEBKIT_DIR}/WebKitLibraries/libWebKitSystemInterfaceLeopard.a
}
}
}
contains(DEFINES, ENABLE_ICONDATABASE=1) {
HEADERS += \
$$PWD/WebCore/loader/icon/IconDatabaseClient.h \
$$PWD/WebKit/qt/WebCoreSupport/IconDatabaseClientQt.h
SOURCES += \
$$PWD/WebKit/qt/WebCoreSupport/IconDatabaseClientQt.cpp
}
contains(DEFINES, ENABLE_DEVICE_ORIENTATION=1) || contains(DEFINES, ENABLE_ORIENTATION_EVENTS=1) {
haveQt(5) {
QT += sensors
} else {
CONFIG *= mobility
MOBILITY *= sensors
}
}
contains(DEFINES, ENABLE_GEOLOCATION=1) {
haveQt(5): QT += location
HEADERS += \
$$PWD/WebKit/qt/WebCoreSupport/GeolocationClientQt.h
SOURCES += \
$$PWD/WebKit/qt/WebCoreSupport/GeolocationClientQt.cpp
}
contains(CONFIG, texmap) {
DEFINES += WTF_USE_TEXTURE_MAPPER=1
}
plugin_backend_xlib: PKGCONFIG += x11
# ------------- Install rules -------------
haveQt(5) {
# Install rules handled by Qt's module system
} else {
# For Qt4 we have to set up install rules manually
# Syncqt has already run at this point, so we can use headers.pri
# as a basis for our install-rules
HEADERS_PRI = $${ROOT_BUILD_DIR}/include/$${QT.webkit.name}/headers.pri
!include($$HEADERS_PRI): error(Failed to resolve install headers)
headers.files = $$SYNCQT.HEADER_FILES $$SYNCQT.HEADER_CLASSES
!isEmpty(INSTALL_HEADERS): headers.path = $$INSTALL_HEADERS/$${TARGET}
else: headers.path = $$[QT_INSTALL_HEADERS]/$${TARGET}
INSTALLS += headers
!isEmpty(INSTALL_LIBS): target.path = $$INSTALL_LIBS
else: target.path = $$[QT_INSTALL_LIBS]
INSTALLS += target
unix {
CONFIG += create_pc create_prl
QMAKE_PKGCONFIG_LIBDIR = $$target.path
QMAKE_PKGCONFIG_INCDIR = $$headers.path
QMAKE_PKGCONFIG_DESTDIR = pkgconfig
lib_replace.match = $$re_escape($$DESTDIR)
lib_replace.replace = $$[QT_INSTALL_LIBS]
QMAKE_PKGCONFIG_INSTALL_REPLACE += lib_replace
}
mac {
!static:contains(QT_CONFIG, qt_framework) {
# Build QtWebKit as a framework, to match how Qt was built
CONFIG += lib_bundle qt_no_framework_direct_includes qt_framework
# For debug_and_release configs, only copy headers in release
!debug_and_release|if(build_pass:CONFIG(release, debug|release)) {
FRAMEWORK_HEADERS.version = Versions
FRAMEWORK_HEADERS.files = $${headers.files}
FRAMEWORK_HEADERS.path = Headers
QMAKE_BUNDLE_DATA += FRAMEWORK_HEADERS
}
}
QMAKE_LFLAGS_SONAME = "$${QMAKE_LFLAGS_SONAME}$${DESTDIR}$${QMAKE_DIR_SEP}"
}
}