From 3eaddbef62ae83561417e6216cc72eeba98162f2 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Wed, 1 Mar 2017 12:36:00 +0000 Subject: [PATCH] Simplify the code generation rules for Meson The code generation rules are explicitly built for each supported API target, but they ought to be refactored since they are pretty much identical. In order to do that, we can store the arguments to the custom_target rules inside an array and then iterate over each element. This cuts down the complexity of the Meson build, and the chances of getting something wrong due to duplication. --- include/epoxy/meson.build | 98 +++++++++++------------------------- src/meson.build | 102 +++++++++++++------------------------- 2 files changed, 64 insertions(+), 136 deletions(-) diff --git a/include/epoxy/meson.build b/include/epoxy/meson.build index 809b92c..12ae719 100644 --- a/include/epoxy/meson.build +++ b/include/epoxy/meson.build @@ -1,82 +1,42 @@ headers = [ 'common.h' ] -gl_generated = custom_target('gl_generated.h', - input: gl_registry, - output: [ - 'gl_generated.h', - ], - command: [ - python, - gen_dispatch_py, - '--header', - '--no-source', - '--outputdir=@OUTDIR@', - '@INPUT@' - ], - install: true, - install_dir: join_paths(epoxy_includedir, 'epoxy')) - -gen_headers = [ gl_generated ] -headers += [ 'gl.h', ] +# GL is always generated +generated_headers = [ [ 'gl.h', 'gl_generated.h', gl_registry ] ] if build_egl - egl_generated = custom_target('egl_generated.h', - input: egl_registry, - output: [ - 'egl_generated.h', - ], - command: [ - python, - gen_dispatch_py, - '--header', - '--no-source', - '--outputdir=@OUTDIR@', - '@INPUT@' - ], - install: true, - install_dir: join_paths(epoxy_includedir, 'epoxy')) - gen_headers += [ egl_generated ] - headers += [ 'egl.h' ] + generated_headers += [ [ 'egl.h', 'egl_generated.h', egl_registry ] ] endif if build_glx - glx_generated = custom_target('glx_generated.h', - input: glx_registry, - output: [ - 'glx_generated.h', - ], - command: [ - python, - gen_dispatch_py, - '--header', - '--no-source', - '--outputdir=@OUTDIR@', - '@INPUT@' - ], - install: true, - install_dir: join_paths(epoxy_includedir, 'epoxy')) - gen_headers += [ glx_generated ] - headers += [ 'glx.h' ] + generated_headers += [ [ 'glx.h', 'glx_generated.h', glx_registry ] ] endif if build_wgl - wgl_generated = custom_target('wgl_generated.h', - input: wgl_registry, - output: [ - 'wgl_generated.h', - ], - command: [ - python, - gen_dispatch_py, - '--header', - '--no-source', - '--outputdir=@OUTDIR@', - '@INPUT@' - ], - install: true, - install_dir: join_paths(epoxy_includedir, 'epoxy')) - gen_headers += [ wgl_generated ] - headers += [ 'wgl.h' ] + generated_headers += [ [ 'wgl.h', 'wgl_generated.h', wgl_registry ] ] endif +gen_headers = [] + +foreach g: generated_headers + header = g[0] + gen_header = g[1] + registry = g[2] + generated = custom_target(gen_header, + input: registry, + output: [ gen_header ], + command: [ + python, + gen_dispatch_py, + '--header', + '--no-source', + '--outputdir=@OUTDIR@', + '@INPUT@', + ], + install: true, + install_dir: join_paths(epoxy_includedir, 'epoxy')) + + gen_headers += [ generated ] + headers += [ header ] +endforeach + install_headers(headers, subdir: 'epoxy') diff --git a/src/meson.build b/src/meson.build index fced355..3610af3 100644 --- a/src/meson.build +++ b/src/meson.build @@ -1,83 +1,51 @@ -common_sources = [ - 'dispatch_common.c', - 'dispatch_common.h', -] - # Configuration file configure_file(output: 'config.h', configuration: conf) -gl_generated = custom_target('gl_generated_dispatch.c', - input: gl_registry, - output: [ - 'gl_generated_dispatch.c', - ], - command: [ - python, - gen_dispatch_py, - '--source', - '--no-header', - '--outputdir=@OUTDIR@', - '@INPUT@', - ]) - -gen_sources = [ gl_generated ] -sources = common_sources +# List of generated sources: +# - name of the generated file +# - registry source file +# - additional sources +generated_sources = [ + [ 'gl_generated_dispatch.c', gl_registry, [ 'dispatch_common.c', 'dispatch_common.h' ] ] +] if build_egl - egl_generated = custom_target('egl_generated_dispatch.c', - input: egl_registry, - output: [ - 'egl_generated_dispatch.c', - ], - command: [ - python, - gen_dispatch_py, - '--source', - '--no-header', - '--outputdir=@OUTDIR@', - '@INPUT@', - ]) - gen_sources += [ egl_generated ] - sources += [ 'dispatch_egl.c' ] + generated_sources += [ [ 'egl_generated_dispatch.c', egl_registry, 'dispatch_egl.c' ] ] endif if build_glx - glx_generated = custom_target('glx_generated_dispatch.c', - input: glx_registry, - output: [ - 'glx_generated_dispatch.c', - ], - command: [ - python, - gen_dispatch_py, - '--source', - '--no-header', - '--outputdir=@OUTDIR@', - '@INPUT@', - ]) - gen_sources += [ glx_generated ] - sources += [ 'dispatch_glx.c' ] + generated_sources += [ [ 'glx_generated_dispatch.c', glx_registry, 'dispatch_glx.c' ] ] endif if build_wgl - wgl_generated = custom_target('wgl_generated_dispatch.c', - input: wgl_registry, - output: [ - 'wgl_generated_dispatch.c', - ], - command: [ - python, - gen_dispatch_py, - '--source', - '--no-header', - '--outputdir=@OUTDIR@', - '@INPUT@', - ]) - gen_sources += [ wgl_generated ] - sources += [ 'dispatch_wgl.c' ] + generated_sources += [ [ 'wgl_generated_dispatch.c', wgl_registry, 'dispatch_wgl.c' ] ] endif -epoxy_sources = common_sources + sources + gen_sources +gen_sources = [ ] +sources = [ ] + +foreach g: generated_sources + gen_source = g[0] + registry = g[1] + source = g[2] + + generated = custom_target(gen_source, + input: registry, + output: [ gen_source ], + command: [ + python, + gen_dispatch_py, + '--source', + '--no-header', + '--outputdir=@OUTDIR@', + '@INPUT@', + ]) + + gen_sources += [ generated ] + sources += [ source ] +endforeach + +epoxy_sources = sources + gen_sources epoxy_headers = gen_headers foreach h: headers epoxy_headers += join_paths(meson.source_root(), 'include/epoxy/@0@'.format(h))