From 51d66c1c257f7487497f562033ac32ac75f648cb Mon Sep 17 00:00:00 2001
From: Martin Jansa <Martin.Jansa@gmail.com>
Date: Mon, 8 Feb 2021 12:27:51 +0100
Subject: [PATCH] meson: import changes from 3.0.* version

* we need to use the meson option to disable introspection and docs

Upstream-Status: Backport
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
---
 meson.build       | 139 ++++++++++++++++++++++++++++------------------
 meson_options.txt |   5 ++
 2 files changed, 90 insertions(+), 54 deletions(-)
 create mode 100644 meson_options.txt

diff --git a/meson.build b/meson.build
index 1084c82..ed040b4 100644
--- a/meson.build
+++ b/meson.build
@@ -53,9 +53,9 @@ compiler = meson.get_compiler('c')
 pkgconfig = import('pkgconfig')
 
 # #######################################################################
-# # Check for GLib 2.16
+# # Check for GLib 2.44
 # #######################################################################
-glib = dependency('glib-2.0', version : '>= 2.16.0')
+glib = dependency('glib-2.0', version : '>= 2.44.0')
 gobject = dependency('gobject-2.0')
 gmodule = dependency('gmodule-2.0')
 gnome = import('gnome')
@@ -63,74 +63,88 @@ gnome = import('gnome')
 #######################################################################
 # Check for LibXML2
 #######################################################################
-libxml = dependency('libxml-2.0', version : '>= 2.6.0', required : false)
-gnt_config.set('NO_LIBXML', not libxml.found())
+libxml = dependency('libxml-2.0', version : '>= 2.6.0')
 
 #######################################################################
 # 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),
-]
-if not ncurses_libs[0].found() or not ncurses_libs[1].found()
-	ncurses_available = false
-endif
+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/']
 
-if host_machine.system() == 'windows'
-	# FIXME: $host ?
-	ncurses_sys_prefix = '/usr/$host/sys-root/mingw'
+ncurses = [
+	dependency('ncursesw', required : false),
+	dependency('panelw', required : false),
+]
+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
-		endif
-	endforeach
+		endforeach
 
-	if not found_ncurses_h
-		ncurses_inc = []
-		ncurses_libs = []
-		ncurses_available = false
+		if ncurses_available
+			ncurses = declare_dependency(
+			    include_directories : ncurses_inc,
+			    dependencies : ncurses_libs
+			)
+		endif
 	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',
@@ -191,7 +205,10 @@ libgnt_headers = [
 ]
 
 # Check for Python headers
-python_dep = dependency('python2', required : false)
+python_dep = dependency('python3-embed', required: false)
+if not python_dep.found()
+	python_dep = dependency('python3', required : false)
+endif
 gnt_config.set('USE_PYTHON', python_dep.found())
 
 configure_file(output : 'gntconfig.h',
@@ -233,6 +250,20 @@ pkgconfig.generate(
     variables : ['plugindir = ${libdir}/gnt'],
     )
 
+if get_option('introspection')
+	libgnt_gir = gnome.generate_gir(libgnt,
+	    sources : libgnt_headers + [gnt_h],
+	    includes : 'GObject-2.0',
+	    namespace : 'Gnt',
+	    symbol_prefix : 'gnt',
+	    identifier_prefix : 'Gnt',
+	    nsversion : '@0@.@1@'.format(gnt_major_version, gnt_minor_version),
+	    install : true,
+	    extra_args : ['-DGNT_COMPILATION', '--quiet'])
+endif
+
 subdir('wms')
 subdir('test')
-subdir('doc')
+if get_option('doc')
+	subdir('doc')
+endif
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 0000000..f2414e2
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1,5 @@
+option('doc', type : 'boolean', value : true, yield : true,
+       description : 'build documentation with gtk-doc')
+
+option('introspection', type : 'boolean', value : true, yield : true,
+       description : 'build introspection data')
