summaryrefslogtreecommitdiff
path: root/meson.build
diff options
context:
space:
mode:
authorChristopher Degawa <ccom@randomderp.com>2022-10-25 14:41:05 -0500
committerChristopher Degawa <ccom@randomderp.com>2022-10-25 15:57:09 -0500
commita07e2f1e8ad049772cd24b7daa0a4a168f33bfba (patch)
tree87edf0526a78c785faca41d368be98c2e1ac0569 /meson.build
parentc45e09df1ef235d653d56aef05012f6a3cc57979 (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.build42
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))