summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--patches/chromium/tools/gyp/0003-Allow-letting-qmake-do-the-link-step.patch70
-rw-r--r--qtwebengine.pro12
m---------src/3rdparty0
-rw-r--r--src/core/core.pro8
-rw-r--r--src/core/core_gyp_generator.pro19
-rw-r--r--src/core/core_module.pro15
-rw-r--r--src/core/qtwebengine.gypi3
-rw-r--r--src/process/process.pro10
-rw-r--r--src/webengine/webengine.pro10
-rw-r--r--src/webenginewidgets/webenginewidgets.pro19
10 files changed, 104 insertions, 62 deletions
diff --git a/patches/chromium/tools/gyp/0003-Allow-letting-qmake-do-the-link-step.patch b/patches/chromium/tools/gyp/0003-Allow-letting-qmake-do-the-link-step.patch
new file mode 100644
index 000000000..8b86bd5ad
--- /dev/null
+++ b/patches/chromium/tools/gyp/0003-Allow-letting-qmake-do-the-link-step.patch
@@ -0,0 +1,70 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
+Date: Thu, 27 Feb 2014 17:42:48 +0100
+Subject: Allow letting qmake do the link step
+
+This adds a let_qmake_do_the_linking target variable to tell ninja
+not to link but rather dump the linking information from gyp in a
+file that we'll parse with qmake.
+
+Change-Id: Icfaadae7ce4e9895f76b5fe06e05124e9b980e8b
+Reviewed-by: Zoltan Arvai <zarvai@inf.u-szeged.hu>
+Reviewed-by: Andras Becsi <andras.becsi@digia.com>
+---
+ pylib/gyp/generator/ninja.py | 43 +++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 43 insertions(+)
+
+diff --git a/pylib/gyp/generator/ninja.py b/pylib/gyp/generator/ninja.py
+index 6fe07c5..c61f180 100644
+--- a/pylib/gyp/generator/ninja.py
++++ b/pylib/gyp/generator/ninja.py
+@@ -1090,6 +1090,49 @@ class NinjaWriter:
+ else:
+ command = command + '_notoc'
+
++ if config.get('let_qmake_do_the_linking', 0):
++ def toAbsPaths(paths):
++ return [os.path.relpath(path, self.toplevel_build) if os.path.isabs(path) else path
++ for path in paths]
++ def qmakeLiteral(s):
++ return s.replace('"', '\\"')
++
++ # Generate this file for all solink targets, this assumes that
++ # a .pro file will pick up this pri file and do the rest of the work.
++ pri_file = open(os.path.join(self.toplevel_build, self.name + "_linking.pri"), 'w')
++
++ if self.flavor == 'win':
++ # qmake will take care of the manifest
++ ldflags = filter(lambda x: not x.lower().startswith('/manifest'), ldflags)
++
++ # Replace "$!PRODUCT_DIR" with "$$PWD" in link flags (which might contain some -L directives).
++ prefixed_lflags = [self.ExpandSpecial(f, '$$PWD') for f in ldflags]
++ prefixed_library_dirs = ['-L' + self.ExpandSpecial(f, '$$PWD') for f in config.get('library_dirs', [])]
++ prefixed_libraries = gyp.common.uniquer([self.ExpandSpecial(f, '$$PWD') for f in spec.get('libraries', [])])
++ if self.flavor == 'mac':
++ prefixed_libraries = self.xcode_settings.AdjustLibraries(prefixed_libraries)
++ elif self.flavor == 'win':
++ prefixed_libraries = self.msvs_settings.AdjustLibraries(prefixed_libraries)
++
++ # Make sure that we have relative paths to our out/(Release|Debug), where we generate our .pri file, and then prepend $$PWD to them.
++ prefixed_object_and_archives = ['$$PWD/' + o for o in toAbsPaths(link_deps)]
++
++ pri_file.write("QMAKE_LFLAGS += %s\n" % qmakeLiteral(' '.join(prefixed_lflags)))
++ # Follow the logic of the solink rule.
++ if self.flavor != 'mac' and self.flavor != 'win':
++ pri_file.write("LIBS_PRIVATE += -Wl,--whole-archive %s -Wl,--no-whole-archive\n" % qmakeLiteral(' '.join(prefixed_object_and_archives)))
++ else:
++ pri_file.write("LIBS_PRIVATE += %s\n" % qmakeLiteral(' '.join(prefixed_object_and_archives)))
++ # External libs have to come after objects/archives, the linker resolve them in order.
++ pri_file.write("LIBS_PRIVATE += %s\n" % qmakeLiteral(' '.join(prefixed_library_dirs + prefixed_libraries)))
++ # Make sure that if ninja modifies one of the inputs, qmake/make will link again.
++ pri_file.write("POST_TARGETDEPS += %s\n" % qmakeLiteral(' '.join(prefixed_object_and_archives)))
++ pri_file.close()
++
++ # In this mode we prevent letting ninja link at all.
++ command = 'phony'
++ command_suffix = ''
++
+ if len(solibs):
+ extra_bindings.append(('solibs', gyp.common.EncodePOSIXShellList(solibs)))
+
diff --git a/qtwebengine.pro b/qtwebengine.pro
index c3e56fe8e..366446c7a 100644
--- a/qtwebengine.pro
+++ b/qtwebengine.pro
@@ -1,12 +1,8 @@
load(qt_build_config)
-# Examples will only be able to find libQt5WebEngineCore.so if the proper RPATH was set on libQt5WebEngineWidgets.so
-# Arch Linux disables RPATH for security reasons.
-!isEmpty($$QMAKE_LFLAGS_RPATH) {
- # As long as we are a module separate from the rest of Qt, we want to unconditionally build examples.
- # Once part of Qt 5, this should be removed and we should respect the Qt wide configuration.
- QTWEBENGINE_BUILD_PARTS = $$QT_BUILD_PARTS
- QTWEBENGINE_BUILD_PARTS *= examples
-}
+# As long as we are a module separate from the rest of Qt, we want to unconditionally build examples.
+# Once part of Qt 5, this should be removed and we should respect the Qt wide configuration.
+QTWEBENGINE_BUILD_PARTS = $$QT_BUILD_PARTS
+QTWEBENGINE_BUILD_PARTS *= examples
load(qt_parts)
diff --git a/src/3rdparty b/src/3rdparty
-Subproject 9001f7258c97c6fe61d6362aa3431af7128f921
+Subproject 95854d944fb9195e2b2871367726f69cea9113d
diff --git a/src/core/core.pro b/src/core/core.pro
index c5fe808a6..5f0c3c29d 100644
--- a/src/core/core.pro
+++ b/src/core/core.pro
@@ -12,13 +12,17 @@ gyp_configure_target.depends = gyp_configure_host
# gyp_run.pro calls gyp through gyp_qtwebengine on the qmake step, and ninja on the make step.
gyp_run.file = gyp_run.pro
-
gyp_run.depends = core_gyp_generator gyp_configure_host gyp_configure_target
+# This will take the compile output of ninja, and link+deploy the final binary.
+core_module.file = core_module.pro
+core_module.depends = gyp_run
+
SUBDIRS += core_gyp_generator \
gyp_configure_host \
gyp_configure_target \
- gyp_run
+ gyp_run \
+ core_module
REPACK_DIR = $$getOutDir()/$$getConfigDir()/gen/repack
locales.files = $$REPACK_DIR/qtwebengine_locales
diff --git a/src/core/core_gyp_generator.pro b/src/core/core_gyp_generator.pro
index a75eb733a..25e105da6 100644
--- a/src/core/core_gyp_generator.pro
+++ b/src/core/core_gyp_generator.pro
@@ -7,12 +7,8 @@ GYPINCLUDES += qtwebengine.gypi
TEMPLATE = lib
-TARGET = Qt5WebEngineCore
-
-# gyp sets the default install name to /usr/local/lib and we need the module libraries to
-# know its install_name so that they can let the dynamic linker load the core library.
-# FIXME: Remove this and put it in qtwebengine.gypi once we can use a relative path to @loader_path.
-macx: GYP_DYLIB_INSTALL_NAME_BASE = $$getOutDir()/$$getConfigDir()
+# This must match the target name in core_module.pro to allow it to do the linking part.
+TARGET = QtWebEngineCore
QT += qml quick
QT_PRIVATE += qml-private quick-private gui-private core-private
@@ -104,14 +100,3 @@ HEADERS = \
yuv_video_node.h \
qrc_protocol_handler_qt.h \
url_request_qrc_job_qt.h
-
-VERSION = $$MODULE_VERSION
-win32:CONFIG += skip_target_version_ext
-load(resolve_target)
-TARGET_NAME = $$basename(QMAKE_RESOLVED_TARGET)
-TARGET_NAME = $$replace(TARGET_NAME, .$${VERSION},)
-
-target.files = $$getOutDir()/$$getConfigDir()/lib/$$TARGET_NAME
-target.CONFIG += no_check_exist # Trust us, qmake...
-target.path = $$[QT_INSTALL_LIBS]
-INSTALLS += target
diff --git a/src/core/core_module.pro b/src/core/core_module.pro
new file mode 100644
index 000000000..049bd0596
--- /dev/null
+++ b/src/core/core_module.pro
@@ -0,0 +1,15 @@
+TARGET = QtWebEngineCore
+MODULE = webenginecore
+
+# Look for linking information produced by gyp for our target according to core_generated.gyp
+!include($$getOutDir()/$$getConfigDir()/$${TARGET}_linking.pri) {
+ error("Could not find the linking information that gyp should have generated.")
+}
+
+# We distribute the module binary but headers are only available in-tree.
+CONFIG += no_module_headers
+load(qt_module)
+
+# Using -Wl,-Bsymbolic-functions seems to confuse the dynamic linker
+# and doesn't let Chromium get access to libc symbols through dlsym.
+CONFIG -= bsymbolic_functions
diff --git a/src/core/qtwebengine.gypi b/src/core/qtwebengine.gypi
index 20cac744a..0a179ea26 100644
--- a/src/core/qtwebengine.gypi
+++ b/src/core/qtwebengine.gypi
@@ -1,4 +1,7 @@
{
+ # This asks gyp to generate a .pri file with linking
+ # information so that qmake can take care of the deployment.
+ 'let_qmake_do_the_linking': 1,
'dependencies': [
'<(chromium_src_dir)/content/content.gyp:content',
'<(chromium_src_dir)/content/content.gyp:content_app_browser',
diff --git a/src/process/process.pro b/src/process/process.pro
index cc68e3dda..a9f5d183f 100644
--- a/src/process/process.pro
+++ b/src/process/process.pro
@@ -1,15 +1,9 @@
TARGET = $$QTWEBENGINEPROCESS_NAME
TEMPLATE = app
-macx {
- LIBPATH = $$getOutDir()/$$getConfigDir()
- CONFIG -= app_bundle
-} else:LIBPATH = $$getOutDir()/$$getConfigDir()/lib
-LIBS_PRIVATE += -L$$LIBPATH -lQt5WebEngineCore
-QMAKE_RPATHDIR += $$LIBPATH
+QT_PRIVATE += webenginecore
-qnx: QMAKE_RPATHLINKDIR += $${QNX_DIR}/$${QNX_CPUDIR}/usr/lib/qt5/lib
-else: cross_compile: QMAKE_RPATHLINKDIR += $$[QT_INSTALL_LIBS]
+CONFIG -= app_bundle
load(qt_build_paths)
DESTDIR = $$MODULE_BASE_OUTDIR/libexec
diff --git a/src/webengine/webengine.pro b/src/webengine/webengine.pro
index 062780469..cd175bfcc 100644
--- a/src/webengine/webengine.pro
+++ b/src/webengine/webengine.pro
@@ -4,18 +4,10 @@ TARGET = QtWebEngine
DEFINES += QT_BUILD_WEBENGINE_LIB
QT += qml quick
-QT_PRIVATE += qml-private quick-private gui-private core-private
+QT_PRIVATE += webenginecore qml-private quick-private gui-private core-private
INCLUDEPATH += $$PWD api ../core
-# FIXME: all this should eventually be turned into QT += webenginecore
-macx:LIBPATH = $$getOutDir()/$$getConfigDir()
-else:LIBPATH = $$getOutDir()/$$getConfigDir()/lib
-LIBS_PRIVATE += -lQt5WebEngineCore -L$$LIBPATH
-QMAKE_RPATHDIR += $$LIBPATH
-
-#DESTDIR = $$LIBPATH
-
SOURCES = \
api/qquickwebengineloadrequest.cpp \
api/qquickwebenginenewviewrequest.cpp \
diff --git a/src/webenginewidgets/webenginewidgets.pro b/src/webenginewidgets/webenginewidgets.pro
index a871586ae..c97e4b61e 100644
--- a/src/webenginewidgets/webenginewidgets.pro
+++ b/src/webenginewidgets/webenginewidgets.pro
@@ -4,15 +4,7 @@ TARGET = QtWebEngineWidgets
DEFINES += QT_BUILD_WEBENGINEWIDGETS_LIB
QT += widgets network
-QT_PRIVATE += widgets-private gui-private network-private core-private
-
-# FIXME: all this should eventually be turned into QT += webenginecore
-macx:LIBPATH = $$getOutDir()/$$getConfigDir()
-else:LIBPATH = $$getOutDir()/$$getConfigDir()/lib
-LIBS_PRIVATE += -L$$LIBPATH -lQt5WebEngineCore
-QMAKE_RPATHDIR += $$LIBPATH
-
-DESTDIR = $$LIBPATH
+QT_PRIVATE += webenginecore widgets-private gui-private network-private core-private
INCLUDEPATH += $$PWD api ../core
@@ -33,12 +25,3 @@ HEADERS = \
render_widget_host_view_qt_delegate_webpage.h
load(qt_module)
-
-# Some binutils versions configured for cross compilation only support
-# sysroot-relative rpath values and can't use the rpath specified above.
-# Instead, append an appropriate rpath-link to lib_qt_webenginewidgets.pri.
-cross_compile:!build_pass {
- local_build_rpath_link = "QMAKE_RPATHLINKDIR += $$LIBPATH"
- # MODULE_PRI is defined in qt_module_pris.prf
- write_file($$MODULE_PRI, local_build_rpath_link, append)
-}