qulogic/pidgin
Clone
Summary
Browse
Changes
Graph
Replace Talkatu with GtkTextView in GTK Requests
8 months ago, Gary Kramlich
20a6cf622004
Replace Talkatu with GtkTextView in GTK Requests
Did some additional cleanups too but nothing major.
Testing Done:
Opened some requests from a demo account.
Reviewed at https://reviews.imfreedom.org/r/2768/
# UPDATING VERSION NUMBERS FOR RELEASES
#
# The version number is:
# <major>.<minor>.<micro><extra>
#
# micro += 1
#
# If any functions have been added to libpurple, Pidgin, or Finch:
# micro = 0
# minor += 1
#
# If backwards compatibility has been broken in libpurple, Pidgin, or Finch:
# micro = 0
# minor = 0
# major += 1
# purple_soversion += 1
#
# extra should be similar to one of the following:
# For beta releases: '-beta2'
# For code under development: '-devel'
# For production releases: ''
#
project
(
'pidgin'
,
'c'
,
version
:
'3.0.0-devel'
,
meson_version
:
'>=0.58.0'
,
default_options
:
[
'c_std=c17'
,
'warning_level=2'
])
purple_soversion
=
0
parts
=
meson
.
project_version
().
split
(
'-'
)
if
parts
.
length
()
>
1
purple_extra_version
=
parts
[
1
]
else
purple_extra_version
=
''
endif
parts
=
parts
[
0
].
split
(
'.'
)
purple_major_version
=
parts
[
0
]
purple_minor_version
=
parts
[
1
]
purple_micro_version
=
parts
[
2
]
GETTEXT_PACKAGE
=
'pidgin3'
find_program
(
'gettext'
)
find_program
(
'xgettext'
)
add_project_arguments
([
'-DVERSION="@0@"'
.
format
(
meson
.
project_version
()),
'-DDISPLAY_VERSION="@0@"'
.
format
(
meson
.
project_version
()),
'-DPURPLE_WEBSITE="https://pidgin.im/"'
,
f
'-DGETTEXT_PACKAGE="@GETTEXT_PACKAGE@"'
],
language
:
'c'
)
conf
=
configuration_data
()
man_conf
=
configuration_data
()
version_conf
=
configuration_data
()
conf
.
set_quoted
(
'GETTEXT_PACKAGE'
,
GETTEXT_PACKAGE
)
conf
.
set_quoted
(
'PACKAGE'
,
meson
.
project_name
())
conf
.
set_quoted
(
'PACKAGE_NAME'
,
meson
.
project_name
())
conf
.
set_quoted
(
'VERSION'
,
meson
.
project_version
())
conf
.
set_quoted
(
'DISPLAY_VERSION'
,
meson
.
project_version
())
version_conf
.
set
(
'PURPLE_MAJOR_VERSION'
,
purple_major_version
)
version_conf
.
set
(
'PURPLE_MINOR_VERSION'
,
purple_minor_version
)
version_conf
.
set
(
'PURPLE_MICRO_VERSION'
,
purple_micro_version
)
version_conf
.
set
(
'PURPLE_EXTRA_VERSION'
,
purple_extra_version
)
version_conf
.
set
(
'PURPLE_VERSION'
,
meson
.
project_version
())
version_conf
.
set
(
'PURPLE_API_VERSION'
,
purple_soversion
)
PURPLE_LIB_VERSION
=
f
'@purple_soversion@.@purple_minor_version@.@purple_micro_version@'
package_revision
=
vcs_tag
(
input
:
'package_revision.h.in'
,
output
:
'package_revision.h'
,
fallback
:
meson
.
project_version
())
# For running `meson devenv`.
devenv
=
environment
()
# For man pages.
man_conf
.
set
(
'VERSION'
,
meson
.
project_version
())
man_conf
.
set
(
'prefix'
,
get_option
(
'prefix'
))
# Used for pkg-config files.
pkgconfig
=
import
(
'pkgconfig'
)
# Storing build arguments
meson
.
add_postconf_script
(
'mkmesonconf.py'
,
meson
.
project_build_root
())
conf
.
set
(
'HAVE_MESON_CONFIG'
,
true
)
# Checks for programs.
compiler
=
meson
.
get_compiler
(
'c'
)
# Check for Sun compiler
SUNCC
=
compiler
.
compiles
(
'void main() {__SUNPRO_C;};'
)
# Check for Win32
if
host_machine
.
system
()
==
'windows'
windows
=
import
(
'windows'
)
IS_WIN32
=
true
ws2_32
=
compiler
.
find_library
(
'ws2_32'
)
dnsapi
=
compiler
.
find_library
(
'dnsapi'
)
conf
.
set
(
'WIN32_LEAN_AND_MEAN'
,
true
)
conf
.
set
(
'LIBPIDGIN_DLL_NAMEW'
,
f
'L"libpidgin3-@purple_soversion@.dll"'
)
else
IS_WIN32
=
false
ws2_32
=
[]
dnsapi
=
[]
endif
# Checks for header files.
conf
.
set
(
'HAVE_UNISTD_H'
,
compiler
.
has_header
(
'unistd.h'
))
# Check for directories
if
IS_WIN32
foreach
dir
:
[
'bin'
,
'lib'
,
'data'
,
'sysconf'
,
'locale'
]
path
=
get_option
(
'prefix'
)
/
get_option
(
dir
+
'dir'
)
conf
.
set_quoted
(
'WIN32_FHS_@0@DIR'
.
format
(
dir
.
to_upper
()),
path
)
endforeach
conf
.
set
(
'PURPLE_LIBDIR'
,
f
'wpurple_lib_dir("purple-@purple_major_version@")'
)
conf
.
set
(
'PIDGIN_LIBDIR'
,
f
'wpurple_lib_dir("pidgin-@purple_major_version@")'
)
conf
.
set
(
'FINCH_LIBDIR'
,
f
'wpurple_lib_dir("finch-@purple_major_version@")'
)
conf
.
set
(
'PURPLE_DATADIR'
,
'wpurple_data_dir()'
)
conf
.
set
(
'PURPLE_SYSCONFDIR'
,
'wpurple_sysconf_dir()'
)
conf
.
set
(
'PURPLE_LOCALEDIR'
,
'wpurple_locale_dir()'
)
else
foreach
dir
:
[
'data'
,
'sysconf'
,
'locale'
]
path
=
get_option
(
'prefix'
)
/
get_option
(
dir
+
'dir'
)
conf
.
set_quoted
(
'PURPLE_@0@DIR'
.
format
(
dir
.
to_upper
()),
path
)
endforeach
common_libdir
=
get_option
(
'prefix'
)
/
get_option
(
'libdir'
)
conf
.
set_quoted
(
'PURPLE_LIBDIR'
,
common_libdir
/
f
'purple-@purple_major_version@'
)
conf
.
set_quoted
(
'PIDGIN_LIBDIR'
,
common_libdir
/
f
'pidgin-@purple_major_version@'
)
conf
.
set_quoted
(
'FINCH_LIBDIR'
,
common_libdir
/
f
'finch-@purple_major_version@'
)
endif
abslibdir
=
get_option
(
'prefix'
)
/
get_option
(
'libdir'
)
PURPLE_PLUGINDIR
=
abslibdir
/
f
'purple-@purple_major_version@'
conf
.
set_quoted
(
'PURPLE_PLUGINDIR'
,
PURPLE_PLUGINDIR
)
PIDGIN_PLUGINDIR
=
abslibdir
/
f
'pidgin-@purple_major_version@'
conf
.
set_quoted
(
'PIDGIN_PLUGINDIR'
,
PIDGIN_PLUGINDIR
)
FINCH_PLUGINDIR
=
abslibdir
/
f
'finch-@purple_major_version@'
conf
.
set_quoted
(
'FINCH_PLUGINDIR'
,
FINCH_PLUGINDIR
)
# Windows and Haiku do not use libm for the math functions, they are part
# of the C library
math
=
compiler
.
find_library
(
'm'
,
required
:
false
)
IOKIT
=
[]
if
host_machine
.
system
()
==
'darwin'
IOKIT
=
dependency
(
'appleframeworks'
,
modules
:
[
'IOKit'
,
'CoreFoundation'
])
conf
.
set
(
'HAVE_IOKIT'
,
true
)
endif
#######################################################################
# Check for GLib (required)
#######################################################################
# Once we require >= 2.74.0, remove the hack in the if(TRUE) block in
# libpurple/core.c.
glib
=
dependency
(
'glib-2.0'
,
version
:
'>= 2.76.0'
)
gio
=
dependency
(
'gio-2.0'
)
gnome
=
import
(
'gnome'
)
add_project_arguments
(
'-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_76'
,
'-DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_76'
,
language
:
'c'
,)
#######################################################################
# Check for gdk-pixbuf (required)
#######################################################################
gdk_pixbuf
=
dependency
(
'gdk-pixbuf-2.0'
,
version
:
'>= 2.26.0'
)
#######################################################################
# Check for GObject Introspection
#######################################################################
if
get_option
(
'introspection'
)
enable_introspection
=
dependency
(
'gobject-introspection-1.0'
,
version
:
'>= 1.39.0'
).
found
()
else
enable_introspection
=
false
endif
#######################################################################
# Check Pidgin dependencies
#######################################################################
if
get_option
(
'gtkui'
)
gtk
=
dependency
(
'gtk4'
,
version
:
'>= 4.10.0'
)
libadwaita
=
dependency
(
'libadwaita-1'
,
version
:
'>= 1.2'
)
talkatu_dep
=
dependency
(
'talkatu'
,
version
:
'>=0.2.0'
,
fallback
:
[
'talkatu'
,
'talkatu_dep'
])
endif
# GTK
ENABLE_GTK
=
get_option
(
'gtkui'
)
#######################################################################
# Check if we should compile with X support
#######################################################################
if
IS_WIN32
x11
=
disabler
()
else
x11
=
dependency
(
'x11'
,
required
:
get_option
(
'x'
))
endif
conf
.
set
(
'HAVE_X11'
,
x11
.
found
())
#######################################################################
# Check for LibXML2 (required)
#######################################################################
libxml
=
dependency
(
'libxml-2.0'
,
version
:
'>= 2.6.0'
)
if
libxml
.
version
().
version_compare
(
'<2.6.18'
)
message
(
'Versions of libxml2 < 2.6.18 may contain bugs that could cause XMPP messages to be discarded.'
)
endif
#######################################################################
# Check for JSON-GLib (required)
#######################################################################
json
=
dependency
(
'json-glib-1.0'
,
version
:
'>= 0.14.0'
)
######################################################################
# Check for libsoup (required)
#######################################################################
libsoup
=
dependency
(
'libsoup-3.0'
,
version
:
'>= 3'
)
add_project_arguments
(
'-DSOUP_VERSION_MIN_REQUIRED=SOUP_VERSION_3_0'
,
'-DSOUP_VERSION_MAX_ALLOWED=SOUP_VERSION_3_0'
,
language
:
'c'
)
#######################################################################
# Check for sqlite3 (required)
#######################################################################
sqlite3
=
dependency
(
'sqlite3'
,
version
:
'>= 3.27.0'
)
#######################################################################
# Check for GStreamer
#######################################################################
gstreamer
=
dependency
(
'gstreamer-1.0'
,
version
:
'>=1.14'
)
#######################################################################
# Check for Raw data streams support in Farstream
#######################################################################
gstreamer_app
=
dependency
(
'gstreamer-app-1.0'
)
#######################################################################
# Check for Native Avahi headers (for Bonjour)
#######################################################################
if
IS_WIN32
# Just keep enabled.
enable_avahi
=
get_option
(
'avahi'
).
enabled
()
or
get_option
(
'avahi'
).
auto
()
avahi
=
[]
else
# Attempt to autodetect Avahi
avahi_client
=
dependency
(
'avahi-client'
,
required
:
get_option
(
'avahi'
))
avahi_glib
=
dependency
(
'avahi-glib'
,
required
:
get_option
(
'avahi'
))
avahi
=
[
avahi_client
,
avahi_glib
]
enable_avahi
=
avahi_client
.
found
()
and
avahi_glib
.
found
()
endif
#######################################################################
# Check for Gadu-Gadu protocol library (libgadu)
#######################################################################
libgadu
=
dependency
(
'libgadu'
,
version
:
'>= 1.12.0'
,
required
:
get_option
(
'libgadu'
))
if
libgadu
.
found
()
if
not
compiler
.
has_function
(
'gg_is_gpl_compliant'
,
dependencies
:
libgadu
)
if
get_option
(
'libgadu'
).
auto
()
libgadu
=
disabler
()
else
message
(
'''
libgadu is not compatible with the GPL when compiled with OpenSSL support.
To link against libgadu, please recompile it using:
./configure --with-openssl=no
Then rerun this Meson build
'''
)
endif
endif
endif
dependency
(
'shoes'
,
required
:
false
)
DEFAULT_PRPLS
=
[
'bonjour'
,
'demo'
,
'gg'
,
'ircv3'
,
'jabber'
]
dynamic_list
=
get_option
(
'dynamic-prpls'
).
split
(
','
)
if
dynamic_list
==
[
'all'
]
dynamic_list
=
DEFAULT_PRPLS
endif
DYNAMIC_PRPLS
=
[]
foreach
prpl
:
dynamic_list
if
prpl
==
''
# The list was empty; do nothing.
elif
prpl
==
'bonjour'
and
not
enable_avahi
# Do nothing.
elif
prpl
==
'gg'
and
not
libgadu
.
found
()
# Do nothing.
else
DYNAMIC_PRPLS
+=
[
prpl
]
endif
endforeach
DYNAMIC_BONJOUR
=
DYNAMIC_PRPLS
.
contains
(
'bonjour'
)
DYNAMIC_DEMO
=
DYNAMIC_PRPLS
.
contains
(
'demo'
)
DYNAMIC_GG
=
DYNAMIC_PRPLS
.
contains
(
'gg'
)
DYNAMIC_IRCV3
=
DYNAMIC_PRPLS
.
contains
(
'ircv3'
)
DYNAMIC_JABBER
=
DYNAMIC_PRPLS
.
contains
(
'jabber'
)
add_project_arguments
(
'-DPURPLE_DISABLE_DEPRECATED'
,
'-DPIDGIN_DISABLE_DEPRECATED'
,
'-DFINCH_DISABLE_DEPRECATED'
,
'-DGNT_DISABLE_DEPRECATED'
,
language
:
'c'
)
if
get_option
(
'buildtype'
)
!=
'plain'
and
compiler
.
get_id
()
==
'gcc'
# We enable -Wall later.
# If it's set after the warning CFLAGS in the compiler invocation, it counteracts the -Wno... flags.
# This leads to warnings we don't want.
# CFLAGS=`echo $CFLAGS |$sedpath 's/-Wall//'`
# ENABLE WARNINGS SUPPORTED BY THE VERSION OF GCC IN USE
#
# Future Possibilities
#
# Consider adding -Wbad-function-cast.
# This leads to spurious warnings using GPOINTER_TO_INT(), et al. directly on a function call.
# We'd need an intermediate variable.
#
foreach
newflag
:
[
'-Waggregate-return'
,
'-Wcast-align'
,
'-Wdeclaration-after-statement'
,
'-Wendif-labels'
,
'-Werror-implicit-function-declaration'
,
'-Wextra -Wno-unused-parameter'
,
'-Wformat'
,
'-Wformat-security'
,
'-Werror=format-security'
,
'-Winit-self'
,
'-Wmissing-declarations'
,
'-Wmissing-noreturn'
,
'-Wmissing-prototypes'
,
'-Wpointer-arith'
,
'-Wfloat-equal'
,
'-Wundef'
]
if
compiler
.
has_argument
(
newflag
)
add_project_arguments
(
newflag
,
language
:
'c'
)
endif
endforeach
endif
if
get_option
(
'buildtype'
)
!=
'plain'
and
SUNCC
add_project_arguments
(
'-features=extensions'
,
language
:
'c'
)
endif
pidgin3path
=
find_program
(
'pidgin3'
,
required
:
false
)
#######################################################################
# Check for Unity and Messaging Menu
# Remove when Ubuntu 16.04 is EOL
#######################################################################
UNITY
=
[
dependency
(
'unity'
,
version
:
'>= 6.8'
,
required
:
get_option
(
'unity-integration'
)),
dependency
(
'messaging-menu'
,
version
:
'>= 12.10'
,
required
:
get_option
(
'unity-integration'
))
]
enable_unity
=
UNITY
[
0
].
found
()
and
UNITY
[
1
].
found
()
if
enable_unity
conf
.
set
(
'USES_MM_CHAT_SECTION'
,
'X-MessagingMenu-UsesChatSection=true'
)
else
conf
.
set
(
'USES_MM_CHAT_SECTION'
,
''
)
endif
#######################################################################
# Check for Secret Service headers
#######################################################################
if
IS_WIN32
libsecret
=
disabler
()
else
libsecret
=
dependency
(
'libsecret-1'
,
required
:
get_option
(
'libsecret'
))
endif
#######################################################################
# Check for KWallet headers
#######################################################################
if
IS_WIN32
or
not
add_languages
(
'cpp'
,
required
:
get_option
(
'kwallet'
),
native
:
false
)
kwallet
=
disabler
()
else
add_project_arguments
([
'-DDISPLAY_VERSION="@0@"'
.
format
(
meson
.
project_version
()),
'-DPURPLE_WEBSITE="https://pidgin.im/"'
,
f
'-DGETTEXT_PACKAGE="@GETTEXT_PACKAGE@"'
],
language
:
'cpp'
)
qt5
=
import
(
'qt5'
)
qt5_dep
=
dependency
(
'qt5'
,
modules
:
[
'Core'
],
required
:
get_option
(
'kwallet'
))
kwallet
=
dependency
(
'KF5Wallet'
,
required
:
get_option
(
'kwallet'
))
endif
#######################################################################
# Check for GPlugin
#######################################################################
gplugin_version
=
[
'>=0.41.0'
,
'<0.42.0'
]
gplugin_dep
=
dependency
(
'gplugin'
,
version
:
gplugin_version
,
fallback
:
[
'gplugin'
,
'gplugin_dep'
])
if
get_option
(
'gtkui'
)
gplugin_gtk_dep
=
dependency
(
'gplugin-gtk4'
,
version
:
gplugin_version
,
fallback
:
[
'gplugin-gtk4'
,
'gplugin_gtk4_dep'
])
endif
#######################################################################
# Check for Hasl
#######################################################################
hasl
=
dependency
(
'hasl'
,
version
:
'>= 0.2.0'
)
#######################################################################
# Documentation
#######################################################################
if
get_option
(
'doc'
)
and
not
get_option
(
'introspection'
)
error
(
'Documentation requires GObject Introspection.'
)
endif
dependency
(
'gi-docgen'
,
version
:
'>= 2021.1'
,
fallback
:
[
'gi-docgen'
,
'dummy_dep'
],
required
:
get_option
(
'doc'
)
)
gidocgen
=
find_program
(
'gi-docgen'
,
required
:
get_option
(
'doc'
))
docs_dir
=
get_option
(
'prefix'
)
/
get_option
(
'datadir'
)
/
'doc'
#######################################################################
# Random Stuff
#######################################################################
if
[
'debug'
,
'debugoptimize'
].
contains
(
get_option
(
'buildtype'
))
enable_debug
=
true
else
enable_debug
=
get_option
(
'console-logging'
)
endif
conf
.
set
(
'DEBUG'
,
enable_debug
)
# So that purpleconfig.h may be found.
toplevel_inc
=
include_directories
(
'.'
)
subdir
(
'libpurple'
)
subdir
(
'purple-history'
)
subdir
(
'finch'
)
subdir
(
'pidgin'
)
subdir
(
'doc'
)
subdir
(
'po'
)
configure_file
(
output
:
'purpleconfig.h'
,
configuration
:
conf
)
config_home
=
get_option
(
'devenv-config-dir'
)
if
config_home
==
''
config_home
=
meson
.
global_build_root
()
/
'config'
endif
devenv
.
set
(
'XDG_CONFIG_HOME'
,
config_home
)
meson
.
add_devenv
(
devenv
)
if
meson
.
backend
()
==
'ninja'
run_target
(
'turtles'
,
command
:
[
'ninja'
,
'-C'
,
'@BUILD_ROOT@'
,
'pidgin3-pot'
,
'all'
,
'test'
])
endif
summary
({
'prefix'
:
get_option
(
'prefix'
),
'bindir'
:
get_option
(
'bindir'
),
'libdir'
:
get_option
(
'libdir'
),
'datadir'
:
get_option
(
'datadir'
),
},
section
:
'Directories'
)
# TODO: Remove `.found()` once https://github.com/mesonbuild/meson/pull/10949
# is merged and in a release that we require.
summary
({
'GTK'
:
get_option
(
'gtkui'
),
'console'
:
enable_consoleui
,
'X11 support'
:
x11
.
found
(),
},
section
:
'User Interfaces'
,
bool_yn
:
true
)
summary
({
'Dynamic protocols'
:
DYNAMIC_PRPLS
,
},
section
:
'Protocol Support'
,
bool_yn
:
true
,
list_sep
:
', '
)
# TODO: Remove `.found()` once https://github.com/mesonbuild/meson/pull/10949
# is merged and in a release that we require.
summary
({
'KWallet credential provider'
:
kwallet
.
found
(),
'libsecret credential provider'
:
libsecret
.
found
(),
'Unity integration'
:
enable_unity
,
},
section
:
'Plugin support'
,
bool_yn
:
true
)
summary
({
'Enable Introspection'
:
enable_introspection
,
'Generate documentation'
:
get_option
(
'doc'
),
'Has you'
:
true
,
'Print debugging messages'
:
enable_debug
,
},
section
:
'Miscellaneous'
,
bool_yn
:
true
)
if
pidgin3path
.
found
()
summary
(
'You have an old copy of pidgin3 at'
,
pidgin3path
.
full_path
(),
section
:
'Warnings'
)
endif