finch/meson.build

Tue, 27 Jul 2021 01:31:54 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Tue, 27 Jul 2021 01:31:54 -0500
changeset 40999
9e5a5eb54a57
parent 40722
49bd421d0c8f
child 41006
a3d6a07889e7
permissions
-rw-r--r--

bump the minimum meson to 0.56.0 and fix the deprecations

Testing Done:
Verfied meson didn't complain about any deprecations.

Reviewed at https://reviews.imfreedom.org/r/843/

enable_consoleui = false
if get_option('consoleui')
	libgnt_dep = dependency('gnt3', version : '>= 3.0.0', required : false)
	if libgnt_dep.found()
		libgnt_docpath = libgnt_dep.get_pkgconfig_variable('prefix') / 'share/gtk-doc/html'

		if enable_introspection
			libgnt_gir = ['Gnt-3.0']
		endif
	else
		libgnt_proj = subproject('libgnt',
		    default_options : [
		        'doc=' + get_option('doc').to_string(),
		        'introspection=' + enable_introspection.to_string(),
		    ]
		)
		libgnt_dep = libgnt_proj.get_variable('libgnt_dep')

		libgnt_docpath = meson.project_build_root() / 'subprojects/libgnt/doc/'
		if enable_introspection
			libgnt_gir = libgnt_proj.get_variable('libgnt_gir')
		endif
	endif

	#######################################################################
	# Check for ncurses and other things used by it
	# FIXME: This should be temporary until libgnt wraps the functionality.
	#######################################################################
	ncurses_available = 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)
	if ncurses.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_available = false
		ncurses_inc = []
		ncurses_libs = compiler.find_library('ncursesw', required : false)
		if ncurses_libs.found()
			foreach location : ncursesw_header_paths
				f = location / 'ncurses.h'
				if compiler.has_header_symbol(f, 'get_wch',
				    prefix : '#define _XOPEN_SOURCE_EXTENDED')
					ncurses_available = true
					ncurses_header = f
				endif
			endforeach

			if ncurses_available
				ncurses = declare_dependency(
				    include_directories : ncurses_inc,
				    dependencies : ncurses_libs
				)
			endif
		endif
	endif

	if not ncurses_available
		# ncursesw was not found. Look for plain old ncurses
		ncurses = dependency('ncurses', required : false)
		if ncurses.found()
			ncurses_available = true
		else
			ncurses_libs = compiler.find_library('ncurses', required : false)
			ncurses_available = ncurses_libs.found()
			ncurses = declare_dependency(dependencies : ncurses_libs)
		endif
	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

	if libgnt_dep.found() and ncurses_available
		ncurses_header = '-DNCURSES_HEADER="@0@"'.format(ncurses_header)
		enable_consoleui = true
	else
		error('''

Finch will not be built. You need to install libgnt (or its requirements) and its development headers.

''')
	endif
endif


libfinch_SOURCES = [
	'gntaccount.c',
	'gntblist.c',
	'gntconn.c',
	'gntconv.c',
	'gntdebug.c',
	'gntidle.c',
	'gntlog.c',
	'gntmedia.c',
	'gntmenuutil.c',
	'gntnotify.c',
	'gntplugin.c',
	'gntprefs.c',
	'gntrequest.c',
	'gntroomlist.c',
	'gntstatus.c',
	'gntui.c',
	'gntxfer.c',
	package_revision,
	'libfinch.c'
]

libfinch_headers = [
	'gntaccount.h',
	'gntblist.h',
	'gntconn.h',
	'gntconv.h',
	'gntdebug.h',
	'gntidle.h',
	'gntlog.h',
	'gntmedia.h',
	'gntmenuutil.h',
	'gntnotify.h',
	'gntplugin.h',
	'gntprefs.h',
	'gntrequest.h',
	'gntroomlist.h',
	'gntstatus.h',
	'gntui.h',
	'gntxfer.h',
	'libfinch.h'
]

libfinch_enum_headers = [
	'gntconv.h',
]

