meson: Use configuration_data() instead of piping variables through echo

Having a template file with replacement macros is a bit cleaner than
encoding the setup of the file in `meson.build` and piping that through
`echo` with caputred variables.

Unfortunately there appears to be no support for repetition, to e.g.
expand a list of platform names into the various uses (array with comma-
separation, or individual `extern struct` declarations, forcing us to
have some form of string expansion within `meson.build`).
This commit is contained in:
Marijn Suijten
2023-11-06 12:52:25 +01:00
parent 1a0570550e
commit 4d332b2b43
2 changed files with 15 additions and 11 deletions

View File

@@ -33,7 +33,7 @@ debugcc_srcs = [
]
platform_defs = []
platform_array = ['const struct debugcc_platform *platforms[] = {']
platform_array = []
foreach p: platforms
debugcc_srcs += p + '.c'
@@ -45,19 +45,14 @@ foreach p: platforms
pointing_to: 'debugcc')
endforeach
platform_array += '\tNULL,'
platform_array += '};'
platforms = configuration_data()
platforms.set('PLATFORM_DEFS', '\n'.join(platform_defs))
platforms.set('PLATFORM_ARRAY', '\n'.join(platform_array))
debugcc_srcs += configure_file(
input: 'platforms.c.in',
output: 'platforms.c',
capture: true,
command: ['echo',
'/* Autogenerated file, do not edit */\n\n' +
'#include <stdlib.h>\n\n' +
'\n'.join(platform_defs) +
'\n\n' +
'\n'.join(platform_array)
])
configuration: platforms)
executable('debugcc',
debugcc_srcs,

9
platforms.c.in Normal file
View File

@@ -0,0 +1,9 @@
/* Autogenerated file, do not edit */
#include <stdlib.h>
@PLATFORM_DEFS@
const struct debugcc_platform *platforms[] = {
@PLATFORM_ARRAY@
NULL,
};