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'