meson: simplify iconv-emits-BOM check
Simplify the iconv-emits-BOM check that we have in Meson a bit by: - Dropping useless variables. - Casting the `inpos` pointer to `void *` instead of using a typedef that depends on whether or not we use an old iconv library. This overall condenses the code signficantly and makes it easier to follow. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Patrick Steinhardt committed
Mar 5, 2026 at 12:20 UTC
4cae5847694f0d62b6da3b55164f7749c0a19fef
1 file changed
+20
-36
meson.build
+20
-36
@@ -1033,42 +1033,26 @@ if iconv.found()
1033
have_old_iconv = true
1034
endif
1035
1036
- iconv_omits_bom_source = '''#
1037
- #include <iconv.h>
1038
-
1039
- int main(int argc, const char **argv)
1040
- {
1041
- '''
1042
- if have_old_iconv
1043
- iconv_omits_bom_source += '''
1044
- typedef const char *iconv_ibp;
1045
- '''
1046
- else
1047
- iconv_omits_bom_source += '''
1048
- typedef char *iconv_ibp;
1049
- '''
1050
- endif
1051
- iconv_omits_bom_source += '''
1052
- int v;
1053
- iconv_t conv;
1054
- char in[] = "a"; iconv_ibp pin = in;
1055
- char out[20] = ""; char *pout = out;
1056
- size_t isz = sizeof in;
1057
- size_t osz = sizeof out;
1058
-
1059
- conv = iconv_open("UTF-16", "UTF-8");
1060
- iconv(conv, &pin, &isz, &pout, &osz);
1061
- iconv_close(conv);
1062
- v = (unsigned char)(out[0]) + (unsigned char)(out[1]);
1063
- return v != 0xfe + 0xff;
1064
- }
1065
- '''
1066
-
1067
- if meson.can_run_host_binaries() and compiler.run(iconv_omits_bom_source,
1068
- dependencies: iconv,
1069
- name: 'iconv omits BOM',
1070
- ).returncode() != 0
1071
- libgit_c_args += '-DICONV_OMITS_BOM'
1036
+ if meson.can_run_host_binaries()
1037
+ if compiler.run('''
1038
+ #include <iconv.h>
1039
+
1040
+ int main(int argc, const char **argv)
1041
+ {
1042
+ char in[] = "a", *inpos = in;
1043
+ char out[20] = "", *outpos = out;
1044
+ size_t insz = sizeof(in), outsz = sizeof(out);
1045
+ iconv_t conv = iconv_open("UTF-16", "UTF-8");
1046
+ iconv(conv, (void *) &inpos, &insz, &outpos, &outsz);
1047
+ iconv_close(conv);
1048
+ return (unsigned char)(out[0]) + (unsigned char)(out[1]) != 0xfe + 0xff;
1049
+ }
1050
+ ''',
1051
+ dependencies: iconv,
1052
+ name: 'iconv omits BOM',
1053
+ ).returncode() != 0
1054
+ libgit_c_args += '-DICONV_OMITS_BOM'
1055
+ endif
1056
endif
1057
else
1058
libgit_c_args += '-DNO_ICONV'