diff --git a/meson.build b/meson.build
index 1084c82..7f824b9 100644
--- a/meson.build
+++ b/meson.build
@@ -70,67 +70,77 @@ gnt_config.set('NO_LIBXML', not libxml.found())
 # Check for ncurses and other things used by it
 #######################################################################
 ncurses_available = true
-ncurses_inc = []
-# The order of this list is important to the condition that follows.
-ncurses_libs = [
-	compiler.find_library('ncursesw', required : false),
-	compiler.find_library('panelw', required : false),
-	compiler.find_library('tinfow', required : false),
+ncurses_widechar = true
+ncurses_header = 'ncurses.h'
+# Some distros put the headers in ncursesw/, some don't. These are ordered to
+# pick the last available as most-specific version.
+ncursesw_header_paths = ['', 'ncursesw/']
+ncurses = [
+	dependency('ncursesw', required : false),
+	dependency('panelw', required : false),
 ]
-if not ncurses_libs[0].found() or not ncurses_libs[1].found()
-	ncurses_available = false
-endif
-
-if host_machine.system() == 'windows'
-	# FIXME: $host ?
-	ncurses_sys_prefix = '/usr/$host/sys-root/mingw'
+if ncurses[0].found() and ncurses[1].found()
+	foreach location : ncursesw_header_paths
+		f = location + 'ncurses.h'
+		if compiler.has_header_symbol(f, 'get_wch',
+		    prefix : '#define _XOPEN_SOURCE_EXTENDED')
+			ncurses_header = f
+		endif
+	endforeach
 else
-	ncurses_sys_prefix = '/usr'
-endif
-
-ncurses_sys_dirs = [ncurses_sys_prefix + '/include/ncursesw',
-                    ncurses_sys_prefix + '/include']
-
-if ncurses_available
-	# Some distros put the headers in ncursesw/, some don't
-	found_ncurses_h = false
-	foreach location : ncurses_sys_dirs
-		f = location + '/ncurses.h'
-		if not found_ncurses_h
+	ncurses_available = false
+	ncurses_inc = []
+	ncurses_libs = [
+		compiler.find_library('ncursesw', required : false),
+		compiler.find_library('panelw', required : false)
+	]
+	if ncurses_libs[0].found() and ncurses_libs[1].found()
+		foreach location : ncursesw_header_paths
+			f = location + 'ncurses.h'
 			if compiler.has_header_symbol(f, 'get_wch',
 			    prefix : '#define _XOPEN_SOURCE_EXTENDED')
-				if location != '.'
-					ncurses_inc += [include_directories(location)]
-				endif
-				found_ncurses_h = true
+				ncurses_available = true
+				ncurses_header = f
 			endif
+		endforeach
+		if ncurses_available
+			ncurses = declare_dependency(
+			    include_directories : ncurses_inc,
+			    dependencies : ncurses_libs
+			)
 		endif
-	endforeach
-
-	if not found_ncurses_h
-		ncurses_inc = []
-		ncurses_libs = []
-		ncurses_available = false
 	endif
-else
+endif
+if not ncurses_available
 	# ncursesw was not found. Look for plain old ncurses
-	# The order of this list is important to the condition that follows.
-	ncurses_libs = [
-		compiler.find_library('ncurses', required : false),
-		compiler.find_library('panel', required : false),
-		compiler.find_library('tinfo', required : false),
+	ncurses = [
+		dependency('ncurses', required : false),
+		dependency('panel', required : false),
 	]
-	ncurses_available = ncurses_libs[0].found() and ncurses_libs[1].found()
-	gnt_config.set('NO_WIDECHAR', true)
+	if ncurses[0].found() and ncurses_libs[1].found()
+		ncurses_available = true
+	else
+		ncurses_libs = [
+			compiler.find_library('ncurses', required : false),
+			compiler.find_library('panel', required : false),
+		]
+		ncurses_available = ncurses_libs[0].found() and ncurses_libs[1].found()
+		ncurses = declare_dependency(dependencies : ncurses_libs)
+	endif
+	ncurses_widechar = false
+endif
+if not ncurses_available and host_machine.system() == 'windows'
+	# Try pdcurses too.
+	ncurses_header = 'curses.h'
+	ncurses_libs = compiler.find_library('pdcurses', required : false)
+	ncurses_available = compiler.has_header(ncurses_header) and ncurses_libs.found()
+	ncurses = declare_dependency(dependencies : ncurses_libs)
 endif
 if not ncurses_available
 	error('ncurses could not be found!')
 endif
-
-ncurses = declare_dependency(
-    include_directories : ncurses_inc,
-    dependencies : ncurses_libs
-)
+gnt_config.set('NCURSES_HEADER', ncurses_header)
+gnt_config.set10('NCURSES_WIDECHAR', ncurses_widechar)
 
 libgnt_SOURCES = [
 	'gntwidget.c',
