libpurple/meson.build

Mon, 12 May 2025 20:25:16 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Mon, 12 May 2025 20:25:16 -0500
changeset 43246
0e9bbe9b4da8
parent 43213
078c9e626db9
child 43292
03fe500d5aa5
permissions
-rw-r--r--

Handle formatting in server messages

Testing Done:
Used the default motd on my local ergo server to verify that formatting was working.

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

purple_coresources = [
	'accounts.c',
	'circularbuffer.c',
	'core.c',
	'debug.c',
	'image.c',
	'network.c',
	'plugins.c',
	'prefs.c',
	'proxy.c',
	'purpleaccount.c',
	'purpleaccountmanager.c',
	'purpleaccountoption.c',
	'purpleaccountusersplit.c',
	'purpleaddcontactrequest.c',
	'purpleattachment.c',
	'purpleattachments.c',
	'purpleauthorizationrequest.c',
	'purpleavatar.c',
	'purplebadge.c',
	'purplebadgemanager.c',
	'purplebadges.c',
	'purplechanneljoindetails.c',
	'purplecommand.c',
	'purplecommands.c',
	'purplecommandmanager.c',
	'purpleconnection.c',
	'purplecontact.c',
	'purplecontactinfo.c',
	'purplecontactmanager.c',
	'purpleconversation.c',
	'purpleconversationmanager.c',
	'purpleconversationmember.c',
	'purpleconversationmembers.c',
	'purplecreateconversationdetails.c',
	'purplecredentialmanager.c',
	'purplecredentialprovider.c',
	'purpledebugui.c',
	'purplefiletransfer.c',
	'purplefiletransfermanager.c',
	'purplegdkpixbuf.c',
	'purplegio.c',
	'purplehistoryadapter.c',
	'purplehistorymanager.c',
	'purpleidlemanager.c',
	'purplekeyvaluepair.c',
	'purplemarkup.c',
	'purplemenu.c',
	'purplemessage.c',
	'purplemessages.c',
	'purplenoopcredentialprovider.c',
	'purplenotification.c',
	'purplenotificationaddcontact.c',
	'purplenotificationauthorizationrequest.c',
	'purplenotificationconnectionerror.c',
	'purplenotificationlink.c',
	'purplenotificationmanager.c',
	'purpleoptions.c',
	'purplepath.c',
	'purpleperson.c',
	'purpleplugininfo.c',
	'purplepresence.c',
	'purplepresencemanager.c',
	'purpleprotocol.c',
	'purpleprotocolcontacts.c',
	'purpleprotocolconversation.c',
	'purpleprotocolfiletransfer.c',
	'purpleprotocolmanager.c',
	'purpleprotocolroster.c',
	'purpleprotocolwhiteboard.c',
	'purpleproxyinfo.c',
	'purplesavedpresence.c',
	'purplesqlitehistoryadapter.c',
	'purpletags.c',
	'purpleui.c',
	'purpleversion.c',
	'purplewhiteboard.c',
	'purplewhiteboardmanager.c',
	'purplewhiteboarduiops.c',
	'request.c',
	'request/purplerequestfield.c',
	'request/purplerequestfieldaccount.c',
	'request/purplerequestfieldbool.c',
	'request/purplerequestfieldchoice.c',
	'request/purplerequestfieldimage.c',
	'request/purplerequestfieldint.c',
	'request/purplerequestfieldlabel.c',
	'request/purplerequestfieldlist.c',
	'request/purplerequestfieldstring.c',
	'request/purplerequestgroup.c',
	'request/purplerequestpage.c',
	'util.c',
	'xmlnode.c'
]

