diff --git a/meson.build b/meson.build
index ce2f223a40..058382046e 100644
--- a/meson.build
+++ b/meson.build
@@ -2193,12 +2193,15 @@ endif
 
 # Check for the locale_t type and find the right header file.  macOS
 # needs xlocale.h; standard is locale.h, but glibc also has an
-# xlocale.h file that we should not use.
+# xlocale.h file that we should not use.  MSVC has a replacement
+# defined in src/include/port/win32_port.h.
 if cc.has_type('locale_t', prefix: '#include <locale.h>')
   cdata.set('HAVE_LOCALE_T', 1)
 elif cc.has_type('locale_t', prefix: '#include <xlocale.h>')
   cdata.set('HAVE_LOCALE_T', 1)
   cdata.set('LOCALE_T_IN_XLOCALE', 1)
+elif cc.get_id() == 'msvc'
+  cdata.set('HAVE_LOCALE_T', 1)
 endif
 
 # Check if the C compiler understands typeof or a variant.  Define
@@ -2411,6 +2414,13 @@ if cc.has_function('syslog', args: test_c_args) and \
 endif
 
 
+# MSVC has replacements defined in src/include/port/win32_port.h.
+if cc.get_id() == 'msvc'
+  cdata.set('HAVE_WCSTOMBS_L', 1)
+  cdata.set('HAVE_MBSTOWCS_L', 1)
+endif
+
+
 # if prerequisites for unnamed posix semas aren't fulfilled, fall back to sysv
 # semaphores
 if sema_kind == 'unnamed_posix' and \