summaryrefslogtreecommitdiff
path: root/media-libs/fontconfig/files/fontconfig-2.14.1-gperf-meson.patch
blob: 5565012cad653b094a37f947d11d805abb9e9cec (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
https://gitlab.freedesktop.org/fontconfig/fontconfig/-/commit/a07e2f1e8ad049772cd24b7daa0a4a168f33bfba.patch

From a07e2f1e8ad049772cd24b7daa0a4a168f33bfba Mon Sep 17 00:00:00 2001
From: Christopher Degawa <ccom@randomderp.com>
Date: Tue, 25 Oct 2022 14:41:05 -0500
Subject: [PATCH] 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>
--- /dev/null
+++ b/meson-cc-tests/gperf.txt
@@ -0,0 +1 @@
+foo,bar
--- 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))
GitLab