purple_coreheaders = [
	'accounts.h',
	'circularbuffer.h',
	'core.h',
	'debug.h',
	'image.h',
	'network.h',
	'plugins.h',
	'prefs.h',
	'proxy.h',
	'purpleaccount.h',
	'purpleaccountmanager.h',
	'purpleaccountoption.h',
	'purpleaccountusersplit.h',
	'purpleaddcontactrequest.h',
	'purpleattachment.h',
	'purpleattachments.h',
	'purpleauthorizationrequest.h',
	'purpleavatar.h',
	'purplebadge.h',
	'purplebadgemanager.h',
	'purplebadges.h',
	'purplechanneljoindetails.h',
	'purplecommand.h',
	'purplecommands.h',
	'purplecommandmanager.h',
	'purpleconnection.h',
	'purplecontact.h',
	'purplecontactinfo.h',
	'purplecontactmanager.h',
	'purpleconversation.h',
	'purpleconversationmanager.h',
	'purpleconversationmember.h',
	'purpleconversationmembers.h',
	'purplecreateconversationdetails.h',
	'purplecredentialmanager.h',
	'purplecredentialprovider.h',
	'purpledebugui.h',
	'purplefiletransfer.h',
	'purplefiletransfermanager.h',
	'purplegdkpixbuf.h',
	'purplegio.h',
	'purplehistoryadapter.h',
	'purplehistorymanager.h',
	'purpleidlemanager.h',
	'purplekeyvaluepair.h',
	'purplemarkup.h',
	'purplemenu.h',
	'purplemessage.h',
	'purplemessages.h',
	'purplenoopcredentialprovider.h',
	'purplenotification.h',
	'purplenotificationaddcontact.h',
	'purplenotificationauthorizationrequest.h',
	'purplenotificationconnectionerror.h',
	'purplenotificationlink.h',
	'purplenotificationmanager.h',
	'purpleoptions.h',
	'purplepath.h',
	'purpleperson.h',
	'purpleplugininfo.h',
	'purplepresence.h',
	'purplepresencemanager.h',
	'purpleprotocol.h',
	'purpleprotocolcontacts.h',
	'purpleprotocolconversation.h',
	'purpleprotocolfiletransfer.h',
	'purpleprotocolmanager.h',
	'purpleprotocolroster.h',
	'purpleprotocolwhiteboard.h',
	'purpleproxyinfo.h',
	'purplesavedpresence.h',
	'purplesqlitehistoryadapter.h',
	'purpletags.h',
	'purpletyping.h',
	'purpleui.h',
	'purpleversion.h',
	'purplewhiteboard.h',
	'purplewhiteboardmanager.h',
	'purplewhiteboardops.h',
	'purplewhiteboarduiops.h',
	'request.h',
	'util.h',
	'xmlnode.h',
]

purple_private_headers = [
	'purpleaccountprivate.h',
	'purpleaccountmanagerprivate.h',
	'purplecommandmanagerprivate.h',
	'purplecontactmanagerprivate.h',
	'purpleconversationmanagerprivate.h',
	'purplecredentialmanagerprivate.h',
	'purplecredentialproviderprivate.h',
	'purplefiletransfermanagerprivate.h',
	'purplehistoryadapterprivate.h',
	'purpleidlemanagerprivate.h',
	'purplenotificationmanagerprivate.h',
	'purplepresencemanagerprivate.h',
	'purpleprotocolmanagerprivate.h',
	'purplewhiteboardmanagerprivate.h',
]

purple_request_headers = [
	'request/purplerequestfield.h',
	'request/purplerequestfieldaccount.h',
	'request/purplerequestfieldbool.h',
	'request/purplerequestfieldchoice.h',
	'request/purplerequestfieldimage.h',
	'request/purplerequestfieldint.h',
	'request/purplerequestfieldlabel.h',
	'request/purplerequestfieldlist.h',
	'request/purplerequestfieldstring.h',
	'request/purplerequestgroup.h',
	'request/purplerequestpage.h',
]

purple_builtsources = []
purple_builtheaders = []
purple_generated_sources = []

# An environment for unit tests.
testenv = environment()

purple_resource = gnome.compile_resources('purpleresources',
	'resources/libpurple.gresource.xml',
	source_dir : 'resources',
	c_name : 'purple')
purple_builtsources += purple_resource

purple_filebase = f'purple-@purple_api_major_version@'
purple_include_base = purple_filebase / 'libpurple'

if IS_WIN32
	purple_coresources += [
		'win32/libc_interface.c',
		'win32/win32dep.c'
	]

	purple_coreheaders += [
		'win32/win32dep.h',
	]

	libpurplerc = configure_file(
	    input : 'win32/libpurplerc.rc.in',
	    output : 'libpurplerc.rc',
	    configuration : version_conf)
	purple_coresources += windows.compile_resources(libpurplerc)
endif

purple_enumheaders = [
	'debug.h',
	'plugins.h',
	'purpleaccount.h',
	'purpleconnection.h',
	'purplecontactinfo.h',
	'purpleconversation.h',
	'purplecreateconversationdetails.h',
	'purplefiletransfer.h',
	'purpleplugininfo.h',
	'purplepresence.h',
	'purpleprotocol.h',
	'purpleproxyinfo.h',
	'purpletyping.h',
	'xmlnode.h'
]

