From 0e1ce36ae67de940b2d499ec7f23e520dce0f112 Mon Sep 17 00:00:00 2001 From: Jorgen Lind Date: Mon, 18 Nov 2013 10:18:56 +0100 Subject: 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 Reviewed-by: Laszlo Agocs Reviewed-by: Andy Nichols --- mkspecs/features/wayland-scanner.prf | 66 +++++++++++++++++++++++++++++------- 1 file changed, 54 insertions(+), 12 deletions(-) (limited to 'mkspecs') 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 -- cgit v1.2.3