diff options
author | Jorgen Lind <jorgen.lind@digia.com> | 2013-11-18 10:18:56 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-12-23 21:14:34 +0100 |
commit | 0e1ce36ae67de940b2d499ec7f23e520dce0f112 (patch) | |
tree | b3fb1e4a462ac35c06c52cede43cd1bb371a2b0b /mkspecs/features/wayland-scanner.prf | |
parent | 8fa6cb83c6301061d1397e4befd7150b2c7723b7 (diff) |
Make wayland-scanner install generated headers
QtWayland uses QtWaylandScanner to generate c++ files which will be
subclassed. This works ok in QtCompositor as it implements the pimple
pattern. However, QtWayland has to expose a library called
QtWaylandClient as a way to create specialized wayland plugins. These
classes don't promise an ABI, and has limited API guarantees, so they
subclass the classes generated by the QtWaylandScanner directly. For
this library to be possible, we have to install the generated files.
Also, it should be possible to use the private API, and that's not
possible without the generated files.
Change-Id: Id55200fe23652587390dabf84ca846e4f39cf70e
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
Diffstat (limited to 'mkspecs/features/wayland-scanner.prf')
-rw-r--r-- | mkspecs/features/wayland-scanner.prf | 66 |
1 files changed, 54 insertions, 12 deletions
diff --git a/mkspecs/features/wayland-scanner.prf b/mkspecs/features/wayland-scanner.prf index b2eca41695..3a9d8cafbd 100644 --- a/mkspecs/features/wayland-scanner.prf +++ b/mkspecs/features/wayland-scanner.prf @@ -5,10 +5,52 @@ isEmpty(QMAKE_WAYLAND_SCANNER):error("QMAKE_WAYLAND_SCANNER not defined for this mkspec") +defineReplace(waylandScannerHeaderFiles) { + side = $$1 + path = $$2 + isEqual(side, "server"): \ + sources_list = $$WAYLANDSERVERSOURCES + else: \ + sources_list = $$WAYLANDCLIENTSOURCES + wayland_header_files_for_side = + for(file, sources_list) { + basenameFile = $$basename(file) + basenameFile ~= s,\\.xml$,, + wayland_header_files_for_side += $$path/wayland-$$basenameFile-$$side-protocol$${first(QMAKE_EXT_H)} + isEqual(side, "server"): \ + wayland_header_files_for_side += $$path/qwayland-server-$$basenameFile$${first(QMAKE_EXT_H)} + else: \ + wayland_header_files_for_side += $$path/qwayland-$$basenameFile$${first(QMAKE_EXT_H)} + } + return($$wayland_header_files_for_side) +} + +qt_install_headers { + header_dest = $$MODULE_BASE_OUTDIR/include/$$MODULE_INCNAME/$$VERSION/$$MODULE_INCNAME/private + + header_files_client = $$waylandScannerHeaderFiles(client, $$header_dest) + !isEmpty(header_files_client) { + wayland_generated_client_headers.files = $$header_files_client + wayland_generated_client_headers.path = $$private_headers.path + INSTALLS += wayland_generated_client_headers + WAYLAND_CLIENT_HEADER_DEST = $$header_dest/ + WAYLAND_CLIENT_INCLUDE_DIR = $$MODULE_INCNAME/private + } + + header_files_server = $$waylandScannerHeaderFiles(server, $$header_dest) + !isEmpty(header_files_server) { + wayland_generated_server_headers.files = $$header_files_server + wayland_generated_server_headers.path = $$private_headers.path + INSTALLS += wayland_generated_server_headers + WAYLAND_SERVER_HEADER_DEST = $$header_dest/ + WAYLAND_SERVER_INCLUDE_DIR = $$MODULE_INCNAME/private + } +} + wayland_server_header.name = wayland ${QMAKE_FILE_BASE} wayland_server_header.input = WAYLANDSERVERSOURCES wayland_server_header.variable_out = HEADERS -wayland_server_header.output = wayland-${QMAKE_FILE_BASE}-server-protocol$${first(QMAKE_EXT_H)} +wayland_server_header.output = $${WAYLAND_SERVER_HEADER_DEST}wayland-${QMAKE_FILE_BASE}-server-protocol$${first(QMAKE_EXT_H)} wayland_server_header.commands = $$QMAKE_WAYLAND_SCANNER server-header < ${QMAKE_FILE_IN} > ${QMAKE_FILE_OUT} silent:wayland_server_header.commands = @echo Wayland server header ${QMAKE_FILE_IN} && $$wayland_server_header.commands QMAKE_EXTRA_COMPILERS += wayland_server_header @@ -16,7 +58,7 @@ QMAKE_EXTRA_COMPILERS += wayland_server_header wayland_client_header.name = wayland ${QMAKE_FILE_BASE} wayland_client_header.input = WAYLANDCLIENTSOURCES wayland_client_header.variable_out = HEADERS -wayland_client_header.output = wayland-${QMAKE_FILE_BASE}-client-protocol$${first(QMAKE_EXT_H)} +wayland_client_header.output = $${WAYLAND_CLIENT_HEADER_DEST}wayland-${QMAKE_FILE_BASE}-client-protocol$${first(QMAKE_EXT_H)} wayland_client_header.commands = $$QMAKE_WAYLAND_SCANNER client-header < ${QMAKE_FILE_IN} > ${QMAKE_FILE_OUT} silent:wayland_client_header.commands = @echo Wayland client header ${QMAKE_FILE_IN} && $$wayland_client_header.commands QMAKE_EXTRA_COMPILERS += wayland_client_header @@ -34,35 +76,35 @@ qtPrepareTool(QMAKE_QTWAYLANDSCANNER, qtwaylandscanner) qtwayland_client_header.name = qtwayland ${QMAKE_FILE_BASE} qtwayland_client_header.input = WAYLANDCLIENTSOURCES qtwayland_client_header.variable_out = HEADERS -qtwayland_client_header.depends = wayland-${QMAKE_FILE_BASE}-client-protocol$${first(QMAKE_EXT_H)} -qtwayland_client_header.output = qwayland-${QMAKE_FILE_BASE}$${first(QMAKE_EXT_H)} -qtwayland_client_header.commands = $$QMAKE_QTWAYLANDSCANNER client-header ${QMAKE_FILE_IN} > ${QMAKE_FILE_OUT} +qtwayland_client_header.depends = $${WAYLAND_CLIENT_HEADER_DEST}wayland-${QMAKE_FILE_BASE}-client-protocol$${first(QMAKE_EXT_H)} +qtwayland_client_header.output = $${WAYLAND_CLIENT_HEADER_DEST}qwayland-${QMAKE_FILE_BASE}$${first(QMAKE_EXT_H)} +qtwayland_client_header.commands = $$QMAKE_QTWAYLANDSCANNER client-header ${QMAKE_FILE_IN} $$WAYLAND_CLIENT_INCLUDE_DIR > ${QMAKE_FILE_OUT} silent:qtwayland_client_header.commands = @echo QtWayland client header ${QMAKE_FILE_IN} && $$qtwayland_client_header.commands QMAKE_EXTRA_COMPILERS += qtwayland_client_header qtwayland_client_code.name = qtwayland ${QMAKE_FILE_BASE} qtwayland_client_code.input = WAYLANDCLIENTSOURCES qtwayland_client_code.variable_out = SOURCES -qtwayland_client_code.depends = qwayland-${QMAKE_FILE_BASE}$${first(QMAKE_EXT_H)} +qtwayland_client_code.depends = $${WAYLAND_CLIENT_HEADER_DEST}qwayland-${QMAKE_FILE_BASE}$${first(QMAKE_EXT_H)} qtwayland_client_code.output = qwayland-${QMAKE_FILE_BASE}.cpp -qtwayland_client_code.commands = $$QMAKE_QTWAYLANDSCANNER client-code ${QMAKE_FILE_IN} > ${QMAKE_FILE_OUT} +qtwayland_client_code.commands = $$QMAKE_QTWAYLANDSCANNER client-code ${QMAKE_FILE_IN} $$WAYLAND_CLIENT_INCLUDE_DIR > ${QMAKE_FILE_OUT} silent:qtwayland_client_code.commands = @echo QtWayland client code ${QMAKE_FILE_IN} && $$qtwayland_client_code.commands QMAKE_EXTRA_COMPILERS += qtwayland_client_code qtwayland_server_header.name = qtwayland ${QMAKE_FILE_BASE} qtwayland_server_header.input = WAYLANDSERVERSOURCES qtwayland_server_header.variable_out = HEADERS -qtwayland_server_header.depends = wayland-${QMAKE_FILE_BASE}-server-protocol$${first(QMAKE_EXT_H)} -qtwayland_server_header.output = qwayland-server-${QMAKE_FILE_BASE}$${first(QMAKE_EXT_H)} -qtwayland_server_header.commands = $$QMAKE_QTWAYLANDSCANNER server-header ${QMAKE_FILE_IN} > ${QMAKE_FILE_OUT} +qtwayland_server_header.depends = $${WAYLAND_SERVER_HEADER_DEST}wayland-${QMAKE_FILE_BASE}-server-protocol$${first(QMAKE_EXT_H)} +qtwayland_server_header.output = $${WAYLAND_SERVER_HEADER_DEST}qwayland-server-${QMAKE_FILE_BASE}$${first(QMAKE_EXT_H)} +qtwayland_server_header.commands = $$QMAKE_QTWAYLANDSCANNER server-header ${QMAKE_FILE_IN} $$WAYLAND_SERVER_INCLUDE_DIR > ${QMAKE_FILE_OUT} silent:qtwayland_server_header.commands = @echo QtWayland server header ${QMAKE_FILE_IN} && $$qtwayland_server_header.commands QMAKE_EXTRA_COMPILERS += qtwayland_server_header qtwayland_server_code.name = qtwayland ${QMAKE_FILE_BASE} qtwayland_server_code.input = WAYLANDSERVERSOURCES qtwayland_server_code.variable_out = SOURCES -qtwayland_server_code.depends = qwayland-server-${QMAKE_FILE_BASE}$${first(QMAKE_EXT_H)} +qtwayland_server_code.depends = $${WAYLAND_SERVER_HEADER_DEST}qwayland-server-${QMAKE_FILE_BASE}$${first(QMAKE_EXT_H)} qtwayland_server_code.output = qwayland-server-${QMAKE_FILE_BASE}.cpp -qtwayland_server_code.commands = $$QMAKE_QTWAYLANDSCANNER server-code ${QMAKE_FILE_IN} > ${QMAKE_FILE_OUT} +qtwayland_server_code.commands = $$QMAKE_QTWAYLANDSCANNER server-code ${QMAKE_FILE_IN} $$WAYLAND_SERVER_INCLUDE_DIR > ${QMAKE_FILE_OUT} silent:qtwayland_server_code.commands = @echo QtWayland server code ${QMAKE_FILE_IN} && $$qtwayland_server_code.commands QMAKE_EXTRA_COMPILERS += qtwayland_server_code |