build: Clean up Wayland protocol code generation
We can build the name of the input and output files for the Wayland protocols we use from the protocol name, stability, and version. This is similar to how the autotools build does it, except much more clear and without shelling out twice to sed just to resolve the Makefile rule.
This commit is contained in:
@@ -12,9 +12,7 @@ out_file = sys.argv[3]
|
||||
#TODO: We can infer this optinon from the name of the output file!
|
||||
option = sys.argv[4]
|
||||
|
||||
|
||||
|
||||
pc = subprocess.Popen([scanner, option , in_file , out_file], stdout=subprocess.PIPE)
|
||||
pc = subprocess.Popen([scanner, option, in_file, out_file], stdout=subprocess.PIPE)
|
||||
(stdo, _) = pc.communicate()
|
||||
if pc.returncode != 0:
|
||||
sys.exit(pc.returncode)
|
||||
@@ -24,7 +22,7 @@ content = ""
|
||||
with open(out_file, 'r') as content_file:
|
||||
content = content_file.read()
|
||||
|
||||
content = content.replace("WL_EXPORT", "")
|
||||
content = content.replace('WL_EXPORT ', '')
|
||||
ofile = open(out_file, 'w')
|
||||
ofile.write(content)
|
||||
ofile.close()
|
||||
|
||||
@@ -37,53 +37,67 @@ gdk_wayland_deps = [
|
||||
]
|
||||
|
||||
# wayland protocols
|
||||
|
||||
proto_dir = dependency('wayland-protocols').get_pkgconfig_variable('pkgdatadir')
|
||||
assert(proto_dir != '', 'Could not get pkgdatadir from wayland-protocols.pc')
|
||||
|
||||
wayland_scanner = find_program('wayland-scanner')
|
||||
genprotocols = find_program('genprotocolfiles.py')
|
||||
|
||||
# Format:
|
||||
# - protocol name
|
||||
# - protocol stability ('stable' or 'unstable')
|
||||
# - protocol version (if stability is 'unstable')
|
||||
proto_sources = [
|
||||
['gtk-shell',
|
||||
'protocol/gtk-shell.xml'],
|
||||
|
||||
['gtk-primary-selection',
|
||||
'protocol/gtk-primary-selection.xml'],
|
||||
|
||||
['pointer-gestures-unstable-v1',
|
||||
join_paths(proto_dir, 'unstable/pointer-gestures/pointer-gestures-unstable-v1.xml')],
|
||||
|
||||
['xdg-shell-unstable-v6',
|
||||
join_paths(proto_dir, 'unstable/xdg-shell/xdg-shell-unstable-v6.xml')],
|
||||
|
||||
['xdg-foreign-unstable-v1',
|
||||
join_paths(proto_dir, 'unstable/xdg-foreign/xdg-foreign-unstable-v1.xml')],
|
||||
|
||||
['tablet-unstable-v2',
|
||||
join_paths(proto_dir, 'unstable/tablet/tablet-unstable-v2.xml')],
|
||||
['gtk-shell', 'stable', ],
|
||||
['gtk-primary-selection', 'stable', ],
|
||||
['pointer-gestures', 'unstable', 'v1', ],
|
||||
['xdg-shell', 'unstable', 'v6', ],
|
||||
['xdg-foreign', 'unstable', 'v1', ],
|
||||
['tablet', 'unstable', 'v2', ],
|
||||
]
|
||||
|
||||
gdk_wayland_gen_headers = []
|
||||
|
||||
# FIXME: there's some protostability/protoname stuff in Makefile.am I don't grok
|
||||
foreach p : proto_sources
|
||||
output_base = p[0]
|
||||
input = p[1]
|
||||
foreach p: proto_sources
|
||||
proto_name = p.get(0)
|
||||
proto_stability = p.get(1)
|
||||
|
||||
if proto_stability == 'stable'
|
||||
output_base = proto_name
|
||||
input = 'protocol/@0@.xml'.format(proto_name)
|
||||
else
|
||||
proto_version = p.get(2)
|
||||
output_base = '@0@-@1@-@2@'.format(proto_name, proto_stability, proto_version)
|
||||
input = join_paths(proto_dir, '@0@/@1@/@2@.xml'.format(proto_stability, proto_name, output_base))
|
||||
endif
|
||||
|
||||
gdk_wayland_gen_headers += custom_target('@0@ client header'.format(output_base),
|
||||
input : input,
|
||||
output : '@0@-client-protocol.h'.format(output_base),
|
||||
command: [genprotocols, wayland_scanner, '@INPUT@', '@OUTPUT@', 'client-header'])
|
||||
input: input,
|
||||
output: '@0@-client-protocol.h'.format(output_base),
|
||||
command: [
|
||||
genprotocols,
|
||||
wayland_scanner,
|
||||
'@INPUT@', '@OUTPUT@',
|
||||
'client-header',
|
||||
])
|
||||
|
||||
gdk_wayland_sources += custom_target('@0@ source'.format(output_base),
|
||||
input : input,
|
||||
output : '@0@-protocol.c'.format(output_base),
|
||||
command: [genprotocols, wayland_scanner, '@INPUT@', '@OUTPUT@', 'code'])
|
||||
input: input,
|
||||
output: '@0@-protocol.c'.format(output_base),
|
||||
command: [
|
||||
genprotocols,
|
||||
wayland_scanner,
|
||||
'@INPUT@', '@OUTPUT@',
|
||||
'code',
|
||||
])
|
||||
endforeach
|
||||
|
||||
libgdk_wayland = static_library('gdk-wayland',
|
||||
gdk_wayland_sources, gdk_wayland_gen_headers, gdkconfig, gdkenum_h,
|
||||
include_directories: [confinc, gdkinc],
|
||||
c_args: ['-DGDK_COMPILATION', '-DG_LOG_DOMAIN="Gdk"'],
|
||||
dependencies: [gdk_deps, gdk_wayland_deps])
|
||||
gdk_wayland_sources, gdk_wayland_gen_headers, gdkconfig, gdkenum_h,
|
||||
include_directories: [ confinc, gdkinc, ],
|
||||
c_args: [
|
||||
'-DGDK_COMPILATION',
|
||||
'-DG_LOG_DOMAIN="Gdk"',
|
||||
'-DG_LOG_USE_STRUCTURED=1',
|
||||
],
|
||||
dependencies: [ gdk_deps, gdk_wayland_deps, ])
|
||||
|
||||
Reference in New Issue
Block a user