# the built lists are append to below
libfinch_built_sources = []
libfinch_built_headers = []

finch_SOURCES = [
	'finch.c'
]

if IS_WIN32
	winmm = compiler.find_library('winmm')

	finch_winres = configure_file(
	    input : 'finch_winres.rc.in',
	    output : 'finch_winres.rc',
	    configuration : version_conf)
	finch_SOURCES += windows.compile_resources(finch_winres)
	libfinch_winres = configure_file(
	    input : 'libfinch_winres.rc.in',
	    output : 'libfinch_winres.rc',
	    configuration : version_conf)
	libfinch_SOURCES += windows.compile_resources(libfinch_winres)
else
	winmm = []
endif

if enable_consoleui
	libfinch_enums = gnome.mkenums_simple('finchenums',
		sources: libfinch_enum_headers)
	libfinch_built_sources += libfinch_enums[0]
	libfinch_built_headers += libfinch_enums[1]

	FINCH_H_INCLUDES = []
	foreach header : libfinch_headers + ['finchenums.h']
		FINCH_H_INCLUDES += '#include <finch/@0@>'.format(header)
	endforeach
	finch_h_conf = configuration_data()
	finch_h_conf.set('FINCH_H_INCLUDES', '\n'.join(FINCH_H_INCLUDES))

	finch_h = configure_file(input : 'finch.h.in',
	                         output : 'finch.h',
	                         configuration : finch_h_conf,
	                         install : true,
				 install_dir : get_option('includedir') / 'finch-3')
	libfinch_built_headers += finch_h

	install_headers(libfinch_headers, subdir : 'finch-3')

	libfinch_inc = include_directories('.')
	libfinch = shared_library('finch3',
	    libfinch_SOURCES + libfinch_built_headers + libfinch_built_sources,
	    c_args : ['-DSTANDALONE', '-DGNTSEAL_ENABLE', '-DFINCH_COMPILATION', ncurses_header],
	    include_directories : [toplevel_inc],
	    version : PURPLE_LIB_VERSION,
	    dependencies : [libpurple_dep, libgnt_dep, ncurses, glib, winmm],
	    install : true)
	libfinch_dep = declare_dependency(
	    include_directories : [toplevel_inc, libfinch_inc],
	    link_with : libfinch,
	    sources: libfinch_built_headers,
	    dependencies : [libpurple_dep, libgnt_dep, glib])

	finch = executable('finch3',
	    finch_SOURCES,
	    c_args : ['-DSTANDALONE', '-DGNTSEAL_ENABLE'],
	    dependencies : [libpurple_dep, libgnt_dep, libfinch_dep],
	    install : true)

	pkgconfig.generate(
	    name : 'Finch',
	    description : 'Finch is an instant messenger application that uses libpurple for protocol support and ncurses (libgnt) for the UI.',
	    version : meson.project_version(),
	    filebase : 'finch-3',
	    subdirs : 'finch-3',
	    libraries : [libfinch],
	    requires : ['gnt', 'purple-3'],
	    variables : ['plugindir=${libdir}/finch-@0@'.format(purple_major_version)])

	if enable_introspection
		introspection_sources = libfinch_headers

		Finch_gir_includes = [
			libgnt_gir[0],
			gplugin_gir,
			# subproject needs to be before libpurple in the repo so that
			# meson will use our variables and not try to discover them from
			# libpurple.
			libpurple_gir[0],
		]

		gnome.generate_gir(libfinch,
		    sources : introspection_sources,
		    includes : Finch_gir_includes,
		    namespace : 'Finch',
		    symbol_prefix : 'finch',
		    identifier_prefix : 'Finch',
		    export_packages : 'finch',
		    nsversion : '@0@.@1@'.format(purple_major_version,
		                                 purple_minor_version),
		    include_directories : [
		        gplugin_include_directories,
		    ],
		    install : true,
		    extra_args : ['-DFINCH_COMPILATION', '--quiet'])
	endif

	subdir('plugins')
endif  # enable_consoleui

mercurial