[Qt] Make it possible to build WebKit without QtWidgets
[WebKit-https.git] / Source / api.pri
1 # -------------------------------------------------------------------
2 # Project file for the QtWebKit C++ APIs
3 #
4 # See 'Tools/qmake/README' for an overview of the build system
5 # -------------------------------------------------------------------
6
7 TEMPLATE = lib
8 TARGET = QtWebKit
9
10 WEBKIT_DESTDIR = $${ROOT_BUILD_DIR}/lib
11
12 haveQt(5) {
13     # Use Qt5's module system
14     load(qt_module)
15     MODULE = webkit
16     MODULE_PRI = $$QT.webkit.module_pri
17     CONFIG += module
18
19     BASE_TARGET = $$TARGET
20
21     load(qt_module_config)
22
23     # Make sure the module config doesn't override our preferred build config.
24     debug_and_release:if(!debug|!release) {
25         # Removing debug_and_release causes issues with lib suffixes when building debug on Windows.
26         # Work around it by only removing build_all, and still create the Makefiles for both configurations.
27         win32*: CONFIG -= build_all
28         else: CONFIG -= debug_and_release
29     }
30
31     # Allow doing a debug-only build of WebKit (not supported by Qt)
32     macx:!debug_and_release:debug: TARGET = $$BASE_TARGET
33
34     # ---------------- Custom developer-build handling -------------------
35     #
36     # The assumption for Qt developer builds is that the module file
37     # will be put into qtbase/mkspecs/modules, and the libraries into
38     # qtbase/lib, with rpath/install_name set to the Qt lib dir.
39     #
40     # For WebKit we don't want that behavior for the libraries, as we want
41     # them to be self-contained in the WebKit build dir. To achive that we
42     # trick Qt into thinking it's not a developer build, but setting QTDIR
43     # to a bogus path in default_pre.prf.
44     #
45     # We still want the module file to live in the Qt dir so the module can
46     # be used by setting QT += webkit, so we copy the file manually. We also
47     # have to make sure the rpath/install_name of the libraries are relative
48     # to the webkit build dir.
49
50     !build_pass {
51         # Make a more accessible copy of the module forward file
52         # in the WebKit build directory.
53         convenience_module_path = $$toSystemPath($${ROOT_BUILD_DIR})$${QMAKE_DIR_SEP}modules
54         module_filename = $$basename(QT.webkit.module_pri)
55
56         # The QMAKE_EXTRA_MODULE_FORWARDS might contain more than one path,
57         # so we iterate the paths and find one that matches our build dir.
58         for(module_forward, QMAKE_EXTRA_MODULE_FORWARDS) {
59             in_build_dir = $$find(module_forward, ^$${ROOT_BUILD_DIR})
60             !isEmpty(in_build_dir) {
61                 webkit_module_forward = $$module_forward
62                 break()
63             }
64         }
65
66         isEmpty(webkit_module_forward) {
67             warning(Could not resolve QMAKE_EXTRA_MODULE_FORWARDS path!)
68         } else {
69             make_module_fwd_convenience.target = $$convenience_module_path$${QMAKE_DIR_SEP}$$module_filename
70             make_module_fwd_convenience.commands = $$QMAKE_MKDIR $$convenience_module_path \
71                 && echo \"include($$webkit_module_forward$${QMAKE_DIR_SEP}$$module_filename)\" > $$convenience_module_path$${QMAKE_DIR_SEP}$$module_filename
72             make_module_fwd_convenience.depends = $$webkit_module_forward$${QMAKE_DIR_SEP}$$module_filename
73
74             QMAKE_EXTRA_TARGETS += make_module_fwd_convenience
75             DEFAULT_TARGETS += make_module_fwd_convenience
76         }
77
78         qt_developer_build {
79             # Copy the module forward file into Qt so that the module
80             # is immediately accessible.
81             qt_modules_path = $$[QT_INSTALL_PREFIX]$${QMAKE_DIR_SEP}mkspecs$${QMAKE_DIR_SEP}modules
82
83             copy_module_fwd_file.target = $$qt_modules_path$${QMAKE_DIR_SEP}$$module_filename
84             copy_module_fwd_file.commands = $$QMAKE_COPY  $$toSystemPath($$QMAKE_EXTRA_MODULE_FORWARDS)$${QMAKE_DIR_SEP}$$module_filename $$qt_modules_path
85             # FIXME: Add dependendy that ensures we copy the forward file if the target is updated
86             copy_module_fwd_file.depends = $$QMAKE_EXTRA_MODULE_FORWARDS$${QMAKE_DIR_SEP}$$module_filename
87
88             QMAKE_EXTRA_TARGETS += copy_module_fwd_file
89             DEFAULT_TARGETS += copy_module_fwd_file
90         }
91     }
92
93     # Make sure the install_name of the QtWebKit library point to webkit
94     macx {
95         # We do our own absolute path so that we can trick qmake into
96         # using the webkit build path instead of the Qt install path.
97         CONFIG -= absolute_library_soname
98         QMAKE_LFLAGS_SONAME = $$QMAKE_LFLAGS_SONAME$$WEBKIT_DESTDIR/
99
100         !debug_and_release|build_pass {
101             # We also have to make sure the install_name is correct when
102             # the library is installed.
103             change_install_name.depends = install_target
104
105             # The install rules generated by qmake for frameworks are busted in
106             # that both the debug and the release makefile copy QtWebKit.framework
107             # into the install dir, so whatever changes we did to the release library
108             # will get overwritten when the debug library is installed. We work around
109             # that by running install_name on both, for both configs.
110             change_install_name.commands = framework_dir=\$\$(dirname $(TARGETD)); \
111                 for file in \$\$(ls $$[QT_INSTALL_LIBS]/\$\$framework_dir/$$BASE_TARGET*); do \
112                     install_name_tool -id \$\$file \$\$file; \
113                 done
114             default_install_target.target = install
115             default_install_target.depends += change_install_name
116
117             QMAKE_EXTRA_TARGETS += change_install_name default_install_target
118         }
119     }
120 } else {
121     VERSION = $$QT_VERSION
122     DESTDIR = $$WEBKIT_DESTDIR
123 }
124
125 runSyncQt() # Generate forwarding headers for the QtWebKit API
126
127 load(features)
128
129 WEBKIT += wtf
130
131 !v8:WEBKIT += javascriptcore
132
133 WEBKIT += webcore
134
135 !no_webkit2 {
136     WEBKIT += webkit2
137     QT += declarative
138
139     # Ensure that changes to the WebKit1 and WebKit2 API will trigger a qmake of this
140     # file, which in turn runs syncqt to update the forwarding headers.
141     QMAKE_INTERNAL_INCLUDED_FILES *= WebKit2/Target.pri
142     QMAKE_INTERNAL_INCLUDED_FILES *= WebKit/WebKit1.pro
143 }
144
145 !no_webkit1: WEBKIT += webkit1
146
147 !static: DEFINES += QT_MAKEDLL
148
149 # ------------- Install rules -------------
150
151 haveQt(5) {
152     # Install rules handled by Qt's module system
153 } else {
154     # For Qt4 we have to set up install rules manually
155
156     # Syncqt has already run at this point, so we can use headers.pri
157     # as a basis for our install-rules
158     HEADERS_PRI = $${ROOT_BUILD_DIR}/include/$${QT.webkit.name}/headers.pri
159     !include($$HEADERS_PRI): error(Failed to resolve install headers)
160
161     headers.files = $$SYNCQT.HEADER_FILES $$SYNCQT.HEADER_CLASSES
162     !isEmpty(INSTALL_HEADERS): headers.path = $$INSTALL_HEADERS/$${TARGET}
163     else: headers.path = $$[QT_INSTALL_HEADERS]/$${TARGET}
164     INSTALLS += headers
165
166     !isEmpty(INSTALL_LIBS): target.path = $$INSTALL_LIBS
167     else: target.path = $$[QT_INSTALL_LIBS]
168     INSTALLS += target
169
170     unix {
171         CONFIG += create_pc create_prl
172         QMAKE_PKGCONFIG_LIBDIR = $$target.path
173         QMAKE_PKGCONFIG_INCDIR = $$headers.path
174         QMAKE_PKGCONFIG_DESTDIR = pkgconfig
175         lib_replace.match = $$re_escape($$DESTDIR)
176         lib_replace.replace = $$[QT_INSTALL_LIBS]
177         QMAKE_PKGCONFIG_INSTALL_REPLACE += lib_replace
178     }
179
180     mac {
181         !static:contains(QT_CONFIG, qt_framework) {
182             # Build QtWebKit as a framework, to match how Qt was built
183             CONFIG += lib_bundle qt_no_framework_direct_includes qt_framework
184
185             # For debug_and_release configs, only copy headers in release
186             !debug_and_release|if(build_pass:CONFIG(release, debug|release)) {
187                 FRAMEWORK_HEADERS.version = Versions
188                 FRAMEWORK_HEADERS.files = $${headers.files}
189                 FRAMEWORK_HEADERS.path = Headers
190                 QMAKE_BUNDLE_DATA += FRAMEWORK_HEADERS
191             }
192         }
193
194         QMAKE_LFLAGS_SONAME = "$${QMAKE_LFLAGS_SONAME}$${DESTDIR}$${QMAKE_DIR_SEP}"
195     }
196 }