diff options
author | Christopher Degawa <ccom@randomderp.com> | 2022-10-25 14:41:05 -0500 |
---|---|---|
committer | Christopher Degawa <ccom@randomderp.com> | 2022-10-25 15:57:09 -0500 |
commit | a07e2f1e8ad049772cd24b7daa0a4a168f33bfba (patch) | |
tree | 87edf0526a78c785faca41d368be98c2e1ac0569 /meson.build | |
parent | c45e09df1ef235d653d56aef05012f6a3cc57979 (diff) |
meson: modify gperf test to remove sh dependency
modifies the gperf test to instead rely on a file input
rather than piping in using sh, as sh is often not reliable
on Windows due to paths.
Also changes the if else ladder into a foreach loop.
Signed-off-by: Christopher Degawa <ccom@randomderp.com>
Diffstat (limited to 'meson.build')
-rw-r--r-- | meson.build | 42 |
1 files changed, 18 insertions, 24 deletions
diff --git a/meson.build b/meson.build index 6453d8c..b704a5b 100644 --- a/meson.build +++ b/meson.build @@ -315,39 +315,33 @@ if fc_configdir.startswith(fc_baseconfigdir + '/') fonts_conf.set('CONFIGDIR', fc_configdir.split(fc_baseconfigdir + '/')[1]) endif -# It will automatically fallback to subproject if not found on system -gperf = find_program('gperf') +gperf = find_program('gperf', required: false) +gperf_len_type = '' -sh = find_program('sh', required : false) - -if not sh.found() # host_machine.system() == 'windows' or not sh.found() - # TODO: This is not always correct - if cc.get_id() == 'msvc' - gperf_len_type = 'size_t' - else - gperf_len_type = 'unsigned' - endif -else +if gperf.found() gperf_test_format = ''' #include <string.h> const char * in_word_set(const char *, @0@); @1@ ''' - gperf_snippet_format = 'echo foo,bar | @0@ -L ANSI-C' - gperf_snippet = run_command(sh, '-c', gperf_snippet_format.format(gperf.full_path()), - check: true) - gperf_test = gperf_test_format.format('size_t', gperf_snippet.stdout()) + gperf_snippet = run_command(gperf, '-L', 'ANSI-C', files('meson-cc-tests/gperf.txt'), + check: true).stdout() - if cc.compiles(gperf_test) - gperf_len_type = 'size_t' - else - gperf_test = gperf_test_format.format('unsigned', gperf_snippet.stdout()) - if cc.compiles(gperf_test) - gperf_len_type = 'unsigned' - else - error('unable to determine gperf len type') + foreach type : ['size_t', 'unsigned'] + if cc.compiles(gperf_test_format.format(type, gperf_snippet)) + gperf_len_type = type + break endif + endforeach + + if gperf_len_type == '' + error('unable to determine gperf len type') endif +else + # Fallback to subproject + gperf = find_program('gperf') + # assume if we are compiling from the wrap, the size is just size_t + gperf_len_type = 'size_t' endif message('gperf len type is @0@'.format(gperf_len_type)) |