enums = gnome.mkenums_simple('purpleenums',
    sources : purple_enumheaders,
    decorator : '_PURPLE_EXTERN',
    header_prefix : '#include "purpleversion.h"',
    install_header : true,
    install_dir : get_option('includedir') / purple_include_base)
enums_c = enums[0]
enums_h = enums[1]

PURPLE_H_INCLUDES = []
foreach header : purple_coreheaders + purple_request_headers + ['purpleversionconsts.h', 'purpleenums.h']
	PURPLE_H_INCLUDES += f'#include <libpurple/@header@>'
endforeach
purple_h_conf = configuration_data()
purple_h_conf.set('PURPLE_H_INCLUDES', '\n'.join(PURPLE_H_INCLUDES))

purple_h = configure_file(input : 'purple.h.in',
                          output : 'purple.h',
                          configuration : purple_h_conf,
                          install : true,
                          install_dir : get_option('includedir') / purple_filebase)
version_h = configure_file(input : 'purpleversionconsts.h.in',
                           output : 'purpleversionconsts.h',
                           configuration : version_conf,
                           install : true,
                           install_dir : get_option('includedir') / purple_include_base)

purple_builtsources += enums_c

purple_builtheaders += [
	purple_h,
	version_h,
	enums_h,
]

subdir('data')

libpurple_inc = include_directories('.')
libpurple = library('purple3',
                    purple_coresources + purple_builtsources +
                    purple_builtheaders + purple_schemas +
                    purple_private_headers + ['glibcompat.h'],
                    c_args : ['-DPURPLE_COMPILATION', '-DG_LOG_USE_STRUCTURED', '-DG_LOG_DOMAIN="Purple"'],
                    gnu_symbol_visibility : 'hidden',
                    include_directories : [toplevel_inc, libpurple_inc],
                    install : true,
                    version : PURPLE_LIB_VERSION,
                    dependencies : # static_link_libs
                        [dnsapi, ws2_32, glib, gio, gplugin_dep, libsoup,
                         libxml, gdk_pixbuf, gstreamer, gstreamer_app, json,
                         pango_dep, seagull_dep, sqlite3, math, birb_dep])

install_headers(purple_coreheaders,
                subdir : purple_include_base)

install_headers(purple_request_headers,
                subdir : purple_include_base / 'request')

pkgconfig.generate(
    libpurple,
    name : 'libpurple3',
    description : 'libpurple3 is a GLib-based instant messenger library.',
    version : meson.project_version(),
    filebase : purple_filebase,
# TODO: Only use purple_filebase once everything is ported to only use purple.h
    subdirs : [purple_filebase, purple_include_base],
    libraries : [glib, gdk_pixbuf, gplugin_dep],
    variables : [
      f'plugindir=${libdir}/@purple_filebase@',
    ])

if enable_introspection
	introspection_sources = (purple_coresources + purple_coreheaders +
	                         purple_builtheaders + purple_request_headers)

	libpurple_gir = gnome.generate_gir(libpurple,
	    sources : introspection_sources,
	    includes : ['Birb-1.0', 'GdkPixbuf-2.0', 'GLib-2.0', 'Gio-2.0', 'GObject-2.0', 'Gst-1.0', 'GPlugin-1.0', 'Pango-1.0'],
	    header : 'purple.h',
	    namespace : 'Purple',
	    symbol_prefix : 'purple',
	    identifier_prefix : 'Purple',
	    export_packages : purple_filebase,
	    nsversion : f'@purple_api_major_version@.@purple_api_minor_version@',
	    dependencies: [birb_dep, gplugin_dep],
	    install : true,
	    extra_args : ['-DPURPLE_COMPILATION', '--quiet'])

	purple_generated_sources += libpurple_gir
endif

libpurple_dep = declare_dependency(
    # Ensure purple headers built before any dependencies:
    sources : [purple_builtheaders] + purple_generated_sources,
    include_directories : [toplevel_inc, libpurple_inc],
    link_with : libpurple,
    dependencies : [birb_dep, gdk_pixbuf, gstreamer, gplugin_dep, glib, gio, pango_dep])

meson.override_dependency(purple_filebase, libpurple_dep)

subdir('tests')
subdir('plugins')
subdir('reference')

test(
	'purple_license_headers',
	check_license_header,
	verbose : true,
	args : [
		meson.current_source_dir(),
		'check_license_header_template.h',
		'glibcompat.h',
		'purple.h.in',
		'purpleversionconsts.h.in',
		purple_coresources,
		purple_coreheaders,
		purple_private_headers,
		purple_request_headers,
	]
)

mercurial