qulogic/pidgin

merging with default to fix conflicts

2017-11-23, Gary Kramlich
47a8f1e4c414
merging with default to fix conflicts
  • +9 -135
    .hgignore
  • +2 -0
    COPYRIGHT
  • +19 -1
    ChangeLog
  • +5 -0
    ChangeLog.API
  • +0 -2
    HACKING
  • +0 -220
    INSTALL
  • +0 -142
    Makefile.am
  • +0 -191
    Makefile.mingw
  • +0 -7
    PLUGIN_HOWTO
  • +38 -35
    README
  • +0 -34
    README.hg
  • +0 -6
    README.mingw
  • +0 -527
    acinclude.m4
  • +0 -214
    autogen.sh
  • +4 -4
    bitbucket-pipelines.yml
  • +0 -404
    config.h.mingw
  • +0 -2104
    configure.ac
  • +0 -20
    doc/Makefile.am
  • +0 -9
    doc/reference/Makefile.am
  • +0 -137
    doc/reference/finch/Makefile.am
  • +0 -179
    doc/reference/libpurple/Makefile.am
  • +0 -151
    doc/reference/pidgin/Makefile.am
  • +0 -2
    doc/reference/protocols/Makefile.am
  • +0 -123
    doc/reference/protocols/facebook/Makefile.am
  • +0 -184
    finch/Makefile.am
  • +0 -14
    finch/finch.pc.in
  • +5 -0
    finch/gntblist.c
  • +9 -4
    finch/gntnotify.c
  • +0 -134
    finch/libgnt/Makefile.am
  • +0 -48
    finch/libgnt/autogen.sh
  • +0 -297
    finch/libgnt/configure.ac
  • +0 -14
    finch/libgnt/gnt.pc.in
  • +25 -9
    finch/libgnt/gntmain.c
  • +15 -15
    finch/libgnt/gntwm.c
  • +9 -5
    finch/libgnt/meson.build
  • +0 -16
    finch/libgnt/test/Makefile
  • +13 -0
    finch/libgnt/test/meson.build
  • +0 -41
    finch/libgnt/wms/Makefile.am
  • +8 -5
    finch/meson.build
  • +0 -63
    finch/plugins/Makefile.am
  • +6 -2
    finch/plugins/gnthistory.c
  • +0 -135
    glib-tap.mk
  • +0 -506
    libpurple/Makefile.am
  • +0 -224
    libpurple/Makefile.mingw
  • +2 -2
    libpurple/account.c
  • +1 -1
    libpurple/account.h
  • +9 -8
    libpurple/accountopt.h
  • +3 -4
    libpurple/accounts.h
  • +4 -6
    libpurple/blistnode.h
  • +1 -0
    libpurple/buddyicon.c
  • +4 -6
    libpurple/buddylist.h
  • +6 -6
    libpurple/circularbuffer.h
  • +4 -10
    libpurple/cmds.h
  • +9 -6
    libpurple/connection.h
  • +3 -3
    libpurple/conversations.h
  • +0 -22
    libpurple/data/purple-3-uninstalled.pc.in
  • +0 -16
    libpurple/data/purple-3.pc.in
  • +2 -4
    libpurple/e2ee.h
  • +1 -1
    libpurple/eventloop.h
  • +0 -24
    libpurple/example/Makefile.am
  • +2 -2
    libpurple/group.h
  • +1 -1
    libpurple/http.c
  • +3 -3
    libpurple/http.h
  • +3 -3
    libpurple/image.h
  • +1 -1
    libpurple/keyring.h
  • +7 -6
    libpurple/log.h
  • +1 -13
    libpurple/media.c
  • +12 -6
    libpurple/media.h
  • +15 -12
    libpurple/media/backend-fs2.c
  • +1 -1
    libpurple/media/backend-iface.h
  • +5 -3
    libpurple/media/candidate.h
  • +7 -7
    libpurple/media/codec.h
  • +9 -5
    libpurple/meson.build
  • +6 -5
    libpurple/mime.h
  • +1 -1
    libpurple/network.h
  • +1 -1
    libpurple/notify.h
  • +1 -1
    libpurple/pluginpref.h
  • +1 -1
    libpurple/plugins.h
  • +0 -137
    libpurple/plugins/Makefile.am
  • +0 -73
    libpurple/plugins/Makefile.mingw
  • +0 -99
    libpurple/plugins/keyrings/Makefile.am
  • +0 -82
    libpurple/plugins/keyrings/Makefile.mingw
  • +3 -4
    libpurple/pounce.h
  • +20 -18
    libpurple/prefs.h
  • +1 -1
    libpurple/presence.h
  • +128 -116
    libpurple/protocol.h
  • +4 -4
    libpurple/protocols.h
  • +0 -5
    libpurple/protocols/Makefile.am
  • +0 -29
    libpurple/protocols/Makefile.mingw
  • +0 -64
    libpurple/protocols/bonjour/Makefile.am
  • +0 -92
    libpurple/protocols/bonjour/Makefile.mingw
  • +0 -52
    libpurple/protocols/facebook/Makefile.am
  • +0 -94
    libpurple/protocols/facebook/Makefile.mingw
  • +0 -88
    libpurple/protocols/gg/Makefile.am
  • +0 -115
    libpurple/protocols/gg/Makefile.mingw
  • +1 -1
    libpurple/protocols/gg/blist.c
  • +0 -39
    libpurple/protocols/irc/Makefile.am
  • +0 -93
    libpurple/protocols/irc/Makefile.mingw
  • +0 -135
    libpurple/protocols/jabber/Makefile.am
  • +0 -142
    libpurple/protocols/jabber/Makefile.mingw
  • +12 -9
    libpurple/protocols/jabber/jingle/rtp.c
  • +0 -10
    libpurple/protocols/jabber/tests/.hgignore
  • +0 -36
    libpurple/protocols/jabber/tests/Makefile.am
  • +0 -55
    libpurple/protocols/novell/Makefile.am
  • +0 -89
    libpurple/protocols/novell/Makefile.mingw
  • +0 -26
    libpurple/protocols/null/Makefile.am
  • +0 -80
    libpurple/protocols/null/Makefile.mingw
  • +0 -83
    libpurple/protocols/oscar/Makefile.am
  • +0 -116
    libpurple/protocols/oscar/Makefile.mingw
  • +0 -7
    libpurple/protocols/oscar/tests/.hgignore
  • +0 -22
    libpurple/protocols/oscar/tests/Makefile.am
  • +0 -38
    libpurple/protocols/sametime/Makefile.am
  • +0 -84
    libpurple/protocols/sametime/Makefile.mingw
  • +0 -47
    libpurple/protocols/silc/Makefile.am
  • +0 -91
    libpurple/protocols/silc/Makefile.mingw
  • +0 -41
    libpurple/protocols/simple/Makefile.am
  • +0 -79
    libpurple/protocols/simple/Makefile.mingw
  • +0 -110
    libpurple/protocols/zephyr/Makefile.am
  • +0 -150
    libpurple/protocols/zephyr/Makefile.mingw
  • +2 -2
    libpurple/request-datasheet.h
  • +18 -18
    libpurple/request.h
  • +4 -4
    libpurple/roomlist.h
  • +3 -5
    libpurple/savedstatuses.h
  • +2 -4
    libpurple/smiley-list.h
  • +1 -2
    libpurple/smiley-parser.h
  • +7 -6
    libpurple/sslconn.h
  • +3 -2
    libpurple/status.h
  • +1 -1
    libpurple/stun.h
  • +0 -56
    libpurple/tag.sh
  • +2 -2
    libpurple/tests.h
  • +0 -16
    libpurple/tests/.hgignore
  • +0 -49
    libpurple/tests/Makefile.am
  • +27 -0
    libpurple/tests/test_util.c
  • +2 -2
    libpurple/theme-loader.h
  • +1 -1
    libpurple/theme-manager.h
  • +12 -1
    libpurple/util.c
  • +21 -10
    libpurple/util.h
  • +0 -154
    libpurple/win32/global.mak
  • +1 -0
    libpurple/win32/libc_interface.c
  • +0 -17
    libpurple/win32/rules.mak
  • +0 -55
    libpurple/win32/targets.mak
  • +0 -6
    m4macros/Makefile.am
  • +0 -49
    m4macros/as-ac-expand.m4
  • +0 -28
    m4macros/glibtests.m4
  • +0 -96
    m4macros/introspection.m4
  • +0 -102
    m4macros/purple.m4
  • +6 -13
    meson.build
  • +4 -1
    mkmesonconf.py
  • +0 -310
    pidgin/Makefile.am
  • +0 -198
    pidgin/Makefile.mingw
  • +22 -0
    pidgin/about.html
  • +20 -0
    pidgin/about.md
  • +279 -0
    pidgin/about.ui
  • +736 -0
    pidgin/credits.json
  • +0 -21
    pidgin/data/pidgin-3-uninstalled.pc.in
  • +0 -16
    pidgin/data/pidgin-3.pc.in
  • +12 -0
    pidgin/gtk3compat.h
  • +1 -1
    pidgin/gtkaccount.c
  • +50 -43
    pidgin/gtkblist.c
  • +6 -4
    pidgin/gtkblist.h
  • +2 -2
    pidgin/gtkconv-theme.h
  • +81 -30
    pidgin/gtkconv.c
  • +7 -7
    pidgin/gtkconv.h
  • +15 -2
    pidgin/gtkconvwin.h
  • +4 -4
    pidgin/gtkdebug.c
  • +0 -637
    pidgin/gtkdialogs.c
  • +8 -12
    pidgin/gtkdialogs.h
  • +1 -5
    pidgin/gtkdocklet.c
  • +1 -1
    pidgin/gtkdocklet.h
  • +47 -53
    pidgin/gtklog.c
  • +1 -1
    pidgin/gtkmenutray.h
  • +1 -7
    pidgin/gtknotify.c
  • +0 -2
    pidgin/gtknotify.h
  • +1 -1
    pidgin/gtkplugin.h
  • +1 -1
    pidgin/gtkpluginpref.h
  • +1 -1
    pidgin/gtkpounce.c
  • +16 -10
    pidgin/gtkprefs.h
  • +1 -1
    pidgin/gtkrequest.h
  • +2 -2
    pidgin/gtkroomlist.c
  • +2 -2
    pidgin/gtksavedstatuses.h
  • +1 -1
    pidgin/gtksmiley-theme.h
  • +4 -5
    pidgin/gtkstatusbox.c
  • +1 -1
    pidgin/gtkstatusbox.h
  • +70 -0
    pidgin/gtkstyle.c
  • +59 -0
    pidgin/gtkstyle.h
  • +32 -2
    pidgin/gtkutils.c
  • +86 -68
    pidgin/gtkutils.h
  • +5 -6
    pidgin/gtkwebview.c
  • +9 -9
    pidgin/gtkwebview.h
  • +18 -4
    pidgin/gtkwebviewtoolbar.c
  • +2 -2
    pidgin/gtkwebviewtoolbar.h
  • +2 -2
    pidgin/gtkwhiteboard.c
  • +0 -0
    pidgin/logo.png
  • +31 -10
    pidgin/meson.build
  • +7 -2
    pidgin/minidialog.h
  • +9 -1
    pidgin/pidgin.gresource.xml
  • +488 -0
    pidgin/pidginabout.c
  • +25 -0
    pidgin/pidginabout.h
  • +10 -10
    pidgin/pidgintooltip.h
  • +0 -604
    pidgin/pixmaps/Makefile.am
  • +0 -51
    pidgin/pixmaps/Makefile.mingw
  • +0 -203
    pidgin/pixmaps/emotes/default/24/Makefile.am
  • +0 -27
    pidgin/pixmaps/emotes/default/24/Makefile.mingw
  • +0 -103
    pidgin/pixmaps/emotes/small/16/Makefile.am
  • +0 -27
    pidgin/pixmaps/emotes/small/16/Makefile.mingw
  • +0 -149
    pidgin/plugins/Makefile.am
  • +0 -110
    pidgin/plugins/Makefile.mingw
  • +0 -29
    pidgin/plugins/cap/Makefile.am
  • +0 -82
    pidgin/plugins/cap/Makefile.mingw
  • +0 -28
    pidgin/plugins/disco/Makefile.am
  • +0 -80
    pidgin/plugins/disco/Makefile.mingw
  • +2 -3
    pidgin/plugins/disco/gtkdisco.c
  • +0 -26
    pidgin/plugins/gestures/Makefile.am
  • +0 -29
    pidgin/plugins/gevolution/Makefile.am
  • +0 -44
    pidgin/plugins/musicmessaging/Makefile.am
  • +0 -27
    pidgin/plugins/ticker/Makefile.am
  • +0 -78
    pidgin/plugins/ticker/Makefile.mingw
  • +0 -17
    pidgin/plugins/win32/transparency/Makefile.am
  • +0 -76
    pidgin/plugins/win32/transparency/Makefile.mingw
  • +0 -20
    pidgin/plugins/win32/winprefs/Makefile.am
  • +0 -82
    pidgin/plugins/win32/winprefs/Makefile.mingw
  • +0 -22
    pidgin/themes/Makefile.am
  • +3 -3
    pidgin/win32/gtkdocklet-win32.c
  • +0 -55
    po/Makefile.mingw
  • +3 -0
    po/POTFILES.in
  • +0 -23
    share/ca-certs/Makefile.am
  • +0 -27
    share/ca-certs/Makefile.mingw
  • +0 -12
    share/sounds/Makefile.am
  • +0 -20
    share/sounds/Makefile.mingw
  • +0 -652
    tap-driver.sh
  • +0 -5
    tap-test
  • --- a/.hgignore Thu Oct 05 21:24:11 2017 -0500
    +++ b/.hgignore Thu Nov 23 22:30:26 2017 -0600
    @@ -1,148 +1,22 @@
    syntax: glob
    .*.swp
    -clang_output_*
    pidgin-*
    -.dirstamp
    .DS_Store
    +*.asc
    +*.bak
    +*.bs
    +*.def
    +*.orig
    +*.pyc
    +*.rej
    +*~
    +
    syntax: regexp
    -(.*/)?TAGS$
    -(.*/)?\.svn
    -.*.swp
    -.*/?.*\.pc$
    -.*/?Makefile(\.in)?$
    -.*/?Makefile\.am\.mingw$
    -.*~$
    -.*\.a$
    -.*\.asc$
    -.*\.bak$
    -.*\.bs$
    -.*\.def$
    -\.deps
    -.*\.dll$
    -.*\.exe$
    -.*\.g?mo$
    -.*\.gir$
    -.*\.la$
    -\.libs
    -.*\.lo$
    -.*\.loT$
    -.*\.o$
    -.*\.orig$
    -.*\.pyc$
    -.*\.pyo$
    -.*\.rej$
    -.*\.so$
    -.*\.typelib$
    -.*\.moc$
    -VERSION$
    -aclocal.m4
    -autogen.args
    -autom4te.*\.cache
    ^build(.+)?\/
    -compile
    -config.cache
    -config.guess
    -config.h$
    -config.h.in
    -config.log
    -config.status
    -config.sub
    -configure$
    -depcomp
    -doc/finch.1$
    -doc/html
    -doc/pidgin.1$
    -doc/reference/.*/.*\.args
    -doc/reference/.*/.*\.hierarchy
    -doc/reference/.*/.*\.interfaces
    -doc/reference/.*/.*\.prerequisites
    -doc/reference/.*/.*\.signals
    -doc/reference/.*/.*\.stamp
    -doc/reference/.*/.*\.txt
    -doc/reference/.*/.*\.types
    -doc/reference/.*/html/.*
    -doc/reference/.*/xml/.*
    -doc/reference/.*/version.xml
    -finch/finch$
    -gtk-doc.make
    -install-sh
    -intltool-.*
    -libpurple/dbus-bindings.c
    -libpurple/dbus-signals.c
    -libpurple/dbus-types.[ch]
    -libpurple/enums.[ch]
    -libpurple/example/nullclient
    -libpurple/data/purple-url-handler.desktop$
    -libpurple/data/purple-url-handler.desktop.in$
    -libpurple/plugins/dbus-example-bindings.c
    -libpurple/purple-client-bindings.ch
    -libpurple/purple-client-bindings.h
    -libpurple/purple-client-example
    -libpurple/purple.h$
    -libpurple/tests/core
    -libpurple/tests/check_libpurple
    -libpurple/tests/libpurple..
    -^libpurple/tests/test-suite\.log$
    -libpurple/version.h$
    -libpurple/win32/libpurplerc.rc$
    -libtool
    -local.mak
    -ltmain.sh
    -m4macros/gtk-doc.m4
    -m4macros/intltool.m4
    -m4macros/ltoptions.m4
    -m4macros/ltsugar.m4
    -m4macros/ltversion.m4
    -m4macros/lt~obsolete.m4
    -missing
    -mkinstalldirs
    -package_revision.h
    -package_revision_raw.txt
    -pidgin-*.*.*-dbgsym$
    -pidgin-*.*.*-dbgsym.zip$
    -pidgin-*.*.*-win32-bin.zip$
    -pidgin-*.*.*-win32bin$
    -pidgin-.*.tar.bz2
    -pidgin-.*.tar.gz
    -pidgin-[0-9a-z.-]+/
    -pidgin.apspec$
    -pidgin/.*\.gresource\.[ch]$
    -pidgin/pidgin$
    -pidgin/data/im.pidgin.Pidgin.appdata.xml$
    -pidgin/data/im.pidgin.Pidgin.desktop$
    -pidgin/data/im.pidgin.Pidgin.desktop.in$
    -pidgin/pixmaps/emotes/default/24/theme
    -pidgin/pixmaps/emotes/none/theme
    -pidgin/pixmaps/emotes/small/16/theme
    -pidgin/plugins/musicmessaging/music-messaging-bindings.c
    -pidgin/win32/nsis/gtk-runtime-*.*.*.*.zip
    -pidgin/win32/nsis/gtk_runtime_stage$
    -pidgin/win32/nsis/cacert.pem
    -pidgin/win32/nsis/langmacros.nsh
    -pidgin/win32/nsis/nsis_translations.desktop
    -pidgin/win32/nsis/pidgin-spellcheck-preselect.nsh
    -pidgin/win32/nsis/pidgin-spellcheck.nsh
    -pidgin/win32/nsis/pidgin-translations.nsh$
    -pidgin/win32/nsis/translations
    -pidgin/win32/nsis/wget.log
    -pidgin/win32/pidgin_dll_rc.rc$
    -pidgin/win32/pidgin_exe_rc.rc$
    -finch/finch_winres.rc$
    -finch/libfinch_winres.rc$
    -finch/libgnt/libgnt_winres.rc$
    po/Makefile.in.in
    po/POTFILES$
    po/missing
    po/notexist
    po/pidgin.pot
    po/stamp-it
    -stamp-h1
    -test-driver
    win32-install-dir(\.release)?
    -share/ca-certs/cacert.pem
    -share/ca-certs/certdata.txt
    -
    -subinclude:libpurple/protocols/jabber/tests/.hgignore
    -subinclude:libpurple/protocols/oscar/tests/.hgignore
    -subinclude:libpurple/protocols/yahoo/tests/.hgignore
    -subinclude:libpurple/tests/.hgignore
    --- a/COPYRIGHT Thu Oct 05 21:24:11 2017 -0500
    +++ b/COPYRIGHT Thu Nov 23 22:30:26 2017 -0600
    @@ -292,6 +292,7 @@
    F.W. Kong
    Konstantin Korikov
    Cole Kowalski
    +Daniel Kamil Kozar
    Nikita Kozlov
    Matt Kramer
    Gary Kramlich
    @@ -628,6 +629,7 @@
    Kevin Wu Won
    Pui Lam Wong
    Justin Wood
    +David Woodhouse
    Ximian
    Ma Xuan
    Yonas Yanfa
    --- a/ChangeLog Thu Oct 05 21:24:11 2017 -0500
    +++ b/ChangeLog Thu Nov 23 22:30:26 2017 -0600
    @@ -104,12 +104,22 @@
    * A single jabber plugin provides XMPP, GTalk and Facebook protocols.
    * A single yahoo plugin provides both Yahoo and Yahoo JAPAN protocols.
    -version 2.12.1 (??/??/????):
    +version 2.13.0 (??/??/????):
    libpurple:
    * Unified string comparison. (PR #186) (Arkadiy Illarionov)
    + * Properlly shell escape URI's when opening them. (PR #271 Daniel Kamil Kozar)
    +
    + libgnt:
    + * Fixed build against curses 6.0 with opaque structs set. (#16764 dimstar)
    + (PR #268 Daniel Kamil Kozar)
    + * Fixed a crash when resizing the window. (#16680 marcus) (PR #269 Daniel Kamil Kozar)
    +
    + General:
    + * Fixed bashism in autotools. (#16836 lameventanas) (PR #267 Daniel Kamil Kozar)
    XMPP:
    * Show XEP-0066 OOB URLs in any message, not just headlines
    + * Fix a user after free (#17200 debarshiray) (PR #266 Ethan Blanton)
    IRC:
    * Fix "Registration timeout" on SASL auth with InspIRCd servers
    @@ -117,6 +127,14 @@
    * Fix issues with plugins that modify outgoing messages
    (such as the custom PART/QUIT feature of the IRC More plugin)
    + Pidgin:
    + * Better support for dark themes. (#12572 Alyssa Rosenzweig and Gary Kramlich)
    + * Fixed IPv6 links by not escaping []'s. (#16391 cyisfor) (PR #270 Daniel Kamil Kozar)
    + * Only write buddy icons to the cache if they're not already cached. (PR #276 David Woodhouse)
    +
    + Finch:
    + * Fix handling of search results (#17238 David Woodhouse)
    +
    version 2.12.0 (03/09/2017):
    libpurple:
    * Fix an out of bounds memory write in purple_markup_unescape_entity.
    --- a/ChangeLog.API Thu Oct 05 21:24:11 2017 -0500
    +++ b/ChangeLog.API Thu Nov 23 22:30:26 2017 -0600
    @@ -611,6 +611,11 @@
    * _GntTreeColumnFlag
    * _GntWidgetFlags
    +version 2.13.0:
    + libpurple:
    + Added:
    + * purple_uri_escape_for_open
    +
    version 2.12.0:
    libpurple:
    Added:
    --- a/HACKING Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,2 +0,0 @@
    -For information on hacking on Pidgin, Finch, or libpurple, see:
    - https://developer.pidgin.im
    --- a/INSTALL Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,220 +0,0 @@
    -Basic Installation
    -==================
    -
    - These are generic installation instructions.
    -
    - The `configure' shell script attempts to guess correct values for
    -various system-dependent variables used during compilation. It uses
    -those values to create a `Makefile' in each directory of the package.
    -It may also create one or more `.h' files containing system-dependent
    -definitions. Finally, it creates a shell script `config.status' that
    -you can run in the future to recreate the current configuration, a file
    -`config.cache' that saves the results of its tests to speed up
    -reconfiguring, and a file `config.log' containing compiler output
    -(useful mainly for debugging `configure').
    -
    - If you need to do unusual things to compile the package, please try
    -to figure out how `configure' could check whether to do them, and mail
    -diffs or instructions to the address given in the `README' so they can
    -be considered for the next release. If at some point `config.cache'
    -contains results you don't want to keep, you may remove or edit it.
    -
    - The file `configure.ac' is used to create `configure' by a program
    -called `autoconf'. You only need `configure.ac' if you want to change
    -it or regenerate `configure' using a newer version of `autoconf'.
    -
    -The simplest way to compile this package is:
    -
    - 1. `cd' to the directory containing the package's source code and type
    - `./configure' to configure the package for your system. If you're
    - using `csh' on an old version of System V, you might need to type
    - `sh ./configure' instead to prevent `csh' from trying to execute
    - `configure' itself.
    -
    - Running `configure' takes awhile. While running, it prints some
    - messages telling which features it is checking for. If it finishes
    - successfully, it will print out of a summary of the build options.
    - This summary will also appear in the help->about dialog.
    -
    - 2. Type `make' to compile the package. On some systems, you may need
    - to use `gmake' instead.
    -
    - 3. Optionally, type `make check' to run any self-tests that come with
    - the package.
    -
    - 4. Type `make install' to install the programs and any data files and
    - documentation. You must have write access to the prefix you are
    - installing to. See below for more details on the prefix.
    -
    - 5. You can remove the program binaries and object files from the
    - source code directory by typing `make clean'. To also remove the
    - files that `configure' created (so you can compile the package for
    - a different kind of computer), type `make distclean'. There is
    - also a `make maintainer-clean' target, but that is intended mainly
    - for the package's developers. If you use it, you may have to get
    - all sorts of other programs in order to regenerate files that came
    - with the distribution.
    -
    - 6. If you have *not* run make distclean, you can use the target
    - `make uninstall` to remove the files installed by `make install`.
    -
    -Compilers and Options
    -=====================
    -
    - Some systems require unusual options for compilation or linking that
    -the `configure' script does not know about. You can give `configure'
    -initial values for variables by setting them in the environment. Using
    -a Bourne-compatible shell, you can do that on the command line like
    -this:
    - CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
    -
    -Or on systems that have the `env' program, you can do it like this:
    - env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
    -
    -Compiling For Multiple Architectures
    -====================================
    -
    - You can compile the package for more than one kind of computer at the
    -same time, by placing the object files for each architecture in their
    -own directory. To do this, you must use a version of `make' that
    -supports the `VPATH' variable, such as GNU `make'. `cd' to the
    -directory where you want the object files and executables to go and run
    -the `configure' script. `configure' automatically checks for the
    -source code in the directory that `configure' is in and in `..'.
    -
    - If you have to use a `make' that does not supports the `VPATH'
    -variable, you have to compile the package for one architecture at a time
    -in the source code directory. After you have installed the package for
    -one architecture, use `make distclean' before reconfiguring for another
    -architecture.
    -
    -Installation Names
    -==================
    -
    - By default, `make install' will install the package's files in
    -`/usr/local/bin', `/usr/local/man', etc. You can specify an
    -installation prefix other than `/usr/local' by giving `configure' the
    -option `--prefix=PATH'.
    -
    - You can specify separate installation prefixes for
    -architecture-specific files and architecture-independent files. If you
    -give `configure' the option `--exec-prefix=PATH', the package will use
    -PATH as the prefix for installing programs and libraries.
    -Documentation and other data files will still use the regular prefix.
    -
    - In addition, if you use an unusual directory layout you can give
    -options like `--bindir=PATH' to specify different values for particular
    -kinds of files. Run `configure --help' for a list of the directories
    -you can set and what kinds of files go in them.
    -
    - If the package supports it, you can cause programs to be installed
    -with an extra prefix or suffix on their names by giving `configure' the
    -option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
    -
    -Optional Features
    -=================
    -
    - Some packages pay attention to `--enable-FEATURE' options to
    -`configure', where FEATURE indicates an optional part of the package.
    -They may also pay attention to `--with-PACKAGE' options, where PACKAGE
    -is something like `gnu-as' or `x' (for the X Window System). The
    -`README' should mention any `--enable-' and `--with-' options that the
    -package recognizes.
    -
    - For packages that use the X Window System, `configure' can usually
    -find the X include and library files automatically, but if it doesn't,
    -you can use the `configure' options `--x-includes=DIR' and
    -`--x-libraries=DIR' to specify their locations.
    -
    - By default both the GTK+ UI (Pidgin) and the ncurses UI (Finch) will be
    -built, assuming that configure finds the necessary libraries and headers for
    -each. You can disable the GTK+ UI with `--disable-gtkui' and the ncurses UI
    -with `--disable-consoleui'.
    -
    - `--disable-screensaver' will build libpurple without support for detecting
    -when it should mark accounts idle based on mouse or keyboard usage.
    -
    - `--disable-sm' will build without support for the X session management.
    -Doing so will remove the ability to have pidgin start up with your window
    -manager.
    -
    - `--disable-gevolution' will cause the evolution integration plugin not to
    -compile.
    -
    - `--disable-gstreamer' will build without sound support. This applies to
    -*both* Pidgin and Finch.
    -
    - `--enable-gnutls=yes,no' will enable or disable the use of gnutls for ssl support. Disabling both gnutls and nss will mean you cannot use either MSN or Google Talk. There is no static option for gnutls at this time.
    -
    - `--enable-nss=yes,no,static' will enable or disable the use of nss for ssl support. This is the only option for ssl support if you are attempting to compile a static version of Pidgin or Finch.
    -
    -Optional Packages:
    -
    -
    - `--with-static-prpls' takes a list of comma separated protocols to build in statically (rather than as plugins). Use this with care.
    -
    - `--with-dynamic-prpls' takes a list of comma separated protocols also. If used only those listed will be built. If no protocols are listed with either `--with-static-prpls' or with `--with-dynamic-prpls' then Pidgin and Finch will be effectively useless.
    -
    - If configure does not find python, it will build without DBUS support. This will disable scripts such as purple-remote and purple-uri-handler, effectively disabling integration with the browser. You can tell configure where your python binary is located with `--with-python=PATH'
    -
    -Specifying the System Type
    -==========================
    -
    - There may be some features `configure' can not figure out
    -automatically, but needs to determine by the type of host the package
    -will run on. Usually `configure' can figure that out, but if it prints
    -a message saying it can not guess the host type, give it the
    -`--host=TYPE' option. TYPE can either be a short name for the system
    -type, such as `sun4', or a canonical name with three fields:
    - CPU-COMPANY-SYSTEM
    -
    -See the file `config.sub' for the possible values of each field. If
    -`config.sub' isn't included in this package, then this package doesn't
    -need to know the host type.
    -
    - If you are building compiler tools for cross-compiling, you can also
    -use the `--target=TYPE' option to select the type of system they will
    -produce code for and the `--build=TYPE' option to select the type of
    -system on which you are compiling the package.
    -
    -Sharing Defaults
    -================
    -
    - If you want to set default values for `configure' scripts to share,
    -you can create a site shell script called `config.site' that gives
    -default values for variables like `CC', `cache_file', and `prefix'.
    -`configure' looks for `PREFIX/share/config.site' if it exists, then
    -`PREFIX/etc/config.site' if it exists. Or, you can set the
    -`CONFIG_SITE' environment variable to the location of the site script.
    -A warning: not all `configure' scripts look for a site script.
    -
    -Operation Controls
    -==================
    -
    - `configure' recognizes the following options to control how it
    -operates.
    -
    -`--cache-file=FILE'
    - Use and save the results of the tests in FILE instead of
    - `./config.cache'. Set FILE to `/dev/null' to disable caching, for
    - debugging `configure'.
    -
    -`--help'
    - Print a summary of the options to `configure', and exit.
    -
    -`--quiet'
    -`--silent'
    -`-q'
    - Do not print messages saying which checks are being made. To
    - suppress all normal output, redirect it to `/dev/null' (any error
    - messages will still be shown).
    -
    -`--srcdir=DIR'
    - Look for the package's source code in directory DIR. Usually
    - `configure' can determine that directory automatically.
    -
    -`--version'
    - Print the version of Autoconf used to generate the `configure'
    - script, and exit.
    -
    -`configure' also accepts some other, not widely useful, options. Many of these are related to having various optional libaries installed to locations outside of your path.
    --- a/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,142 +0,0 @@
    -EXTRA_DIST = \
    - COPYRIGHT \
    - ChangeLog.API \
    - ChangeLog.win32 \
    - HACKING \
    - Makefile.mingw \
    - PLUGIN_HOWTO \
    - README.hg \
    - README.mingw \
    - config.h.mingw \
    - intltool-extract.in \
    - intltool-merge.in \
    - intltool-update.in \
    - m4macros/introspection.m4 \
    - package_revision.h \
    - po/Makefile.mingw \
    - tap-driver.sh \
    - tap-test \
    - valgrind-suppressions
    -
    -noinst_HEADERS = config.h package_revision.h
    -
    -dist-pre-hook: package_revision.h
    -if !ENABLE_GTK_DOC
    - $(AM_V_at)echo "error: gtk-doc must be installed and enabled in order to make dist"
    - $(AM_V_at)echo "re-run ./configure with --enable-gtk-doc switch and try again"
    - $(AM_V_at)false
    -endif
    - $(AM_V_at)if [ ! -f "$(top_builddir)libpurple/libpurple.la" ]; then \
    - $(MAKE) -C libpurple libpurple.la; \
    - fi
    - $(AM_V_at)if [ ! -f "$(top_builddir)libpurple/protocols/facebook/libfacebook.la" ]; then \
    - $(MAKE) -C libpurple/protocols/facebook libfacebook.la; \
    - fi
    -if ENABLE_GNT
    - $(AM_V_at)if [ ! -f "$(top_builddir)finch/libgnt/libgnt.la" ]; then \
    - $(MAKE) -C finch/libgnt libgnt.la; \
    - fi
    - $(AM_V_at)if [ ! -f "$(top_builddir)finch/libfinch.la" ]; then \
    - $(MAKE) -C finch libfinch.la; \
    - fi
    -endif
    -if ENABLE_GTK
    - $(AM_V_at)if [ ! -f "$(top_builddir)pidgin/libpidgin.la" ]; then \
    - $(MAKE) -C pidgin libpidgin.la; \
    - fi
    -endif
    -
    -dist: dist-pre-hook
    -
    -dist-hook:
    - rm $(distdir)/config.h
    -
    -commit-check:
    - (cd po ; intltool-update -m 2>&1 | grep -v '^mismatched quotes.*\.py$$' | sed "s|current directory|po directory|" | grep . ; if [ $$? = 0 ] ; then exit 1 ; else exit 0 ; fi)
    -
    -# Ensure these files are sorted and contain no duplicates:
    - LC_ALL=C sort -c -t/ -u po/POTFILES.in
    - LC_ALL=C sort -c -t/ -u po/POTFILES.skip
    -
    -# Ensure COPYRIGHT is 100% UTF-8
    - iconv -f utf8 -t utf8 COPYRIGHT | cmp COPYRIGHT -
    -
    -version-check:
    -# Ensure our version string does not contain "dev"
    - test x`echo $(PACKAGE_VERSION) | grep dev` = x
    -
    -# Ensure ChangeLogs have the correct version
    - head ChangeLog | grep "^version $(PACKAGE_VERSION) (.*):$$" >/dev/null
    - head ChangeLog.API | grep "^version $(PACKAGE_VERSION):$$" >/dev/null
    -
    -# Ensure we're working from a tag...
    - test x`hg log -r "tag($(PACKAGE_VERSION))" --template "{node}"` = x`hg log -r . -T '{node}'`
    -# ... and have no changes in the working copy.
    - test "x`hg st -mard`" = x
    -
    -sign-packages: dist
    - gpg -ab pidgin-$(PACKAGE_VERSION).tar.gz
    - gpg -ab pidgin-$(PACKAGE_VERSION).tar.bz2
    - gpg --verify pidgin-$(PACKAGE_VERSION).tar.gz.asc pidgin-$(PACKAGE_VERSION).tar.gz
    - gpg --verify pidgin-$(PACKAGE_VERSION).tar.bz2.asc pidgin-$(PACKAGE_VERSION).tar.bz2
    -
    -release: commit-check version-check distcheck sign-packages
    -
    -if INSTALL_I18N
    -PO_DIR=po
    -endif
    -
    -if ENABLE_GTK
    -GTK_DIR=pidgin
    -endif
    -
    -if ENABLE_GNT
    -GNT_DIR=finch
    -endif
    -
    -# We always try to rebuild all objects that depends on this dummy target.
    -.FORCE:
    -
    -# if both attempts fail, then we need to remove the empty file that >
    -# creates, and also make sure that the shell command exits
    -# successfully; the rm -f ensures both
    -package_revision_raw.txt: .FORCE
    - $(AM_V_GEN)REAL_BLDDIR=$$PWD/$(top_builddir); \
    - (hg --cwd $(srcdir) log -r . -T {node}) 2>/dev/null >$@.new \
    - || rm -f $@.new
    - $(AM_V_at)if test -f $@.new; then \
    - if ! test -f "$@" || ! diff "$@" "$@".new > /dev/null ; then \
    - mv $@.new $@; \
    - else \
    - rm $@.new; \
    - fi \
    - fi
    -package_revision.h: package_revision_raw.txt
    - $(AM_V_GEN)if test -f $<; then \
    - echo "#define REVISION \"`cat $<`\"" > $@; \
    - fi
    - $(AM_V_at)if test ! -f $@ -a -f $(srcdir)/$@; then \
    - cp $(srcdir)/$@ $@; \
    - fi
    - $(AM_V_at)test -f $@ || echo "#define REVISION \"unknown\"" > $@
    -
    -# This is a magic directive copy-and-pasted, then modified, from the
    -# automake 1.9 manual, section 13.4, "Checking the distribution".
    -# Normally, 'distcheck' does a clean build, and then afterwards runs
    -# 'distclean', and 'distclean' is supposed to remove everything that
    -# the build created. However, we have some targets (package_revision.txt)
    -# that we distribute, but then always attempt to rebuild optimistically, and
    -# then if that fails fall back on the distributed versions. This
    -# means that 'distclean' should _not_ remove those files, since they
    -# are distributed, yet building the package will generate those files,
    -# thus automake thinks that 'distclean' _should_ remove those files,
    -# and 'distcheck' gets cranky if we don't. So basically what this
    -# line does is tell 'distcheck' to shut up and ignore those two files.
    -distcleancheck_listfiles = find . -type f -a ! -name package_revision.h
    -
    -AM_DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc
    -
    -SUBDIRS = . m4macros libpurple $(GNT_DIR) $(GTK_DIR) $(PO_DIR) share/ca-certs share/sounds doc
    -
    -DISTCLEANFILES= intltool-extract intltool-merge intltool-update \
    - package_revision_raw.txt
    --- a/Makefile.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,191 +0,0 @@
    -# Makefile.mingw
    -#
    -# Author: hermanator12002@yahoo.com
    -# Date 9/11/02
    -# Description: Top Makefile for win32 (mingw) port of Pidgin and libpurple
    -#
    -
    -PIDGIN_TREE_TOP := .
    -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
    -
    -# Generate a X.X.X.X version for the installer file versioning header
    -# The last digit will be 99 for a final release, 0 for dev or unknown, or the beta number
    -PIDGIN_PRODUCT_VERSION = $(shell \
    -awk 'BEGIN {FS="."} { \
    - if (int($$3) == $$3) { \
    - $$4 = "99"; \
    - } else { \
    - $$5 = $$3; \
    - sub(int($$3), "", $$5); \
    - if ($$5 == "dev") { \
    - $$4 = "0"; \
    - } else { \
    - if (sub("beta", "", $$5) > 0) { \
    - $$4 = $$5; \
    - } else { \
    - $$4 = "0"; \
    - } \
    - } \
    - } \
    - printf("%s.%s.%s.%s", $$1, $$2, int($$3), $$4); \
    - exit; \
    -}' VERSION)
    -
    -GTK_INSTALL_VERSION = 2.24.18.0
    -
    -ifdef SIGNTOOL
    -authenticode_sign = $(SIGNTOOL) sign \
    - /fd SHA256 \
    - /f "$(SIGNTOOL_PFX)" /p "$(SIGNTOOL_PASSWORD)" \
    - /d $(2) /du "https://pidgin.im" \
    - /tr "http://timestamp.comodoca.com/rfc3161" /td SHA256 \
    - $(1)
    -else
    -authenticode_sign = $(MONO_SIGNCODE) \
    - -spc "$(SIGNCODE_SPC)" -v "$(SIGNCODE_PVK)" \
    - -a sha1 -$$ commercial \
    - -n "$(2)" -i "https://pidgin.im" \
    - -t "http://timestamp.verisign.com/scripts/timstamp.dll" -tr 10 \
    - $(1) && rm -f $(1).bak
    -endif
    -
    -gpg_sign = $(GPG_SIGN) -ab $(1) && $(GPG_SIGN) --verify $(1).asc
    -
    -STRIPPED_RELEASE_DIR = $(PIDGIN_TREE_TOP)/pidgin-$(PIDGIN_VERSION)-win32bin
    -DEBUG_SYMBOLS_DIR = $(PIDGIN_TREE_TOP)/pidgin-$(PIDGIN_VERSION)-dbgsym
    -
    -PIDGIN_INST_DEP_DIR="$(WIN32_DEV_TOP)/pidgin-inst-deps-20130214"
    -
    -# Any *.dll or *.exe files included in win32-install-dir that we don't compile
    -# should be included in this list so they don't get stripped
    -EXTERNAL_DLLS = \
    - exchndl.dll
    -
    -#build an expression for `find` to use to ignore the above files
    -EXTERNAL_DLLS_FIND_EXP = $(patsubst %,-o -name %,$(EXTERNAL_DLLS))
    -
    -include $(PIDGIN_COMMON_RULES)
    -
    -.PHONY: all install installer installer_offline installer_zip debug_symbols_zip installers clean uninstall create_release_install_dir generate_installer_includes $(PIDGIN_REVISION_H) $(PIDGIN_REVISION_RAW_TXT) gtk_runtime_zip
    -
    -all: $(PIDGIN_CONFIG_H) $(PIDGIN_REVISION_H)
    - $(MAKE_at) $(MAKE) -C $(PURPLE_TOP) -f $(MINGW_MAKEFILE)
    - $(MAKE_at) $(MAKE) -C $(PIDGIN_TOP) -f $(MINGW_MAKEFILE)
    -ifndef DISABLE_NLS
    - $(MAKE_at) $(MAKE) -C $(PURPLE_PO_TOP) -f $(MINGW_MAKEFILE)
    -endif
    -
    -install: all $(PIDGIN_INSTALL_DIR)
    - $(MAKE_at) $(MAKE) -C $(PURPLE_TOP) -f $(MINGW_MAKEFILE) install
    - $(MAKE_at) $(MAKE) -C $(PIDGIN_TOP) -f $(MINGW_MAKEFILE) install
    -ifndef DISABLE_NLS
    - $(MAKE_at) $(MAKE) -C $(PURPLE_PO_TOP) -f $(MINGW_MAKEFILE) install
    -endif
    - $(MAKE_at) $(MAKE) -C share/ca-certs -f $(MINGW_MAKEFILE) install
    - $(MAKE_at) $(MAKE) -C share/sounds -f $(MINGW_MAKEFILE) install
    - cp $(PIDGIN_INST_DEP_DIR)/exchndl.dll $(PIDGIN_INSTALL_DIR)
    - chmod -R 777 $(PIDGIN_INSTALL_DIR)
    -
    -gtk_runtime_zip:
    - cd pidgin/win32/nsis/ ; ./generate_gtk_zip.sh "$(GPG_SIGN)"
    -
    -generate_installer_includes: create_release_install_dir gtk_runtime_zip debug_symbols_zip $(PIDGIN_TREE_TOP)/pidgin/win32/nsis/nsis_translations.desktop
    - rm -f pidgin/win32/nsis/pidgin-translations.nsh pidgin/win32/nsis/pidgin-spellcheck.nsh pidgin/win32/nsis/pidgin-spellcheck-preselect.nsh
    - find $(STRIPPED_RELEASE_DIR)/locale -maxdepth 1 -mindepth 1 \
    - -exec basename {} ';' \
    - | LC_ALL=C sort | sed -e s/^/\!insertmacro\ LANG_SECTION\ \"/ -e s/$$/\"/ \
    - > pidgin/win32/nsis/pidgin-translations.nsh
    - #Convert the available.lst lines to "!insertmacro SPELLCHECK_SECTION lang lang_name lang_file"
    - sed -e "/^#/d" -e "s/^[^,]\{1,\},[^,]\{1,\},/\"/" \
    - -e "s/,/\"\ \"/" -e "s/,/\"\ \"/" -e "s/[\ \t]*$$/\"/" \
    - -e "s/^/\!insertmacro\ SPELLCHECK_SECTION\ /" \
    - pidgin/win32/nsis/available.lst \
    - > pidgin/win32/nsis/pidgin-spellcheck.nsh
    - #Convert the lines to "!insertmacro CHECK_SPELLCHECK_SECTION lang"
    - iconv -f latin1 -t utf-8 pidgin/win32/nsis/pidgin-spellcheck.nsh | \
    - sed -e "s/SPELLCHECK_SECTION/CHECK_SPELLCHECK_SECTION/" \
    - -e "s/ \"[^\"]*\"\ \"[^\"]*\"[\t\ ]*$$//" | \
    - iconv -f utf-8 -t latin1 \
    - > pidgin/win32/nsis/pidgin-spellcheck-preselect.nsh
    - #Generate the Installer translations
    - echo "!define GCOMPRIS_NSIS_INCLUDE_PATH \".\"" > $(PIDGIN_TREE_TOP)/pidgin/win32/nsis/langmacros.nsh
    - echo "@INSERT_TRANSLATIONS@" >> $(PIDGIN_TREE_TOP)/pidgin/win32/nsis/langmacros.nsh
    - $(PERL) $(PIDGIN_TREE_TOP)/pidgin/win32/nsis/create_nsis_translations.pl \
    - $(PIDGIN_TREE_TOP)/pidgin/win32/nsis/nsis_translations.desktop \
    - $(PIDGIN_TREE_TOP)/pidgin/win32/nsis/langmacros.nsh \
    - $(PIDGIN_TREE_TOP)/pidgin/win32/nsis/translations
    -
    -create_release_install_dir: install
    - rm -rf $(STRIPPED_RELEASE_DIR)
    - mkdir $(STRIPPED_RELEASE_DIR)
    - tar -cf - $(PIDGIN_INSTALL_DIR) --exclude=Gtk --exclude=spellcheck/share \
    - | tar --strip 2 -xC $(STRIPPED_RELEASE_DIR) -f -
    - find $(STRIPPED_RELEASE_DIR) \( -name '*.dll' -o -name '*.exe' \) \
    - -not \( -false $(EXTERNAL_DLLS_FIND_EXP) \) \
    - -exec $(STRIP) --strip-unneeded {} ';'
    -ifdef SIGN_EXECUTABLES
    - $(call authenticode_sign, $(STRIPPED_RELEASE_DIR)/pidgin.exe, "Pidgin $(PIDGIN_VERSION)")
    -endif
    -
    -installer: generate_installer_includes
    - $(eval $@_DEBUG_SYMBOLS_SHA1SUM := $(shell sha1sum $(DEBUG_SYMBOLS_DIR).zip | sed -e "s/\ .*$$//"))
    - $(eval $@_GTK_SHA1SUM := $(shell sha1sum pidgin/win32/nsis/gtk-runtime-$(GTK_INSTALL_VERSION).zip | sed -e "s/\ .*$$//"))
    - $(MAKENSIS) -V3 -DPIDGIN_VERSION="$(PIDGIN_VERSION)" -DPIDGIN_PRODUCT_VERSION="$(PIDGIN_PRODUCT_VERSION)" \
    - -DPIDGIN_INSTALL_DIR="$(STRIPPED_RELEASE_DIR)" -DGTK_INSTALL_VERSION="$(GTK_INSTALL_VERSION)" \
    - -DDEBUG_SYMBOLS_SHA1SUM="$($@_DEBUG_SYMBOLS_SHA1SUM)" -DGTK_SHA1SUM="$($@_GTK_SHA1SUM)"\
    - pidgin/win32/nsis/pidgin-installer.nsi
    -ifdef SIGN_EXECUTABLES
    - $(call authenticode_sign, pidgin/win32/nsis/pidgin-$(PIDGIN_VERSION).exe, "Pidgin Installer")
    -endif
    - mv pidgin/win32/nsis/pidgin-$(PIDGIN_VERSION).exe ./
    -ifdef SIGN_EXECUTABLES
    - $(call gpg_sign, pidgin-$(PIDGIN_VERSION).exe)
    -endif
    -
    -installer_offline: generate_installer_includes
    - $(MAKENSIS) -V3 -DPIDGIN_VERSION="$(PIDGIN_VERSION)" -DPIDGIN_PRODUCT_VERSION="$(PIDGIN_PRODUCT_VERSION)" \
    - -DPIDGIN_INSTALL_DIR="$(STRIPPED_RELEASE_DIR)" -DGTK_INSTALL_VERSION="$(GTK_INSTALL_VERSION)" \
    - -DOFFLINE_INSTALLER \
    - pidgin/win32/nsis/pidgin-installer.nsi
    -ifdef SIGN_EXECUTABLES
    - $(call authenticode_sign, pidgin/win32/nsis/pidgin-$(PIDGIN_VERSION)-offline.exe, "Pidgin Installer")
    -endif
    - mv pidgin/win32/nsis/pidgin-$(PIDGIN_VERSION)-offline.exe ./
    -ifdef SIGN_EXECUTABLES
    - $(call gpg_sign, pidgin-$(PIDGIN_VERSION)-offline.exe)
    -endif
    -
    -installer_zip: create_release_install_dir
    - rm -f pidgin-$(PIDGIN_VERSION)-win32-bin.zip
    - zip -9 -r pidgin-$(PIDGIN_VERSION)-win32-bin.zip $(STRIPPED_RELEASE_DIR)
    -ifdef SIGN_EXECUTABLES
    - $(call gpg_sign, pidgin-$(PIDGIN_VERSION)-win32-bin.zip)
    -endif
    -
    -debug_symbols_zip: install
    - rm -rf $(DEBUG_SYMBOLS_DIR) $(DEBUG_SYMBOLS_DIR).zip
    - mkdir $(DEBUG_SYMBOLS_DIR)
    - tar -cf - `find $(PIDGIN_INSTALL_DIR) \( -name '*.dll' -o -name '*.exe' \) \
    - -not \( -false $(EXTERNAL_DLLS_FIND_EXP) \) -print` \
    - | tar --strip 2 --xform s/$$/.dbgsym/ -xC $(DEBUG_SYMBOLS_DIR) -f -
    - cp $(MEANWHILE_TOP)/bin/libmeanwhile-1.dll.debug $(DEBUG_SYMBOLS_DIR)/libmeanwhile-1.dll.dbgsym
    - zip -9 -r $(DEBUG_SYMBOLS_DIR).zip $(DEBUG_SYMBOLS_DIR)
    -ifdef SIGN_EXECUTABLES
    - $(call gpg_sign, $(DEBUG_SYMBOLS_DIR).zip)
    -endif
    -
    -installers: installer installer_offline debug_symbols_zip installer_zip
    -
    -clean:
    - $(MAKE_at) $(MAKE) -C $(PURPLE_PO_TOP) -f $(MINGW_MAKEFILE) clean
    - $(MAKE_at) $(MAKE) -C $(PIDGIN_TOP) -f $(MINGW_MAKEFILE) clean
    - $(MAKE_at) $(MAKE) -C $(PURPLE_TOP) -f $(MINGW_MAKEFILE) clean
    - $(MAKE_at) $(MAKE) -C share/ca-certs -f $(MINGW_MAKEFILE) clean
    - rm -f $(PIDGIN_CONFIG_H) $(PIDGIN_REVISION_H) $(PIDGIN_REVISION_RAW_TXT) ./VERSION pidgin-$(PIDGIN_VERSION)*.exe pidgin-$(PIDGIN_VERSION)-win32-bin.zip $(DEBUG_SYMBOLS_DIR).zip
    -
    -uninstall:
    - rm -rf $(PURPLE_INSTALL_PERL_DIR) $(PIDGIN_INSTALL_PLUGINS_DIR) $(PURPLE_INSTALL_PO_DIR) $(PIDGIN_INSTALL_DIR) $(STRIPPED_RELEASE_DIR) $(DEBUG_SYMBOLS_DIR)
    - rm -f ./VERSION
    -
    -include $(PIDGIN_COMMON_TARGETS)
    -
    --- a/PLUGIN_HOWTO Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,7 +0,0 @@
    -For information on writing a plugin for Purple, Pidgin or Finch, go
    -https://developer.pidgin.im and click on API. From there, see the
    -HOWTOs in the "Related Pages" section.
    -
    -You can also generate this documentation locally by passing
    -"--enable-gtk-doc" to ./configure, then running "make" in the source tree.
    -The documentation will be in the doc/reference/*/html directories.
    --- a/README Thu Oct 05 21:24:11 2017 -0500
    +++ b/README Thu Nov 23 22:30:26 2017 -0600
    @@ -1,5 +1,4 @@
    -Purple, Pidgin and Finch
    -========================
    +# Purple, Pidgin and Finch
    See AUTHORS and COPYRIGHT for the list of contributors.
    libpurple is a library intended to be used by programmers seeking
    @@ -15,49 +14,53 @@
    These programs are not endorsed by, nor affiliated with, AOL nor any
    other company in any way.
    -BUILD
    -=====
    +## BUILD
    +
    +Pidgin uses [meson](https://mesonbuild.com) as a build system.
    +
    +You can quickly build Pidgin with the following commands
    -Read the 'INSTALL' file for more detailed directions.
    + meson build
    + cd build
    + ninja
    + sudo ninja install
    -These programs use the standard ./configure ; make. You need to use
    -gmake, BSD make probably won't work. Remember, run ./configure --help
    -to see what build options are available.
    +There are quite a few options for the build that you can view by looking at `meson_options.txt`. You can specify the options when running meson like the following:
    -In order to compile Pidgin you need to have GTK+ 2.0 installed (as
    -well as the development files!). The configure script will fail if you
    -don't. If you don't have GTK+ 2.0 installed, you should install it
    -using your distribution's package management tools.
    + meson -Ddebug=true build
    +
    +If you've already ran meson you can use `meson configure`
    -For sound support, you also need gstreamer 0.10 or higher.
    -Your distro of choice probably already includes these, just be sure to
    -install the development packages.
    + cd build
    + meson configure -Ddebug=true
    -RUN
    -===
    +## RUN
    -You should run 'make install' as root to make sure plugins and other files
    -get installed into locations they want to be in. Once you've done that,
    -you only need to run 'pidgin' or 'finch'.
    +Currently Pidgin can not be run from a build directory which means you must
    +install it first. Once you've done that, you only need to run 'pidgin' or
    +'finch'.
    To get started, simply add a new account.
    -If you come across a bug, please report it at: https://developer.pidgin.im
    +If you come across a bug, please report it at: https://developer.pidgin.im/
    +
    +## PLUGINS
    -PLUGINS
    -=======
    -
    -If you do not wish to enable the plugin support within Purple, run the
    -./configure script with the --disable-plugins option and recompile your
    -source code. This will prevent the ability to load plugins.
    +If you do not wish to enable the plugin support within Purple, run meson with
    +`-Dplugins=false` or if you've already ran meson use
    +`meson configure -Dplugins=false` from the build directory. This will prevent
    +the ability to load plugins.
    -'make install' puts the plugins in $PREFIX/lib/purple (PREFIX being what
    -you specified when you ./configure'd - it defaults to /usr/local). Purple
    +`ninja install` puts the plugins in `$PREFIX/lib/purple` (PREFIX being what
    +you specified when you ran meson. It defaults to `/usr/local`). Purple
    looks for the plugins in that directory by default. Plugins can be installed
    -per-user in ~/.purple/plugins as well. Pidgin and Finch also look in
    -$PREFIX/lib/pidgin and $PREFIX/lib/finch for UI-specific, respectively.
    +per-user in `~/.purple/plugins` as well. Pidgin and Finch also look in
    +`$PREFIX/lib/pidgin` and `$PREFIX/lib/finch` for UI-specific, respectively.
    +
    +## Developing
    -To build a plugin from a .c file, put it in the plugins/ directory in
    -the source and run 'make filename.so', e.g. if you have the .c file
    -'kickass.c', put it in the plugins/ directory, and from that directory,
    -run 'make kickass.so'.
    \ No newline at end of file
    +There is a ton of information on developing Pidgin available at
    +[developer.pidgin.im](https://developer.pidgin.im).
    +
    +To generate the documentation locally you can pass `-Ddoc=true` to `meson` or
    +`meson configure` which will build the `gtk-docs` for everything.
    --- a/README.hg Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,34 +0,0 @@
    -If you plan to use Pidgin, Finch and libpurple from our Mercurial repository,
    -PLEASE read this message in its entirety!
    -
    -Pidgin, Finch, and libpurple are a fast-moving project with a somewhat regular
    -release schedule. Due to the rate of development, the code in our Mercurial
    -repository undergoes frequent bursts of massive changes, often leaving behind
    -brokenness and partial functionality while the responsible developers rewrite
    -some portion of code or seek to add new features.
    -
    -What this all boils down to is that the code in our Mercurial repository _WILL_
    -sometimes be broken. Because of this, we ask that users who are not interested
    -in personally tracking down bugs and fixing them (without a lot of
    -assistance from the developers!) use only released versions. Since releases
    -will be made often, this should not prevent anyone from using the newest,
    -shiniest features -- but it will prevent users from having to deal with ugly
    -development bugs that we already know about but haven't gotten around to fixing.
    -
    -If you are interested in hacking on Pidgin, Finch, and/or libpurple, please
    -check out the information available at: https://developer.pidgin.im
    -
    -By far the best documentation, however, is the documented code. You can pass
    -"--enable-gtk-doc" to ./configure then run "make" in the source tree to
    -generate pretty documentation in the doc/reference/*/html directories.
    -Otherwise (or even if you do!), the header files for each subsystem contain
    -documentation for the functions they contain. For instance, conversation.h
    -contains documentation for the entire purple_conversation_* API, and account.h
    -contains documentation for the purple_account_* API.
    -
    -If you have questions, please feel free to contact the Pidgin, Finch, and
    -libpurple developers by email at devel@pidgin.im or on IRC at irc.freenode.net
    -in #pidgin. Please do as much homework as you can before contacting us; the
    -more you know about your question, the faster and more effectively we can help!
    -
    -Patches should be posted as Trac tickets at: https://developer.pidgin.im
    --- a/README.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,6 +0,0 @@
    -How to build Pidgin for Windows using MinGW
    -===========================================
    -
    -For the latest build instructions, please refer to:
    -
    -https://developer.pidgin.im/wiki/BuildingWinPidgin
    --- a/acinclude.m4 Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,527 +0,0 @@
    -dnl Added by setup-gettext. Do not remove this
    -dnl unless you know what you are doing.
    -AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
    -
    -# Configure paths for GLIB
    -# Owen Taylor 1997-2001
    -
    -dnl AM_PATH_GLIB_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]])
    -dnl Test for GLIB, and define GLIB_CFLAGS and GLIB_LIBS, if gobject or
    -dnl gthread is specified in MODULES, pass to pkg-config
    -dnl
    -AC_DEFUN([AM_PATH_GLIB_2_0],
    -[dnl
    -dnl Get the cflags and libraries from pkg-config
    -dnl
    -AC_ARG_ENABLE(glibtest, [ --disable-glibtest do not try to compile and run a test GLIB program],
    - , enable_glibtest=yes)
    -
    - pkg_config_args=glib-2.0
    - for module in . $4
    - do
    - case "$module" in
    - gobject)
    - pkg_config_args="$pkg_config_args gobject-2.0"
    - ;;
    - gthread)
    - pkg_config_args="$pkg_config_args gthread-2.0"
    - ;;
    - esac
    - done
    -
    - AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
    -
    - no_glib=""
    -
    - if test x$PKG_CONFIG != xno ; then
    - if $PKG_CONFIG --atleast-pkgconfig-version 0.7 ; then
    - :
    - else
    - echo *** pkg-config too old; version 0.7 or better required.
    - no_glib=yes
    - PKG_CONFIG=no
    - fi
    - else
    - no_glib=yes
    - fi
    -
    - min_glib_version=ifelse([$1], ,2.0.0,$1)
    - AC_MSG_CHECKING(for GLIB - version >= $min_glib_version)
    -
    - if test x$PKG_CONFIG != xno ; then
    - ## don't try to run the test against uninstalled libtool libs
    - if $PKG_CONFIG --uninstalled $pkg_config_args; then
    - echo "Will use uninstalled version of GLib found in PKG_CONFIG_PATH"
    - enable_glibtest=no
    - fi
    -
    - if $PKG_CONFIG --atleast-version $min_glib_version $pkg_config_args; then
    - :
    - else
    - no_glib=yes
    - fi
    - fi
    -
    - if test x"$no_glib" = x ; then
    - GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0`
    - GOBJECT_QUERY=`$PKG_CONFIG --variable=gobject_query glib-2.0`
    - GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
    -
    - GLIB_CFLAGS=`$PKG_CONFIG --cflags $pkg_config_args`
    - GLIB_LIBS=`$PKG_CONFIG --libs $pkg_config_args`
    - glib_config_major_version=`$PKG_CONFIG --modversion glib-2.0 | \
    - sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
    - glib_config_minor_version=`$PKG_CONFIG --modversion glib-2.0 | \
    - sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
    - glib_config_micro_version=`$PKG_CONFIG --modversion glib-2.0 | \
    - sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
    - if test "x$enable_glibtest" = "xyes" ; then
    - ac_save_CFLAGS="$CFLAGS"
    - ac_save_LIBS="$LIBS"
    - CFLAGS="$CFLAGS $GLIB_CFLAGS"
    - LIBS="$GLIB_LIBS $LIBS"
    -dnl
    -dnl Now check if the installed GLIB is sufficiently new. (Also sanity
    -dnl checks the results of pkg-config to some extent)
    -dnl
    - rm -f conf.glibtest
    - AC_TRY_RUN([
    -#include <glib.h>
    -#include <stdio.h>
    -#include <stdlib.h>
    -
    -int
    -main ()
    -{
    - int major, minor, micro;
    - char *tmp_version;
    -
    - system ("touch conf.glibtest");
    -
    - /* HP/UX 9 (%@#!) writes to sscanf strings */
    - tmp_version = g_strdup("$min_glib_version");
    - if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
    - printf("%s, bad version string\n", "$min_glib_version");
    - exit(1);
    - }
    -
    - if ((glib_major_version != $glib_config_major_version) ||
    - (glib_minor_version != $glib_config_minor_version) ||
    - (glib_micro_version != $glib_config_micro_version))
    - {
    - printf("\n*** 'pkg-config --modversion glib-2.0' returned %d.%d.%d, but GLIB (%d.%d.%d)\n",
    - $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version,
    - glib_major_version, glib_minor_version, glib_micro_version);
    - printf ("*** was found! If pkg-config was correct, then it is best\n");
    - printf ("*** to remove the old version of GLib. You may also be able to fix the error\n");
    - printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
    - printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
    - printf("*** required on your system.\n");
    - printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n");
    - printf("*** to point to the correct configuration files\n");
    - }
    - else if ((glib_major_version != GLIB_MAJOR_VERSION) ||
    - (glib_minor_version != GLIB_MINOR_VERSION) ||
    - (glib_micro_version != GLIB_MICRO_VERSION))
    - {
    - printf("*** GLIB header files (version %d.%d.%d) do not match\n",
    - GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION);
    - printf("*** library (version %d.%d.%d)\n",
    - glib_major_version, glib_minor_version, glib_micro_version);
    - }
    - else
    - {
    - if ((glib_major_version > major) ||
    - ((glib_major_version == major) && (glib_minor_version > minor)) ||
    - ((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro)))
    - {
    - return 0;
    - }
    - else
    - {
    - printf("\n*** An old version of GLIB (%d.%d.%d) was found.\n",
    - glib_major_version, glib_minor_version, glib_micro_version);
    - printf("*** You need a version of GLIB newer than %d.%d.%d. The latest version of\n",
    - major, minor, micro);
    - printf("*** GLIB is always available from ftp://ftp.gtk.org.\n");
    - printf("***\n");
    - printf("*** If you have already installed a sufficiently new version, this error\n");
    - printf("*** probably means that the wrong copy of the pkg-config shell script is\n");
    - printf("*** being found. The easiest way to fix this is to remove the old version\n");
    - printf("*** of GLIB, but you can also set the PKG_CONFIG environment to point to the\n");
    - printf("*** correct copy of pkg-config. (In this case, you will have to\n");
    - printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
    - printf("*** so that the correct libraries are found at run-time))\n");
    - }
    - }
    - return 1;
    -}
    -],, no_glib=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
    - CFLAGS="$ac_save_CFLAGS"
    - LIBS="$ac_save_LIBS"
    - fi
    - fi
    - if test "x$no_glib" = x ; then
    - AC_MSG_RESULT(yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version))
    - ifelse([$2], , :, [$2])
    - else
    - AC_MSG_RESULT(no)
    - if test "$PKG_CONFIG" = "no" ; then
    - echo "*** A new enough version of pkg-config was not found."
    - echo "*** See http://www.freedesktop.org/software/pkgconfig/"
    - else
    - if test -f conf.glibtest ; then
    - :
    - else
    - echo "*** Could not run GLIB test program, checking why..."
    - ac_save_CFLAGS="$CFLAGS"
    - ac_save_LIBS="$LIBS"
    - CFLAGS="$CFLAGS $GLIB_CFLAGS"
    - LIBS="$LIBS $GLIB_LIBS"
    - AC_TRY_LINK([
    -#include <glib.h>
    -#include <stdio.h>
    -], [ return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); ],
    - [ echo "*** The test program compiled, but did not run. This usually means"
    - echo "*** that the run-time linker is not finding GLIB or finding the wrong"
    - echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your"
    - echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
    - echo "*** to the installed location Also, make sure you have run ldconfig if that"
    - echo "*** is required on your system"
    - echo "***"
    - echo "*** If you have an old version installed, it is best to remove it, although"
    - echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ],
    - [ echo "*** The test program failed to compile or link. See the file config.log for the"
    - echo "*** exact error that occurred. This usually means GLIB is incorrectly installed."])
    - CFLAGS="$ac_save_CFLAGS"
    - LIBS="$ac_save_LIBS"
    - fi
    - fi
    - GLIB_CFLAGS=""
    - GLIB_LIBS=""
    - GLIB_GENMARSHAL=""
    - GOBJECT_QUERY=""
    - GLIB_MKENUMS=""
    - ifelse([$3], , :, [$3])
    - fi
    - AC_SUBST(GLIB_CFLAGS)
    - AC_SUBST(GLIB_LIBS)
    - AC_SUBST(GLIB_GENMARSHAL)
    - AC_SUBST(GOBJECT_QUERY)
    - AC_SUBST(GLIB_MKENUMS)
    - rm -f conf.glibtest
    -])
    -# Configure paths for GTK+
    -# Owen Taylor 1997-2001
    -
    -dnl AM_PATH_GTK_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]])
    -dnl Test for GTK+, and define GTK_CFLAGS and GTK_LIBS, if gthread is specified in MODULES,
    -dnl pass to pkg-config
    -dnl
    -AC_DEFUN([AM_PATH_GTK_2_0],
    -[dnl
    -dnl Get the cflags and libraries from pkg-config
    -dnl
    -AC_ARG_ENABLE(gtktest, [ --disable-gtktest do not try to compile and run a test GTK+ program],
    - , enable_gtktest=yes)
    -
    - pkg_config_args=gtk+-2.0
    - for module in . $4
    - do
    - case "$module" in
    - gthread)
    - pkg_config_args="$pkg_config_args gthread-2.0"
    - ;;
    - esac
    - done
    -
    - no_gtk=""
    -
    - AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
    -
    - if test x$PKG_CONFIG != xno ; then
    - if pkg-config --atleast-pkgconfig-version 0.7 ; then
    - :
    - else
    - echo *** pkg-config too old; version 0.7 or better required.
    - no_gtk=yes
    - PKG_CONFIG=no
    - fi
    - else
    - no_gtk=yes
    - fi
    -
    - min_gtk_version=ifelse([$1], ,2.0.0,$1)
    - AC_MSG_CHECKING(for GTK+ - version >= $min_gtk_version)
    -
    - if test x$PKG_CONFIG != xno ; then
    - ## don't try to run the test against uninstalled libtool libs
    - if $PKG_CONFIG --uninstalled $pkg_config_args; then
    - echo "Will use uninstalled version of GTK+ found in PKG_CONFIG_PATH"
    - enable_gtktest=no
    - fi
    -
    - if $PKG_CONFIG --atleast-version $min_gtk_version $pkg_config_args; then
    - :
    - else
    - no_gtk=yes
    - fi
    - fi
    -
    - if test x"$no_gtk" = x ; then
    - GTK_CFLAGS=`$PKG_CONFIG $pkg_config_args --cflags`
    - GTK_LIBS=`$PKG_CONFIG $pkg_config_args --libs`
    - gtk_config_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
    - sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
    - gtk_config_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
    - sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
    - gtk_config_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
    - sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
    - if test "x$enable_gtktest" = "xyes" ; then
    - ac_save_CFLAGS="$CFLAGS"
    - ac_save_LIBS="$LIBS"
    - CFLAGS="$CFLAGS $GTK_CFLAGS"
    - LIBS="$GTK_LIBS $LIBS"
    -dnl
    -dnl Now check if the installed GTK+ is sufficiently new. (Also sanity
    -dnl checks the results of pkg-config to some extent)
    -dnl
    - rm -f conf.gtktest
    - AC_TRY_RUN([
    -#include <gtk/gtk.h>
    -#include <stdio.h>
    -#include <stdlib.h>
    -
    -int
    -main ()
    -{
    - int major, minor, micro;
    - char *tmp_version;
    -
    - system ("touch conf.gtktest");
    -
    - /* HP/UX 9 (%@#!) writes to sscanf strings */
    - tmp_version = g_strdup("$min_gtk_version");
    - if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
    - printf("%s, bad version string\n", "$min_gtk_version");
    - exit(1);
    - }
    -
    - if ((gtk_major_version != $gtk_config_major_version) ||
    - (gtk_minor_version != $gtk_config_minor_version) ||
    - (gtk_micro_version != $gtk_config_micro_version))
    - {
    - printf("\n*** 'pkg-config --modversion gtk+-2.0' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n",
    - $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version,
    - gtk_major_version, gtk_minor_version, gtk_micro_version);
    - printf ("*** was found! If pkg-config was correct, then it is best\n");
    - printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n");
    - printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
    - printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
    - printf("*** required on your system.\n");
    - printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n");
    - printf("*** to point to the correct configuration files\n");
    - }
    - else if ((gtk_major_version != GTK_MAJOR_VERSION) ||
    - (gtk_minor_version != GTK_MINOR_VERSION) ||
    - (gtk_micro_version != GTK_MICRO_VERSION))
    - {
    - printf("*** GTK+ header files (version %d.%d.%d) do not match\n",
    - GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION);
    - printf("*** library (version %d.%d.%d)\n",
    - gtk_major_version, gtk_minor_version, gtk_micro_version);
    - }
    - else
    - {
    - if ((gtk_major_version > major) ||
    - ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
    - ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro)))
    - {
    - return 0;
    - }
    - else
    - {
    - printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n",
    - gtk_major_version, gtk_minor_version, gtk_micro_version);
    - printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n",
    - major, minor, micro);
    - printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n");
    - printf("***\n");
    - printf("*** If you have already installed a sufficiently new version, this error\n");
    - printf("*** probably means that the wrong copy of the pkg-config shell script is\n");
    - printf("*** being found. The easiest way to fix this is to remove the old version\n");
    - printf("*** of GTK+, but you can also set the PKG_CONFIG environment to point to the\n");
    - printf("*** correct copy of pkg-config. (In this case, you will have to\n");
    - printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
    - printf("*** so that the correct libraries are found at run-time))\n");
    - }
    - }
    - return 1;
    -}
    -],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
    - CFLAGS="$ac_save_CFLAGS"
    - LIBS="$ac_save_LIBS"
    - fi
    - fi
    - if test "x$no_gtk" = x ; then
    - AC_MSG_RESULT(yes (version $gtk_config_major_version.$gtk_config_minor_version.$gtk_config_micro_version))
    - ifelse([$2], , :, [$2])
    - else
    - AC_MSG_RESULT(no)
    - if test "$PKG_CONFIG" = "no" ; then
    - echo "*** A new enough version of pkg-config was not found."
    - echo "*** See http://pkgconfig.sourceforge.net"
    - else
    - if test -f conf.gtktest ; then
    - :
    - else
    - echo "*** Could not run GTK+ test program, checking why..."
    - ac_save_CFLAGS="$CFLAGS"
    - ac_save_LIBS="$LIBS"
    - CFLAGS="$CFLAGS $GTK_CFLAGS"
    - LIBS="$LIBS $GTK_LIBS"
    - AC_TRY_LINK([
    -#include <gtk/gtk.h>
    -#include <stdio.h>
    -], [ return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ],
    - [ echo "*** The test program compiled, but did not run. This usually means"
    - echo "*** that the run-time linker is not finding GTK+ or finding the wrong"
    - echo "*** version of GTK+. If it is not finding GTK+, you'll need to set your"
    - echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
    - echo "*** to the installed location Also, make sure you have run ldconfig if that"
    - echo "*** is required on your system"
    - echo "***"
    - echo "*** If you have an old version installed, it is best to remove it, although"
    - echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ],
    - [ echo "*** The test program failed to compile or link. See the file config.log for the"
    - echo "*** exact error that occurred. This usually means GTK+ is incorrectly installed."])
    - CFLAGS="$ac_save_CFLAGS"
    - LIBS="$ac_save_LIBS"
    - fi
    - fi
    - GTK_CFLAGS=""
    - GTK_LIBS=""
    - ifelse([$3], , :, [$3])
    - fi
    - AC_SUBST(GTK_CFLAGS)
    - AC_SUBST(GTK_LIBS)
    - rm -f conf.gtktest
    -])
    -
    -dnl ac_var_timeszone_externals.m4
    -
    -# Define 'timezone', 'altzone' and 'daylight'
    -# http://www.gnu.org/software/ac-archive/Miscellaneous/ac_var_timezone_externals.html
    -# Use instead of 'AC_STRUCT_TIMEZONE' to determine whether the
    -# the external timezone variables 'timezone', 'altzone' and 'daylight' exist,
    -# defining 'HAVE_TIMEZONE', 'HAVE_ALTZONE' and 'HAVE_DAYLIGHT' respectively
    -# (as well as gaining the macros defined by 'AC_STRUCT_TIMEZONE').
    -# Mark R.Bannister <markb@freedomware.co.uk>
    -AC_DEFUN([AC_VAR_TIMEZONE_EXTERNALS],
    -[ AC_REQUIRE([AC_STRUCT_TIMEZONE])dnl
    - AC_CACHE_CHECK(for timezone external, mb_cv_var_timezone,
    - [ AC_TRY_LINK([#include <time.h>], [return (int)timezone;],
    - mb_cv_var_timezone=yes,
    - mb_cv_var_timezone=no)
    - ])
    - AC_CACHE_CHECK(for altzone external, mb_cv_var_altzone,
    - [ AC_TRY_LINK([#include <time.h>], [return (int)altzone;],
    - mb_cv_var_altzone=yes,
    - mb_cv_var_altzone=no)
    - ])
    - AC_CACHE_CHECK(for daylight external, mb_cv_var_daylight,
    - [ AC_TRY_LINK([#include <time.h>], [return (int)daylight;],
    - mb_cv_var_daylight=yes,
    - mb_cv_var_daylight=no)
    - ])
    - if test $mb_cv_var_timezone = yes; then
    - AC_DEFINE([HAVE_TIMEZONE], 1,
    - [Define if you have the external 'timezone' variable.])
    - fi
    - if test $mb_cv_var_altzone = yes; then
    - AC_DEFINE([HAVE_ALTZONE], 1,
    - [Define if you have the external 'altzone' variable.])
    - fi
    - if test $mb_cv_var_daylight = yes; then
    - AC_DEFINE([HAVE_DAYLIGHT], 1,
    - [Define if you have the external 'daylight' variable.])
    - fi
    -])
    -
    -dnl Available from the GNU Autoconf Macro Archive at:
    -dnl http://www.gnu.org/software/ac-archive/htmldoc/ac_prog_perl_modules.html
    -dnl
    -AC_DEFUN([AC_PROG_PERL_MODULES],[dnl
    -ac_perl_modules="$1"
    -# Make sure we have perl
    -if test -z "$PERL"; then
    -AC_CHECK_PROG(PERL,perl,perl)
    -fi
    -
    -if test "x$PERL" != x; then
    - ac_perl_modules_failed=0
    - for ac_perl_module in $ac_perl_modules; do
    - AC_MSG_CHECKING(for perl module $ac_perl_module)
    -
    - # Would be nice to log result here, but can't rely on autoconf internals
    - $PERL "-M$ac_perl_module" -e exit > /dev/null 2>&1
    - if test $? -ne 0; then
    - AC_MSG_RESULT(no);
    - ac_perl_modules_failed=1
    - else
    - AC_MSG_RESULT(ok);
    - fi
    - done
    -
    - # Run optional shell commands
    - if test "$ac_perl_modules_failed" = 0; then
    - :
    - $2
    - else
    - :
    - $3
    - fi
    -else
    - AC_MSG_WARN(could not find perl)
    -fi])dnl
    -
    -
    -dnl AM_GCONF_SOURCE_2
    -dnl Defines GCONF_SCHEMA_CONFIG_SOURCE which is where you should install schemas
    -dnl (i.e. pass to gconftool-2
    -dnl Defines GCONF_SCHEMA_FILE_DIR which is a filesystem directory where
    -dnl you should install foo.schemas files
    -dnl
    -
    -AC_DEFUN([AM_GCONF_SOURCE_2],
    -[
    - if test "x$GCONF_SCHEMA_INSTALL_SOURCE" = "x"; then
    - GCONF_SCHEMA_CONFIG_SOURCE=`gconftool-2 --get-default-source`
    - else
    - GCONF_SCHEMA_CONFIG_SOURCE=$GCONF_SCHEMA_INSTALL_SOURCE
    - fi
    -
    - AC_ARG_WITH(gconf-source,
    - [ --with-gconf-source=sourceaddress Config database for installing schema files.],GCONF_SCHEMA_CONFIG_SOURCE="$withval",)
    -
    - AC_SUBST(GCONF_SCHEMA_CONFIG_SOURCE)
    - AC_MSG_RESULT([Using config source $GCONF_SCHEMA_CONFIG_SOURCE for schema installation])
    -
    - if test "x$GCONF_SCHEMA_FILE_DIR" = "x"; then
    - GCONF_SCHEMA_FILE_DIR='$(sysconfdir)/gconf/schemas'
    - fi
    -
    - AC_ARG_WITH(gconf-schema-file-dir,
    - [ --with-gconf-schema-file-dir=dir Directory for installing schema files.],GCONF_SCHEMA_FILE_DIR="$withval",)
    -
    - AC_SUBST(GCONF_SCHEMA_FILE_DIR)
    - AC_MSG_RESULT([Using $GCONF_SCHEMA_FILE_DIR as install directory for schema files])
    -
    - AC_ARG_ENABLE(schemas-install,
    - [ --disable-schemas-install Disable the schemas installation],
    - [case ${enableval} in
    - yes|no) ;;
    - *) AC_MSG_ERROR(bad value ${enableval} for --enable-schemas-install) ;;
    - esac])
    - AM_CONDITIONAL([GCONF_SCHEMAS_INSTALL], [test "$enable_schemas_install" != no])
    -])
    --- a/autogen.sh Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,214 +0,0 @@
    -#! /bin/sh
    -# Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
    -# Copyright (C) 2003-2008 Gary Kramlich <grim@reaperworld.com>
    -#
    -# This program is free software; you can redistribute it and/or modify it
    -# under the terms of the GNU General Public License as published by the Free
    -# Software Foundation; either version 2 of the License, or (at your option)
    -# any later version.
    -#
    -# This program is distributed in the hope that it will be useful, but WITHOUT
    -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
    -# more details.
    -#
    -# You should have received a copy of the GNU General Public License along with
    -# this program; if not, write to the Free Software Foundation, Inc., 51
    -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
    -
    -###############################################################################
    -# Usage
    -###############################################################################
    -# This script uses a config file that can be used to stash common arguments
    -# passed to configure or environment variables that need to be set before
    -# configure is called. The configuration file is a simple shell script that
    -# gets sourced.
    -#
    -# By default, the config file that is used is named 'autogen.args'. This can
    -# be configured below.
    -#
    -# Available options that are handled are as follow:
    -# ACLOCAL_FLAGS - command line arguments to pass to aclocal
    -# AUTOCONF_FLAGS - command line arguments to pass to autoconf
    -# AUTOHEADER_FLAGS - command line arguments to pass to autoheader
    -# AUTOMAKE_FLAGS - command line arguments to pass to automake flags
    -# CONFIGURE_FLAGS - command line arguments to pass to configure
    -# GLIB_GETTEXTIZE_FLAGS - command line arguments to pass to glib-gettextize
    -# GTKDOCIZE_FLAGS - command line arguments to pass to gtkdocize
    -# INTLTOOLIZE_FLAGS - command line arguments to pass to intltoolize
    -# LIBTOOLIZE_FLAGS - command line arguments to pass to libtoolize
    -#
    -# Other helpful notes:
    -# If you're using a different c compiler, you can override the environment
    -# variable in 'autogen.args'. For example, say you're using distcc, just add
    -# the following to 'autogen.args':
    -#
    -# CC="distcc"
    -#
    -# This will work for any influential environment variable to configure.
    -###############################################################################
    -PACKAGE="Pidgin"
    -ARGS_FILE="autogen.args"
    -export CFLAGS
    -export LDFLAGS
    -
    -DEFAULT_ACLOCAL_FLAGS="-I m4macros"
    -
    -libtoolize="libtoolize"
    -case $(uname -s) in
    - Darwin*)
    - libtoolize="glibtoolize"
    -
    - BREW=$(which brew)
    -
    - if [ -n ${BREW} ] ; then
    - GETTEXT_PREFIX=$(${BREW} --prefix gettext 2>/dev/null)
    - if [ -n ${GETTEXT_PREFIX} ] ; then
    - PATH=${GETTEXT_PREFIX}/bin:$PATH
    - DEFAULT_ACLOCAL_FLAGS="${DEFAULT_ACLOCAL_FLAGS} -I ${GETTEXT_PREFIX}/share/aclocal"
    - fi
    -
    - GI_PREFIX=$(${BREW} --prefix gobject-introspection)
    - if [ -n ${GI_PREFIX} ] ; then
    - PATH=${GI_PREFIX}/bin:$PATH
    - DEFAULT_ACLOCAL_FLAGS="${DEFAULT_ACLOCAL_FLAGS} -I ${GI_PREFIX}/share/aclocal"
    - fi
    - fi
    - ;;
    - *)
    -esac
    -
    -###############################################################################
    -# Some helper functions
    -###############################################################################
    -check () {
    - CMD=$1
    -
    - printf "%s" "checking for ${CMD}... "
    - BIN=`which ${CMD} 2>/dev/null`
    -
    - if [ x"${BIN}" = x"" ] ; then
    - echo "not found."
    - echo "${CMD} is required to build ${PACKAGE}!"
    - exit 1;
    - fi
    -
    - echo "${BIN}"
    -}
    -
    -run_or_die () { # beotch
    - CMD=$1
    - shift
    -
    - OUTPUT=`mktemp autogen-XXXXXX`
    -
    - printf "running %s %s... " ${CMD} "$*"
    - ${CMD} ${@} >${OUTPUT} 2>&1
    -
    - if [ $? != 0 ] ; then
    - echo "failed."
    - cat ${OUTPUT}
    - rm -f ${OUTPUT}
    - exit 1
    - else
    - echo "done."
    - cat ${OUTPUT}
    -
    - rm -f ${OUTPUT}
    - fi
    -}
    -
    -check_gtkdoc() {
    - printf "checking for gtkdocize... "
    - GTKDOCIZE=`which gtkdocize 2>/dev/null`
    -
    - if [ x"${GTKDOCIZE}" = x"" ] ; then
    - echo "not found."
    - echo "EXTRA_DIST =" > gtk-doc.make
    - echo "You don't have gtk-doc installed, and thus won't be able to
    -generate the documentation.
    -"
    - else
    - echo "${GTKDOCIZE}"
    - run_or_die ${GTKDOCIZE} ${GTKDOCIZE_FLAGS}
    - fi
    -}
    -
    -cleanup () {
    - rm -f autogen-??????
    - echo
    - exit 2
    -}
    -
    -###############################################################################
    -# We really start here, yes, very sneaky!
    -###############################################################################
    -trap cleanup 2
    -
    -FIGLET=`which figlet 2> /dev/null`
    -if [ x"${FIGLET}" != x"" ] ; then
    - ${FIGLET} -f small ${PACKAGE}
    - echo "build system is being generated"
    -else
    - echo "autogenerating build system for '${PACKAGE}'"
    -fi
    -
    -###############################################################################
    -# Look for our args file
    -###############################################################################
    -printf "%s" "checking for ${ARGS_FILE}: "
    -if [ -f ${ARGS_FILE} ] ; then
    - echo "found."
    - printf "%s" "sourcing ${ARGS_FILE}: "
    - . "`dirname "$0"`"/${ARGS_FILE}
    - echo "done."
    -else
    - echo "not found."
    -fi
    -
    -###############################################################################
    -# Work inside the source directory
    -##############################################################################
    -test -z "$SRCDIR" && SRCDIR=`dirname "$0"`
    -test -z "$SRCDIR" && SRCDIR=.
    -
    -OLDDIR=`pwd`
    -cd "$SRCDIR"
    -
    -###############################################################################
    -# Check for our required helpers
    -###############################################################################
    -check "$libtoolize"; LIBTOOLIZE=${BIN};
    -check "glib-gettextize"; GLIB_GETTEXTIZE=${BIN};
    -check "intltoolize"; INTLTOOLIZE=${BIN};
    -check "sed"; SED=${BIN};
    -check "aclocal"; ACLOCAL=${BIN};
    -check "autoheader"; AUTOHEADER=${BIN};
    -check "automake"; AUTOMAKE=${BIN};
    -check "autoconf"; AUTOCONF=${BIN};
    -
    -###############################################################################
    -# Run all of our helpers
    -###############################################################################
    -run_or_die ${LIBTOOLIZE} ${LIBTOOLIZE_FLAGS:-"-c -f --automake"}
    -run_or_die ${GLIB_GETTEXTIZE} ${GLIB_GETTEXTIZE_FLAGS:-"--force --copy"}
    -run_or_die ${INTLTOOLIZE} ${INTLTOOLIZE_FLAGS:-"-c -f --automake"}
    -# This call to sed is needed to work around an annoying bug in intltool 0.40.6
    -# See https://developer.pidgin.im/ticket/9520 for details
    -run_or_die ${SED} -i -e "s:'\^\$\$lang\$\$':\^\$\$lang\$\$:g" po/Makefile.in.in
    -# glib-gettextize doesn't seems to use AM_V_GEN macro
    -${SED} -i -e "s:\\tfile=\`echo:\\t@echo -e \" GEN\\\\t\$\@\"; file=\`echo:g" po/Makefile.in.in
    -run_or_die ${ACLOCAL} ${ACLOCAL_FLAGS:-"${DEFAULT_ACLOCAL_FLAGS}"}
    -run_or_die ${AUTOHEADER} ${AUTOHEADER_FLAGS}
    -check_gtkdoc
    -run_or_die ${AUTOMAKE} ${AUTOMAKE_FLAGS:-"-a -c --gnu"}
    -run_or_die ${AUTOCONF} ${AUTOCONF_FLAGS}
    -
    -###############################################################################
    -# Run configure
    -###############################################################################
    -cd "$OLDDIR"
    -if test -z "$NOCONFIGURE"; then
    - echo "running $SRCDIR/configure ${CONFIGURE_FLAGS} $@"
    - "$SRCDIR/configure" ${CONFIGURE_FLAGS} $@
    -fi
    --- a/bitbucket-pipelines.yml Thu Oct 05 21:24:11 2017 -0500
    +++ b/bitbucket-pipelines.yml Thu Nov 23 22:30:26 2017 -0600
    @@ -1,13 +1,13 @@
    # vi:et:ts=2 sw=2 sts=2
    -image: pidgin/builder-debian:stretch
    +image: pidgin/builder-debian:buster
    pipelines:
    default:
    - step:
    script:
    - set -ex
    - - ./autogen.sh --enable-debug --enable-gtk-doc
    - - make -s -j$(nproc)
    - - make -s -j$(nproc) distcheck
    + - meson -Dsilc=false -Ddoc=true -Ddebug=true build
    + - ninja -C build
    + - ninja -C build test
    branches:
    release-2.x.y:
    - step:
    --- a/config.h.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,404 +0,0 @@
    -/* config.h. Generated from config.h.in by configure. */
    -/* config.h.in. Generated from configure.ac by autoheader. */
    -
    -/* Define if building universal (internal helper macro) */
    -/* #undef AC_APPLE_UNIVERSAL_BUILD */
    -
    -/* configure arguments */
    -/* #undef CONFIG_ARGS */
    -
    -/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
    - systems. This function is required for `alloca.c' support on those systems.
    - */
    -/* #undef CRAY_STACKSEG_END */
    -
    -/* Define to 1 if using `alloca.c'. */
    -/* #undef C_ALLOCA */
    -
    -/* Define if debugging is enabled. */
    -/* #undef DEBUG */
    -
    -/* display version info */
    -/* #undef DISPLAY_VERSION */
    -
    -/* Define if mono enabled. */
    -/* #undef ENABLE_MONO */
    -
    -/* always defined to indicate that i18n is enabled */
    -#define ENABLE_NLS 1
    -
    -/* use the given file as GnuTLS default trust store */
    -/* #undef GG_CONFIG_GNUTLS_SYSTEM_TRUST_STORE */
    -
    -/* Define to 1 if you have `alloca', as a function or macro. */
    -/* #undef HAVE_ALLOCA */
    -
    -/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
    - */
    -/* #undef HAVE_ALLOCA_H */
    -
    -/* Define if you have the external 'altzone' variable. */
    -/* #undef HAVE_ALTZONE */
    -
    -/* Define to 1 if you have the `bind_textdomain_codeset' function. */
    -/* #undef HAVE_BIND_TEXTDOMAIN_CODESET */
    -
    -/* Define to 1 if you have the `connect' function. */
    -/* #undef HAVE_CONNECT */
    -
    -/* Define to 1 if Cyrus SASL is present */
    -/* It's defined in global.mak. */
    -/* #undef HAVE_CYRUS_SASL */
    -
    -/* Define if you have the external 'daylight' variable. */
    -#define HAVE_DAYLIGHT 1
    -
    -/* Define if we are using D-Bus. */
    -/* #undef HAVE_DBUS */
    -
    -/* Define to 1 if you have the `dcgettext' function. */
    -/* #undef HAVE_DCGETTEXT */
    -
    -/* Define to 1 if you have the declaration of `tzname', and to 0 if you don't.
    - */
    -/* #undef HAVE_DECL_TZNAME */
    -
    -/* Define to 1 if you have the <dlfcn.h> header file. */
    -/* #undef HAVE_DLFCN_H */
    -
    -/* Define if we're using evolution addressbook. */
    -/* #undef HAVE_EVOLUTION_ADDRESSBOOK */
    -
    -/* Define to 1 if you have the <EXTERN.h> header file. */
    -/* #undef HAVE_EXTERN_H */
    -
    -/* Use Farsight instead of Farstream */
    -/* #undef HAVE_FARSIGHT */
    -
    -/* Define to 1 if you have the <fcntl.h> header file. */
    -#define HAVE_FCNTL_H 1
    -
    -/* Define to 1 if your stdio has int fileno(FILE *). */
    -#define HAVE_FILENO 1
    -
    -/* Define to 1 if you have the getaddrinfo function (since WinXP). */
    -#define HAVE_GETADDRINFO 1
    -
    -/* Define to 1 if you have the `gethostid' function. */
    -/* #define HAVE_GETHOSTID 1 */
    -
    -/* Define to 1 if you have the `getifaddrs' function. */
    -/* #undef HAVE_GETIFADDRS */
    -
    -/* Define if the GNU gettext() function is already present or preinstalled. */
    -/* #define HAVE_GETTEXT 1 */
    -
    -/* Define if you have GNUTLS */
    -#define HAVE_GNUTLS 1
    -
    -/* Define to 1 if you have the <gnutls/gnutls.h> header file. */
    -#define HAVE_GNUTLS_GNUTLS_H 1
    -
    -/* Define if your gnutls has gnutls_priority_set_direct and friends */
    -/* #undef HAVE_GNUTLS_PRIORITY_FUNCS */
    -
    -/* Define to 1 if you have the `inet_ntop' function. */
    -#define HAVE_INET_NTOP 1
    -
    -/* Define to 1 if you have the <inttypes.h> header file. */
    -#define HAVE_INTTYPES_H 1
    -
    -/* Define if we have IOKit */
    -/* #undef HAVE_IOKIT */
    -
    -/* Define if the IPV6_V6ONLY setsockopt option exists */
    -/* #undef HAVE_IPV6_V6ONLY */
    -
    -/* Define to 1 if you have the `krb_get_err_text' function. */
    -/* #undef HAVE_KRB_GET_ERR_TEXT */
    -
    -/* Define to 1 if you have the `krb_get_lrealm' function. */
    -/* #undef HAVE_KRB_GET_LREALM */
    -
    -/* Define to 1 if you have the `krb_log' function. */
    -/* #undef HAVE_KRB_LOG */
    -
    -/* Define to 1 if you have the `krb_rd_req' function. */
    -/* #undef HAVE_KRB_RD_REQ */
    -
    -/* Define to 1 if you have the `krb_set_key' function. */
    -/* #undef HAVE_KRB_SET_KEY */
    -
    -/* Define if your <locale.h> file defines LC_MESSAGES. */
    -/* #define HAVE_LC_MESSAGES 1 */
    -
    -/* Linked with external libgadu */
    -#define HAVE_LIBGADU 1
    -
    -/* Define to 1 if you have the `nsl' library (-lnsl). */
    -/* #define HAVE_LIBNSL 1 */
    -
    -/* Define to 1 if you have the `resolv' library (-lresolv). */
    -/* #define HAVE_LIBRESOLV 1 */
    -
    -/* Define to 1 if you have the `socket' library (-lsocket). */
    -/* #undef HAVE_LIBSOCKET */
    -
    -/* Define to 1 if you have the <malloc.h> header file. */
    -#define HAVE_MALLOC_H 1
    -
    -/* Define if we have support for application media type. */
    -/* #undef HAVE_MEDIA_APPLICATION */
    -
    -/* Define to 1 if you have the `mono_jit_init' function. */
    -/* #undef HAVE_MONO_JIT_INIT */
    -
    -/* Define to 1 if you have the <mono/jit/jit.h> header file. */
    -/* #undef HAVE_MONO_JIT_JIT_H */
    -
    -/* Define to 1 if you have the <mono/metadata/object.h> header file. */
    -/* #undef HAVE_MONO_METADATA_OBJECT_H */
    -
    -/* Define if we have NetworkManager. */
    -/* #undef HAVE_NETWORKMANAGER */
    -
    -/* Define to 1 if you have the <nspr.h> header file. */
    -#define HAVE_NSPR_H 1
    -
    -/* Define if you have Mozilla NSS */
    -#define HAVE_NSS 1
    -
    -/* Define to 1 if you have the <nss.h> header file. */
    -#define HAVE_NSS_H 1
    -
    -/* Define if we have Pango 1.4 or newer. */
    -#define HAVE_PANGO14 1
    -
    -/* Define to 1 if you have the <paths.h> header file. */
    -/* #define HAVE_PATHS_H 1 */
    -
    -/* Define to 1 if you have the <prio.h> header file. */
    -/* #undef HAVE_PRIO_H */
    -
    -/* Define to 1 if you have the <sgtty.h> header file. */
    -/* #define HAVE_SGTTY_H 1 */
    -
    -/* Define if we have silcmime.h */
    -#define HAVE_SILCMIME_H 1
    -
    -/* Define to 1 if you have the <smime.h> header file. */
    -/* #undef HAVE_SMIME_H */
    -
    -/* Define to 1 if you have the `snprintf' function. */
    -#define HAVE_SNPRINTF 1
    -
    -/* Define if you have SSL */
    -#define HAVE_SSL 1
    -
    -/* Define to 1 if you have the <ssl.h> header file. */
    -/* #undef HAVE_SSL_H */
    -
    -/* Define to 1 if you have the <stdint.h> header file. */
    -#define HAVE_STDINT_H 1
    -
    -/* Define to 1 if you have the `strdup' function. */
    -#define HAVE_STRDUP 1
    -
    -/* Define to 1 if you have a strftime() that supports the %z format string. */
    -/* #undef HAVE_STRFTIME_Z_FORMAT */
    -
    -/* Define to 1 if you have the <strings.h> header file. */
    -#define HAVE_STRINGS_H 1
    -
    -/* Define if struct sockaddr has an sa_len member */
    -/* #undef HAVE_STRUCT_SOCKADDR_SA_LEN */
    -
    -/* Define to 1 if `tm_zone' is a member of `struct tm'. */
    -/* #define HAVE_STRUCT_TM_TM_ZONE 1 */
    -
    -/* Define to 1 if you have the <sys/cdefs.h> header file. */
    -/* #define HAVE_SYS_CDEFS_H 1 */
    -
    -/* Define to 1 if you have the <sys/file.h> header file. */
    -#define HAVE_SYS_FILE_H 1
    -
    -/* Define to 1 if you have the <sys/filio.h> header file. */
    -/* #undef HAVE_SYS_FILIO_H */
    -
    -/* Define to 1 if you have the <sys/ioctl.h> header file. */
    -/* #define HAVE_SYS_IOCTL_H 1 */
    -
    -/* Define to 1 if you have the <sys/msgbuf.h> header file. */
    -/* #undef HAVE_SYS_MSGBUF_H */
    -
    -/* Define to 1 if you have the <sys/param.h> header file. */
    -/* #define HAVE_SYS_PARAM_H 1 */
    -
    -/* Define to 1 if you have the <sys/select.h> header file. */
    -/* #define HAVE_SYS_SELECT_H 1 */
    -
    -/* Define to 1 if you have the <sys/socket.h> header file. */
    -/* #define HAVE_SYS_SOCKET_H 1 */
    -
    -/* Define to 1 if you have the <sys/stat.h> header file. */
    -#define HAVE_SYS_STAT_H 1
    -
    -/* Define to 1 if you have the <sys/sysctl.h> header file. */
    -/* #define HAVE_SYS_SYSCTL_H 1 */
    -
    -/* Define to 1 if you have the <sys/types.h> header file. */
    -#define HAVE_SYS_TYPES_H 1
    -
    -/* Define to 1 if you have the <sys/uio.h> header file. */
    -/* #define HAVE_SYS_UIO_H 1 */
    -
    -/* Define to 1 if you have the <sys/utsname.h> header file. */
    -/* #define HAVE_SYS_UTSNAME_H 1 */
    -
    -/* Define to 1 if you have the <sys/wait.h> header file. */
    -/* #define HAVE_SYS_WAIT_H 1 */
    -
    -/* Define to 1 if you have the <termios.h> header file. */
    -/* #define HAVE_TERMIOS_H 1 */
    -
    -/* Define to 1 if you have the `timegm' function. */
    -/* #define HAVE_TIMEGM 1 */
    -
    -/* Define if you have the external 'timezone' variable. */
    -#define HAVE_TIMEZONE 1
    -
    -/* Define if you have a tm_gmtoff member in struct tm */
    -/* #define HAVE_TM_GMTOFF 1 */
    -
    -/* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use
    - `HAVE_STRUCT_TM_TM_ZONE' instead. */
    -/* #define HAVE_TM_ZONE 1 */
    -
    -/* Define to 1 if you don't have `tm_zone' but do have the external array
    - `tzname'. */
    -/* #undef HAVE_TZNAME */
    -
    -/* Define to 1 if you have the <unistd.h> header file. */
    -/*#define HAVE_UNISTD_H 1*/
    -
    -/* Define to 1 if you have X11 */
    -/* #define HAVE_X11 1 */
    -
    -/* whether or not we have xsltproc for devhelp index */
    -/* #define HAVE_XSLTPROC 1 */
    -
    -/* Define if external libzephyr should be used. */
    -/* #undef LIBZEPHYR_EXT */
    -
    -/* Define to the sub-directory in which libtool stores uninstalled libraries.
    - */
    -/* #define LT_OBJDIR ".libs/" */
    -
    -/* Define to 1 if you don't have wide-character support. */
    -/* #undef NO_WIDECHAR */
    -
    -/* Name of package */
    -#define PACKAGE "pidgin"
    -
    -/* Define to the address where bug reports for this package should be sent. */
    -#define PACKAGE_BUGREPORT "devel@pidgin.im"
    -
    -/* Define to the full name of this package. */
    -#define PACKAGE_NAME "pidgin"
    -
    -/* Define to the full name and version of this package. */
    -/* #define PACKAGE_STRING "pidgin ?-.?.?devel" */
    -
    -/* Define to the one symbol short name of this package. */
    -#define PACKAGE_TARNAME "pidgin"
    -
    -/* Define to the home page for this package. */
    -#define PACKAGE_URL ""
    -
    -/* Define to the version of this package. */
    -/* #define PACKAGE_VERSION "?.?.?devel" */
    -
    -/* Define if plugins are enabled. */
    -#define PURPLE_PLUGINS 1
    -
    -/* The size of `time_t', as computed by sizeof. */
    -#define SIZEOF_TIME_T 4
    -
    -/* If using the C implementation of alloca, define if you know the
    - direction of stack growth for your system; otherwise it will be
    - automatically deduced at runtime.
    - STACK_DIRECTION > 0 => grows toward higher addresses
    - STACK_DIRECTION < 0 => grows toward lower addresses
    - STACK_DIRECTION = 0 => direction of growth unknown */
    -/* #undef STACK_DIRECTION */
    -
    -/* Loads static protocol plugin module initialization functions. */
    -#ifndef STATIC_PROTO_INIT
    -#define STATIC_PROTO_INIT static void static_proto_init(void) { }
    -#endif
    -
    -/* Use GStreamer for playing sounds */
    -/* It's defined in global.mak. */
    -/* #undef USE_GSTREAMER */
    -
    -/* Use voice and video */
    -/* It's defined in global.mak. */
    -/* #undef USE_VV */
    -
    -/* Use GNU Libidn for stringprep and IDN */
    -/* #define USE_IDN 1 */
    -
    -/* Define if python headers are available. */
    -/* #undef USE_PYTHON */
    -
    -/* Use voice and video */
    -/* #define USE_VV 1 */
    -
    -/* Version number of package */
    -#define VERSION "@VERSION@"
    -#define DISPLAY_VERSION "@DISPLAY_VERSION@"
    -
    -/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    - significant byte first (like Motorola and SPARC, unlike Intel). */
    -/* # undef WORDS_BIGENDIAN */
    -
    -/* Define to 1 if the X Window System is missing or not being used. */
    -/* #undef X_DISPLAY_MISSING */
    -
    -/* Size of an int32. */
    -#define ZEPHYR_INT32 long
    -
    -/* Define if kerberos should be used in Zephyr. */
    -/* #undef ZEPHYR_USES_KERBEROS */
    -
    -/* Number of bits in a file offset, on hosts where this is settable. */
    -/* #define _FILE_OFFSET_BITS 64 */
    -
    -/* Define for large files, on AIX-style hosts. */
    -/* #undef _LARGE_FILES */
    -
    -/* Define to `unsigned int' if <sys/types.h> does not define. */
    -/* #undef size_t */
    -
    -/* socklen_t size */
    -/* #undef socklen_t */
    -
    -/*
    - * Following are added for Win32 version of Pidgin
    - */
    -#define HAVE_VSNPRINTF 1
    -
    -#define FINCH_LIBDIR wpurple_lib_dir(NULL)
    -#define PIDGIN_LIBDIR wpurple_lib_dir(NULL)
    -#define PURPLE_DATADIR wpurple_bin_dir()
    -#define PURPLE_LIBDIR wpurple_lib_dir(NULL)
    -#define PURPLE_LOCALEDIR wpurple_locale_dir()
    -#define PURPLE_SYSCONFDIR wpurple_sysconf_dir()
    -
    -#define HAVE_FILENO 1
    -
    -#ifndef _WIN32_WINNT
    -/* _WIN32_WINNT_WINXP = 0x0501 */
    -#define _WIN32_WINNT 0x0501
    -#endif
    -
    --- a/configure.ac Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,2104 +0,0 @@
    -dnl Process this file with autoconf to produce a configure script.
    -AC_PREREQ([2.63])
    -
    -# UPDATING VERSION NUMBERS FOR RELEASES
    -#
    -# purple_micro_version += 1
    -#
    -# If any functions have been added to libpurple, Pidgin, or Finch:
    -# purple_micro_version = 0
    -# purple_minor_version += 1
    -# purple_lt_current += 1
    -#
    -# If backwards compatibility has been broken in libpurple, Pidgin, or Finch:
    -# purple_micro_version = 0
    -# purple_minor_version = 0
    -# purple_major_version += 1;
    -# purple_lt_current += 1
    -#
    -# purple_version_suffix should be similar to one of the following:
    -# For beta releases: [beta2]
    -# For code under development: [devel]
    -# For production releases: []
    -#
    -#
    -# If any code has changed in libgnt:
    -# gnt_micro_version += 1
    -#
    -# If any functions have been added to libgnt:
    -# gnt_micro_version = 0
    -# gnt_minor_version += 1
    -# gnt_lt_current += 1
    -#
    -# If backwards compatibility has been broken in libgnt:
    -# gnt_micro_version = 0
    -# gnt_minor_version = 0
    -# gnt_major_version += 1;
    -# gnt_lt_current += 1
    -#
    -# gnt_version_suffix should be similar to one of the following:
    -# For beta releases: [beta2]
    -# For code under development: [devel]
    -# For production releases: []
    -#
    -# Make sure to update finch/libgnt/configure.ac with libgnt version changes.
    -#
    -m4_define([purple_lt_current], [20])
    -m4_define([purple_major_version], [3])
    -m4_define([purple_minor_version], [0])
    -m4_define([purple_micro_version], [0])
    -m4_define([purple_version_suffix], [devel])
    -m4_define([purple_version],
    - [purple_major_version.purple_minor_version.purple_micro_version])
    -m4_define([purple_display_version], purple_version[]m4_ifdef([purple_version_suffix],[purple_version_suffix]))
    -
    -# the last version for Finch 2 was 2.8.10,
    -# the first version for Finch 3 was 2.9.0
    -m4_define([gnt_lt_current], [9])
    -m4_define([gnt_major_version], [2])
    -m4_define([gnt_minor_version], [9])
    -m4_define([gnt_micro_version], [0])
    -m4_define([gnt_version_suffix], [devel])
    -m4_define([gnt_version],
    - [gnt_major_version.gnt_minor_version.gnt_micro_version])
    -m4_define([gnt_display_version], gnt_version[]m4_ifdef([gnt_version_suffix],[gnt_version_suffix]))
    -
    -
    -AC_INIT([pidgin], [purple_display_version], [devel@pidgin.im])
    -
    -if test `pwd | wc -w` -ne 1; then
    - AC_MSG_ERROR([
    -You are attempting to build in a path that contains spaces. This
    -will fail. Relocate this source tree to a path that does not contain
    -spaces and run configure again.
    -])
    -fi
    -
    -AC_CANONICAL_HOST
    -AC_CONFIG_HEADERS([config.h])
    -AC_CONFIG_MACRO_DIR([m4macros])
    -AM_INIT_AUTOMAKE([1.11 -Wno-portability dist-bzip2 subdir-objects])
    -AM_SILENT_RULES([yes])
    -
    -PURPLE_MAJOR_VERSION=purple_major_version
    -PURPLE_MINOR_VERSION=purple_minor_version
    -PURPLE_MICRO_VERSION=purple_micro_version
    -PURPLE_VERSION=purple_display_version
    -PURPLE_API_VERSION=$((purple_lt_current - purple_minor_version))
    -AC_SUBST(PURPLE_MAJOR_VERSION)
    -AC_SUBST(PURPLE_MINOR_VERSION)
    -AC_SUBST(PURPLE_MICRO_VERSION)
    -AC_SUBST(PURPLE_VERSION)
    -AC_SUBST(PURPLE_API_VERSION)
    -
    -PURPLE_LT_VERSION_INFO="purple_lt_current:purple_micro_version:purple_minor_version"
    -AC_SUBST(PURPLE_LT_VERSION_INFO)
    -
    -GNT_MAJOR_VERSION=gnt_major_version
    -GNT_MINOR_VERSION=gnt_minor_version
    -GNT_MICRO_VERSION=gnt_micro_version
    -GNT_VERSION=gnt_display_version
    -GNT_API_VERSION=$((gnt_lt_current - gnt_minor_version))
    -AC_SUBST(GNT_MAJOR_VERSION)
    -AC_SUBST(GNT_MINOR_VERSION)
    -AC_SUBST(GNT_MICRO_VERSION)
    -AC_SUBST(GNT_VERSION)
    -AC_SUBST(GNT_API_VERSION)
    -
    -GNT_LT_VERSION_INFO="gnt_lt_current:gnt_micro_version:gnt_minor_version"
    -AC_SUBST(GNT_LT_VERSION_INFO)
    -
    -AC_PATH_PROG(sedpath, sed)
    -
    -dnl Storing configure arguments
    -AC_DEFINE_UNQUOTED(CONFIG_ARGS, "$ac_configure_args", [configure arguments])
    -
    -dnl Checks for programs.
    -AC_PROG_CC
    -AM_PROG_CC_C_O
    -AC_PROG_CXX
    -LT_PREREQ([2.2.6])
    -LT_INIT([disable-static])
    -AC_PROG_INSTALL
    -PKG_PROG_PKG_CONFIG
    -AC_FUNC_ALLOCA
    -
    -dnl Check for Sun compiler
    -AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"])
    -
    -dnl Check for Win32
    -case "$host" in
    - *-*-mingw* | *-*-cygwin*)
    - is_win32="yes"
    - is_not_win32="no"
    - LIBS="$LIBS -lws2_32"
    - DNSAPI_LIBS="-ldnsapi"
    - PLUGIN_LDFLAGS="-avoid-version -no-undefined"
    - AC_SUBST(DNSAPI_LIBS)
    - AC_CHECK_TOOL(WINDRES, windres)
    - AC_DEFINE(IS_WIN32_CROSS_COMPILED, 1,
    - [Define to 1, when building with autotools (not necessarily
    - cross-compiling) for windows. It's a temporary hack to remain
    - non-autotools win32 build working. Drop it when we fully
    - switch our win32 build to autotools.])
    - AC_DEFINE(WIN32_LEAN_AND_MEAN, 1,
    - [Define to 1, to build faster for win32.])
    - ;;
    - *)
    - is_win32="no"
    - is_not_win32="yes"
    - PLUGIN_LDFLAGS="-avoid-version"
    - ;;
    -esac
    -AM_CONDITIONAL(IS_WIN32, test "x$is_win32" = "xyes")
    -AC_SUBST([PLUGIN_LDFLAGS])
    -
    -dnl Define *_LIBS
    -PURPLE_LIBS="\$(top_builddir)/libpurple/libpurple.la \$(GLIB_LIBS) \$(GPLUGIN_LIBS)"
    -PIDGIN_LIBS="\$(top_builddir)/pidgin/libpidgin.la \$(GTK_LIBS) \$(PURPLE_LIBS) \$(WEBKIT_LIBS)"
    -FINCH_LIBS="\$(top_builddir)/finch/libfinch.la \$(top_builddir)/finch/libgnt/libgnt.la \$(PURPLE_LIBS)"
    -AC_SUBST(PURPLE_LIBS)
    -AC_SUBST(PIDGIN_LIBS)
    -AC_SUBST(FINCH_LIBS)
    -
    -dnl Checks for header files.
    -AC_HEADER_SYS_WAIT
    -AC_CHECK_HEADERS(fcntl.h unistd.h stdint.h)
    -
    -dnl Checks for typedefs, structures, and compiler characteristics.
    -AC_CHECK_SIZEOF(time_t, ,[
    -#include <stdio.h>
    -#include <time.h>])
    -
    -AC_C_BIGENDIAN
    -
    -AC_ARG_WITH(win32-dirs, [AS_HELP_STRING([--with-win32-dirs=<classic|fhs>],
    - [use win32 classic (Program Files-like) or FHS (unix-like) directory structure (default: classic)])], [
    - if test "x$withval" != "xclassic" -a "x$withval" != "xfhs" ; then
    - AC_MSG_ERROR([Unsupported win32-dirs option. Please choose "classic" or "fhs".])
    - fi
    - with_win32_dirs="$withval"
    - ], with_win32_dirs="classic")
    -if test "x$is_win32" = "xyes" -a "x$with_win32_dirs" = "xfhs" ; then
    - AC_DEFINE(USE_WIN32_FHS, 1, [Define to 1, to use FHS on win32.])
    -fi
    -
    -dnl Check for directories
    -if test "x$is_win32" = "xyes" ; then
    - if test "x$with_win32_dirs" = "xfhs" ; then
    - AS_AC_EXPAND(win32_fhs_bindir, "$bindir")
    - AC_DEFINE_UNQUOTED([WIN32_FHS_BINDIR], ["$win32_fhs_bindir"],
    - [bindir, as defined by configure])
    - AS_AC_EXPAND(win32_fhs_libdir, "$libdir")
    - AC_DEFINE_UNQUOTED([WIN32_FHS_LIBDIR], ["$win32_fhs_libdir"],
    - [libdir, as defined by configure])
    - AS_AC_EXPAND(win32_fhs_datadir, "$datadir")
    - AC_DEFINE_UNQUOTED([WIN32_FHS_DATADIR], ["$win32_fhs_datadir"],
    - [datadir, as defined by configure])
    - AS_AC_EXPAND(win32_fhs_sysconfdir, "$sysconfdir")
    - AC_DEFINE_UNQUOTED([WIN32_FHS_SYSCONFDIR], ["$win32_fhs_sysconfdir"],
    - [sysconfdir, as defined by configure])
    - AS_AC_EXPAND(win32_fhs_localedir, "$localedir")
    - AC_DEFINE_UNQUOTED([WIN32_FHS_LOCALEDIR], ["$win32_fhs_localedir"],
    - [localedir, as defined by configure])
    -
    - purple_libdir="wpurple_lib_dir(\"purple-$PURPLE_MAJOR_VERSION\")"
    - pidgin_libdir="wpurple_lib_dir(\"pidgin-$PURPLE_MAJOR_VERSION\")"
    - finch_libdir="wpurple_lib_dir(\"finch-$PURPLE_MAJOR_VERSION\")"
    - else
    - purple_libdir="wpurple_lib_dir(NULL)"
    - pidgin_libdir="wpurple_lib_dir(NULL)"
    - finch_libdir="wpurple_lib_dir(NULL)"
    - fi
    -
    - purple_datadir="wpurple_data_dir()"
    - purple_sysconfdir="wpurple_sysconf_dir()"
    - purple_localedir="wpurple_locale_dir()"
    -else
    - AS_AC_EXPAND(purple_datadir, "$datadir")
    - purple_datadir="\"$purple_datadir\""
    - AS_AC_EXPAND(purple_sysconfdir, "$sysconfdir")
    - purple_sysconfdir="\"$purple_sysconfdir\""
    - AS_AC_EXPAND(purple_localedir, "$localedir")
    - purple_localedir="\"$purple_localedir\""
    -
    - AS_AC_EXPAND(common_libdir, "$libdir")
    - purple_libdir="\"$common_libdir/purple-$PURPLE_MAJOR_VERSION\""
    - pidgin_libdir="\"$common_libdir/pidgin-$PURPLE_MAJOR_VERSION\""
    - finch_libdir="\"$common_libdir/finch-$PURPLE_MAJOR_VERSION\""
    -fi
    -AC_DEFINE_UNQUOTED([PURPLE_DATADIR], [$purple_datadir],
    - [datadir to use, may expand into a function call that returns const char *])
    -AC_DEFINE_UNQUOTED([PURPLE_LIBDIR], [$purple_libdir],
    - [libdir to use for libpurple, may expand into a function call that returns const char *])
    -AC_DEFINE_UNQUOTED([PIDGIN_LIBDIR], [$pidgin_libdir],
    - [libdir to use for Pidgin, may expand into a function call that returns const char *])
    -AC_DEFINE_UNQUOTED([FINCH_LIBDIR], [$finch_libdir],
    - [libdir to use for Finch, may expand into a function call that returns const char *])
    -AC_DEFINE_UNQUOTED([PURPLE_SYSCONFDIR], [$purple_sysconfdir],
    - [sysconfdir to use, may expand into a function call that returns const char *])
    -AC_DEFINE_UNQUOTED([PURPLE_LOCALEDIR], [$purple_localedir],
    - [localedir to use, may expand into a function call that returns const char *])
    -
    -PURPLE_PLUGINDIR="\$(libdir)/purple-$PURPLE_MAJOR_VERSION"
    -AC_SUBST([PURPLE_PLUGINDIR])
    -PIDGIN_PLUGINDIR="\$(libdir)/pidgin-$PURPLE_MAJOR_VERSION"
    -AC_SUBST([PIDGIN_PLUGINDIR])
    -FINCH_PLUGINDIR="\$(libdir)/finch-$PURPLE_MAJOR_VERSION"
    -AC_SUBST([FINCH_PLUGINDIR])
    -
    -dnl Checks for library functions.
    -AC_CHECK_FUNCS(strdup)
    -
    -dnl Check for inet_aton
    -if test "x$is_win32" != "xyes" ; then
    - AC_CHECK_FUNC(inet_aton, , [AC_CHECK_LIB(resolv, inet_aton, ,
    - [AC_MSG_ERROR([inet_aton not found])])])
    -fi
    -AC_CHECK_LIB(nsl, gethostent)
    -if test "x$is_win32" = "xyes" ; then
    - AC_DEFINE(HAVE_GETADDRINFO, 1, [Define to 1 if you have the getaddrinfo function.])
    - AC_DEFINE(HAVE_INET_NTOP, 1, [Define to 1 if you have the `inet_ntop' function.])
    -else
    - AC_CHECK_FUNC(socket, , [AC_CHECK_LIB(socket, socket, ,
    - [AC_MSG_ERROR([socket not found])])])
    - dnl If all goes well, by this point the previous two checks will have
    - dnl pulled in -lsocket and -lnsl if we need them.
    - AC_CHECK_FUNC(getaddrinfo,
    - [AC_DEFINE([HAVE_GETADDRINFO], [1],
    - [Define to 1 if you have the getaddrinfo function.])],
    - [AC_CHECK_LIB(socket, getaddrinfo,
    - [AC_DEFINE([HAVE_GETADDRINFO]) LIBS="-lsocket -lnsl $LIBS"], , -lnsl)])
    - AC_CHECK_FUNCS(inet_ntop)
    -fi
    -AC_CHECK_FUNCS(getifaddrs)
    -dnl Check for socklen_t (in Unix98)
    -AC_MSG_CHECKING(for socklen_t)
    -AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
    - #include <sys/types.h>
    - #ifdef _WIN32
    - # include <ws2tcpip.h>
    - #else
    - # include <sys/socket.h>
    - #endif
    - socklen_t x;
    -]], [[]])], [
    - AC_MSG_RESULT(yes)
    -], [
    - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
    - #include <sys/types.h>
    - #ifdef _WIN32
    - # include <ws2tcpip.h>
    - #else
    - # include <sys/socket.h>
    - #endif
    - int accept(int, struct sockaddr *, size_t *);
    - ]], [[]])], [
    - AC_MSG_RESULT(size_t)
    - AC_DEFINE(socklen_t, size_t, [socklen_t size])
    - ], [
    - AC_MSG_RESULT(int)
    - AC_DEFINE(socklen_t, int, [socklen_t size])
    - ])
    -])
    -
    -dnl Some systems do not have sa_len field for struct sockaddr.
    -AC_CHECK_MEMBER([struct sockaddr.sa_len],
    - [AC_DEFINE([HAVE_STRUCT_SOCKADDR_SA_LEN],[1],
    - [Define if struct sockaddr has an sa_len member])],[:],
    - [
    - #ifdef _WIN32
    - # include <ws2tcpip.h>
    - #else
    - # include <sys/socket.h>
    - #endif
    - ])
    -
    -dnl Check for v6-only sockets
    -AC_CHECK_DECL([IPV6_V6ONLY],
    - [AC_DEFINE([HAVE_IPV6_V6ONLY],[1],
    - [Define if the IPV6_V6ONLY setsockopt option exists])],
    - [], [
    - #ifdef _WIN32
    - # include <ws2tcpip.h>
    - #else
    - # include <netinet/in.h>
    - #endif
    - ])
    -
    -dnl to prevent the g_stat()/g_unlink() crash,
    -dnl (09:50:07) Robot101: LSchiere2: it's easy. +LC_SYS_LARGEFILE somewhere in configure.ac
    -AC_SYS_LARGEFILE
    -
    -dnl FreeBSD doesn't have libdl, dlopen is provided by libc
    -AC_CHECK_FUNC(dlopen, LIBDL="", [AC_CHECK_LIB(dl, dlopen, LIBDL="-ldl")])
    -
    -dnl Windows and Haiku do not use libm for the math functions, they are part
    -dnl of the C library
    -AC_SEARCH_LIBS([ceil], [m], [], [
    - AC_MSG_ERROR([unable to find the ceil() function])
    -])
    -
    -AC_MSG_CHECKING([for fileno()])
    -AC_RUN_IFELSE([AC_LANG_SOURCE([[
    -#include <stdio.h>
    -
    -int main(int argc, char *argv[])
    -{
    - int fd;
    -
    - fd = fileno(stdout);
    -
    - return !(fd > 0);
    -}
    -]])], [
    - AC_MSG_RESULT(yes)
    - AC_DEFINE([HAVE_FILENO], [1],
    - [Define to 1 if your stdio has int fileno(FILE *).])
    -], [
    - AC_MSG_RESULT(no)
    -], [
    - # Fallback for Cross Compiling...
    - # This will enable the compatibility code.
    - AC_MSG_RESULT(no)
    -])
    -
    -AC_MSG_CHECKING([for the %z format string in strftime()])
    -AC_RUN_IFELSE([AC_LANG_SOURCE([[
    -#include <time.h>
    -#include <stdio.h>
    -
    -int main()
    -{
    - char buf[64];
    - time_t t = time(NULL);
    -
    - if (strftime(buf, sizeof(buf), "%z", localtime(&t)) != 5)
    - return 1;
    -
    - fprintf(stderr, "strftime(\"%%z\") yields: \"%s\"\n", buf);
    -
    - return !((buf[0] == '-' || buf[0] == '+') &&
    - (buf[1] >= '0' && buf[1] <= '9') &&
    - (buf[2] >= '0' && buf[2] <= '9') &&
    - (buf[3] >= '0' && buf[3] <= '9') &&
    - (buf[4] >= '0' && buf[4] <= '9')
    - );
    -}
    -]])], [
    - AC_MSG_RESULT(yes)
    - AC_DEFINE([HAVE_STRFTIME_Z_FORMAT], [1],
    - [Define to 1 if you have a strftime() that supports the %z format string.])
    -], [
    - AC_MSG_RESULT(no)
    -], [
    - # Fallback for Cross Compiling...
    - # This will enable the compatibility code.
    - AC_MSG_RESULT(no)
    -])
    -
    -# before gettexting, in case iconv matters
    -case "$host_os" in
    -darwin*)
    - AC_CHECK_HEADER(CoreFoundation/CoreFoundation.h, [
    - AC_CHECK_HEADER(IOKit/IOKitLib.h, [
    - AC_DEFINE(HAVE_IOKIT, 1, [Define if we have IOKit])
    - LIBS="$LIBS -framework IOKit -framework CoreFoundation"
    - ], [])
    - ], [])
    -
    - AC_MSG_CHECKING([for fink])
    - if test -d /sw; then
    - AC_MSG_RESULT([found, adding /sw to search paths])
    - CPPFLAGS="$CPPFLAGS -I/sw/include"
    - LDFLAGS="$LDFLAGS -L/sw/lib"
    - else
    - AC_MSG_RESULT([not found])
    - fi
    - ;;
    -*)
    - ;;
    -esac
    -
    -dnl #######################################################################
    -dnl # Disable creation and installation of translation files
    -dnl #######################################################################
    -AC_ARG_ENABLE(nls, AS_HELP_STRING([--disable-nls], [disable installation of translation files]), enable_i18n="$enableval", enable_i18n=yes)
    -
    -if test x$enable_i18n = xyes; then
    - IT_PROG_INTLTOOL
    - GETTEXT_PACKAGE=pidgin
    - AC_SUBST(GETTEXT_PACKAGE)
    -
    - ALL_LINGUAS="af am ar as ast az be@latin bg bn_IN bn br brx bs ca ca@valencia cs da de dz el en_AU en_CA en_GB eo es_AR es et eu fa fi fr ga gl gu he hi hr hu id it ja ka kk km kn ko ks ku_IQ ku lt lv mai mhr mk ml mn mr ms_MY my_MM nb ne nl nn oc or pa pl ps pt_BR pt ro ru sd si sk sl sq sr@latin sr sv sw ta te th tr tt uk ur uz vi xh zh_CN zh_HK zh_TW"
    - AM_GLIB_GNU_GETTEXT
    -
    - dnl If we don't have msgfmt, then po/ is going to fail -- ensure that
    - dnl AM_GLIB_GNU_GETTEXT found it.
    -
    - if test x$MSGFMT = xno -o x$MSGFMT$GMSGFMT$INTLTOOL_MSGFMT = x
    - then
    - AC_MSG_ERROR([
    -
    -The msgfmt command is required to build libpurple. If it is installed
    -on your system, ensure that it is in your path. If it is not, install
    -GNU gettext to continue.
    -
    -If you have msgfmt installed, but for some reason this error message
    -is still displayed, you have encountered what appears to be a bug in
    -third-party configure macros. Try setting the MSGFMT environment
    -variable to the absolute path to your msgfmt binary and trying
    -configure again, like this:
    -
    -MSGFMT=/path/to/msgfmt ./configure ...
    - ])
    - fi
    -fi #enable_i18n
    -
    -AM_CONDITIONAL(INSTALL_I18N, test "x$enable_i18n" = "xyes")
    -
    -dnl #######################################################################
    -dnl # Check for GLib 2.40 (required)
    -dnl #######################################################################
    -PKG_CHECK_MODULES(GLIB, [glib-2.0 >= 2.40.0 gio-2.0 gobject-2.0 gthread-2.0], , [
    - AC_MSG_RESULT(no)
    - AC_MSG_ERROR([
    -
    -You must have GLib 2.40.0 or newer development headers installed to build.
    -
    -If you have these installed already you may need to install pkg-config so
    -I can find them.
    -])])
    -AC_SUBST(GLIB_CFLAGS)
    -AC_SUBST(GLIB_LIBS)
    -
    -GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0`
    -AC_SUBST(GLIB_GENMARSHAL)
    -
    -GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
    -AC_SUBST(GLIB_MKENUMS)
    -
    -AC_PATH_PROG(GLIB_COMPILE_RESOURCES, [glib-compile-resources])
    -
    -AC_PATH_PROG(GTESTER, gtester)
    -GLIB_TESTS
    -
    -AC_ARG_WITH([extraversion],
    - AS_HELP_STRING([--with-extraversion=STRING],
    - [extra version number to be displayed in Help->About and --help (for packagers)]),
    - EXTRA_VERSION=$withval)
    -
    -if test x"$EXTRA_VERSION" != "x" ; then
    - AC_DEFINE_UNQUOTED(DISPLAY_VERSION, "$VERSION-$EXTRA_VERSION", [display version info])
    -else
    - AC_DEFINE_UNQUOTED(DISPLAY_VERSION, "$VERSION", [display version info])
    -fi
    -
    -AC_ARG_ENABLE(missing-dependencies, [AS_HELP_STRING([--disable-missing-dependencies],
    - [skip missing dependencies instead of aborting configure])],
    - force_deps="$enableval", force_deps="yes")
    -
    -AC_ARG_WITH(x, [],
    - with_x="$withval", with_x="$is_not_win32")
    -AC_ARG_ENABLE(gtkui, [AS_HELP_STRING([--disable-gtkui],
    - [compile without GTK+ user interface])],
    - enable_gtkui="$enableval", enable_gtkui="yes")
    -AC_ARG_ENABLE(consoleui, [AS_HELP_STRING([--disable-consoleui],
    - [compile without console user interface])],
    - [enable_consoleui=$enableval force_finch=$enableval], [enable_consoleui=yes force_finch=no])
    -
    -dnl #######################################################################
    -dnl # Check for GTK+ 2.18 and other things used by the GTK UI
    -dnl #######################################################################
    -AC_ARG_ENABLE(enchant,
    - [AS_HELP_STRING([--disable-enchant],
    - [compile without Enchant spell checking support])],
    - enable_enchant="$enableval", enable_enchant="yes")
    -AC_ARG_ENABLE(gevolution,
    - [AS_HELP_STRING([--enable-gevolution],
    - [compile with the Evolution plugin])],
    - enable_gevolution="$enableval", enable_gevolution="no")
    -AC_ARG_ENABLE(cap,
    - [AS_HELP_STRING([--enable-cap],
    - [compile with Contact Availability Prediction plugin])],
    - enable_cap="$enableval", enable_cap="no")
    -AC_ARG_ENABLE(gestures,
    - [AS_HELP_STRING([--disable-gestures],
    - [compile without the gestures plugin])],
    - enable_gestures="$enableval", enable_gestures="yes")
    -AC_ARG_ENABLE(gcr,
    - [AS_HELP_STRING([--enable-gcr],
    - [compile with GCR certificate widgets])],
    - enable_gcr="$enableval", enable_gcr="no")
    -
    -AC_PATH_XTRA
    -# We can't assume that $x_libraries will be set, because autoconf does not
    -# set it in the case when the X libraries are in a standard place.
    -# Ditto for $x_includes
    -if test X"$x_libraries" = X"" || test X"$x_libraries" = XNONE; then
    - x_libpath_add=
    -else
    - x_libpath_add="-L$x_libraries"
    -fi
    -if test X"$x_includes" = X"" || test X"$x_includes" = XNONE; then
    - x_incpath_add=
    -else
    - x_incpath_add="-I$x_includes"
    -fi
    -
    -dnl #######################################################################
    -dnl Check Pidgin dependencies
    -dnl #######################################################################
    -if test "x$enable_gtkui" = "xyes" ; then
    - PKG_CHECK_MODULES(GTK, [gtk+-3.0 >= 3.4.2], , [
    - AC_MSG_RESULT(no)
    - AC_MSG_ERROR([
    -You must have GTK+ 3.4.2 or newer development headers installed to compile
    -Pidgin. If you want to build only Finch then specify --disable-gtkui when
    -running configure.
    -])])
    - AC_SUBST(GTK_CFLAGS)
    - AC_SUBST(GTK_LIBS)
    -
    - dnl We only really need Pango >= 1.4 for decent RTL support
    - PKG_CHECK_MODULES(PANGO, [pango >= 1.4.0],
    - AC_DEFINE(HAVE_PANGO14, 1, [Define if we have Pango 1.4 or newer.]),:)
    -
    - WEBKIT_VERSION=1.3.7
    - PKG_CHECK_MODULES(WEBKIT, ["webkitgtk-3.0" >= $WEBKIT_VERSION], , [
    - AC_MSG_RESULT(no)
    - AC_MSG_ERROR([
    -You must have WebKit for GTK+3 $WEBKIT_VERSION or newer development headers
    -installed to compile Pidgin. If you want to build only Finch then specify
    ---disable-gtkui when running configure.
    -])])
    - AC_SUBST(WEBKIT_CFLAGS)
    - AC_SUBST(WEBKIT_LIBS)
    -
    - dnl #######################################################################
    - dnl # Check if we should compile with enchant support
    - dnl #######################################################################
    - dnl We need enchant for spell checking dictionary enumeration,
    - dnl because webkit1 doesn't have this.
    - use_enchant=no
    - if test "x$enable_enchant" = "xyes" ; then
    - use_enchant=yes
    - PKG_CHECK_MODULES(ENCHANT, enchant, , [
    - AC_MSG_RESULT(no)
    - use_enchant=no
    - ])
    - if test "x$force_deps" = "xyes" -a "x$use_enchant" = "xno"; then
    - AC_MSG_ERROR([
    -Enchant development headers not found.
    -Use --disable-enchant if you do not need it.
    -])
    - fi
    - if test "x$use_enchant" = "xyes" ; then
    - AC_DEFINE(USE_ENCHANT, 1, [Define if we're using enchant])
    - AC_SUBST(ENCHANT_CFLAGS)
    - AC_SUBST(ENCHANT_LIBS)
    - fi
    - fi
    -
    - dnl #######################################################################
    - dnl # Check if we should compile with X support
    - dnl #######################################################################
    - if test "x$with_x" = "xyes" ; then
    - PKG_CHECK_MODULES(X11, x11,
    - [AC_DEFINE(HAVE_X11, 1, [Define to 1 if you have X11])],
    - [AC_MSG_RESULT(no)
    - if test "x$x_incpath_add" != "x" -a "x$x_libpath_add" != "x"; then
    - X11_LIBS="$x_libpath_add"
    - X11_CFLAGS="$x_incpath_add"
    - else
    - with_x="no"
    - if test "x$force_deps" = "xyes" ; then
    - AC_MSG_ERROR([
    -X11 development headers not found.
    -Use --without-x if you do not need X11 support.
    -])
    - fi
    - fi
    - ])
    - AC_SUBST(X11_LIBS)
    - AC_SUBST(X11_CFLAGS)
    - else
    - enable_gestures=no
    - fi
    -
    - dnl #######################################################################
    - dnl # Check for X11 to allow the gestures plugin
    - dnl #######################################################################
    - if test "x$enable_gestures" = "xyes"; then
    - if test "x$with_x" = "xno" ; then
    - enable_gestures=no
    - fi
    - fi
    -
    - dnl #######################################################################
    - dnl # Check for stuff needed by the Evolution integration plugin.
    - dnl #######################################################################
    - if test "x$enable_gevolution" = "xyes"; then
    - evo_deps="libebook-1.2 libedata-book-1.2 evolution-data-server-1.2 >= 3.6"
    - PKG_CHECK_MODULES(EVOLUTION_ADDRESSBOOK, $evo_deps, , [
    - enable_gevolution="no"
    - ])
    - if test "x$enable_gevolution" = "xyes"; then
    - AC_DEFINE(HAVE_EVOLUTION_ADDRESSBOOK, 1, [Define if we're using evolution addressbook.])
    - AC_SUBST(EVOLUTION_ADDRESSBOOK_CFLAGS)
    - AC_SUBST(EVOLUTION_ADDRESSBOOK_LIBS)
    - else
    - if test "x$force_deps" = "xyes" ; then
    - AC_MSG_ERROR([
    -Evolution development headers not found (libebook, libedata-book, evolution-data-server >= 3.6).
    -Use --disable-gevolution if you do not need it.
    -])
    - fi
    - fi
    - fi
    -
    - dnl #######################################################################
    - dnl # Check for libsqlite3 (for the Contact Availability Prediction plugin)
    - dnl #######################################################################
    - if test "x$enable_cap" = "xyes"; then
    - PKG_CHECK_MODULES(SQLITE3, sqlite3 >= 3.3,,[
    - AC_MSG_RESULT(no)
    - enable_cap="no"
    - if test "x$force_deps" = "xyes" ; then
    - AC_MSG_ERROR([
    -sqlite3 development headers not found.
    -Use --disable-cap if you do not need the Contact Availability Prediction plugin.
    -])
    - fi])
    - fi
    -
    - dnl #######################################################################
    - dnl # Check for GCR for its certificate widgets
    - dnl #######################################################################
    - if test "x$enable_gcr" = "xyes"; then
    - PKG_CHECK_MODULES(GCR, gcr-3, [
    - AC_DEFINE(ENABLE_GCR, 1, [Define to 1 if GCR is found.])], [
    - AC_MSG_RESULT(no)
    - enable_gcr="no"
    - if test "x$force_deps" = "xyes" ; then
    - AC_MSG_ERROR([
    -GCR for GTK+3 development headers not found.
    -Use --disable-gcr if you do not need GCR certificate widgets.
    -])
    - fi])
    - fi
    -
    -
    -else # GTK
    - enable_gcr=no
    - enable_cap=no
    - enable_gevolution=no
    -fi # GTK
    -
    -AM_CONDITIONAL(ENABLE_GTK, test "x$enable_gtkui" = "xyes")
    -AM_CONDITIONAL(BUILD_GEVOLUTION, test "x$enable_gevolution" = "xyes")
    -AM_CONDITIONAL(ENABLE_CAP, test "x$enable_cap" = "xyes")
    -AM_CONDITIONAL(ENABLE_GESTURES, test "x$enable_gestures" = "xyes")
    -AM_CONDITIONAL(ENABLE_GCR, test "x$enable_gcr" = "xyes")
    -
    -
    -dnl #######################################################################
    -dnl # Check for ncurses and other things used by the console UI
    -dnl #######################################################################
    -GNT_LIBS=""
    -GNT_CFLAGS=""
    -AC_ARG_WITH(ncurses-headers, [AS_HELP_STRING([--with-ncurses-headers=DIR],
    - [compile finch against the ncurses includes in DIR])],
    - [ac_ncurses_includes="$withval"], [ac_ncurses_includes=""])
    -if test "x$enable_consoleui" = "xyes"; then
    - AC_CHECK_LIB(ncursesw, initscr, [GNT_LIBS="-lncursesw"], [enable_consoleui=no])
    - AC_CHECK_LIB(panelw, update_panels, [GNT_LIBS="$GNT_LIBS -lpanelw"],
    - [enable_consoleui=no], [$GNT_LIBS])
    -
    - if test "x$is_win32" = "xyes" ; then
    - ncurses_sys_prefix="/usr/$host/sys-root/mingw"
    - else
    - ncurses_sys_prefix="/usr"
    - fi
    -
    - ncurses_sys_dirs="$ncurses_sys_prefix/include/ncursesw $ncurses_sys_prefix/include"
    -
    - if test "x$enable_consoleui" = "xyes"; then
    - dnl # Some distros put the headers in ncursesw/, some don't
    - found_ncurses_h=no
    - for location in $ac_ncurses_includes $NCURSES_HEADERS $ncurses_sys_dirs
    - do
    - f="$location/ncurses.h"
    - orig_CFLAGS="$CFLAGS"
    - orig_CPPFLAGS="$CPPFLAGS"
    - CFLAGS="$CFLAGS -I$location"
    - CPPFLAGS="$CPPFLAGS -I$location"
    - AC_CHECK_HEADER($f,[
    - AC_MSG_CHECKING([if $f supports wide characters])
    - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
    - #define _XOPEN_SOURCE_EXTENDED
    - #include <$f>
    - ]], [[
    - #ifndef get_wch
    - # error get_wch not found!
    - #endif
    - ]])], [
    - dir=$location
    - if test x"$dir" != x"." ; then
    - GNT_CFLAGS="-I$dir/"
    - else
    - GNT_CFLAGS=""
    - fi
    -
    - found_ncurses_h=yes
    - CFLAGS="$orig_CFLAGS"
    - CPPFLAGS="$orig_CPPFLAGS"
    - AC_MSG_RESULT([yes])
    - break
    - ], [
    - CFLAGS="$orig_CFLAGS"
    - CPPFLAGS="$orig_CPPFLAGS"
    - AC_MSG_RESULT([no])
    - ])
    - ])
    - done
    -
    - if test x"$found_ncurses_h" = x"no" ; then
    - GNT_LIBS=""
    - GNT_CFLAGS=""
    - enable_consoleui=no
    - fi
    - else
    - # ncursesw was not found. Look for plain old ncurses
    - enable_consoleui=yes
    - AC_CHECK_LIB(ncurses, initscr, [GNT_LIBS="-lncurses"], [enable_consoleui=no])
    - AC_CHECK_LIB(panel, update_panels, [GNT_LIBS="$GNT_LIBS -lpanel"],
    - [enable_consoleui=no], [$GNT_LIBS])
    - AC_DEFINE(NO_WIDECHAR, 1, [Define to 1 if you don't have wide-character support.])
    - if test x"$ac_ncurses_includes" != "x"; then
    - GNT_CFLAGS="-I$ac_ncurses_includes"
    - else
    - if test x"$NCURSES_HEADERS" != "x"; then
    - GNT_CFLAGS="-I$NCURSES_HEADERS"
    - fi
    - fi
    - fi
    -fi
    -
    -if test "x$force_finch" = "xyes" -a "x$enable_consoleui" != "xyes"; then
    - AC_MSG_ERROR([
    -
    -Finch will not be built. You need to install ncursesw (or ncurses) and its development headers.
    -
    -])
    -fi
    -
    -AC_SUBST(GNT_LIBS)
    -AC_SUBST(GNT_CFLAGS)
    -AM_CONDITIONAL(ENABLE_GNT, test "x$enable_consoleui" = "xyes")
    -
    -#AC_CHECK_FUNC(wcwidth, [AC_DEFINE([HAVE_WCWIDTH], [1], [Define to 1 if you have wcwidth function.])])
    -
    -dnl #######################################################################
    -dnl # Check for LibXML2 (required)
    -dnl #######################################################################
    -PKG_CHECK_MODULES(LIBXML, [libxml-2.0 >= 2.6.0], , [
    - AC_MSG_RESULT(no)
    - AC_MSG_ERROR([
    -You must have libxml2 >= 2.6.0 development headers installed to build.
    -])])
    -PKG_CHECK_EXISTS([libxml-2.0 >= 2.6.18], , [
    - AC_MSG_WARN([
    -Versions of libxml2 < 2.6.18 may contain bugs that could cause XMPP messages to be discarded.
    -])])
    -
    -AC_SUBST(LIBXML_CFLAGS)
    -AC_SUBST(LIBXML_LIBS)
    -
    -dnl #######################################################################
    -dnl # Check for JSON-GLib (required)
    -dnl #######################################################################
    -
    -PKG_CHECK_MODULES([JSON], [json-glib-1.0 >= 0.14.0], , [
    - AC_MSG_RESULT(no)
    - AC_MSG_ERROR([
    -You must have JSON-GLib >= 0.14.0 development headers installed to build.
    -])])
    -
    -AC_SUBST(JSON_CFLAGS)
    -AC_SUBST(JSON_LIBS)
    -
    -dnl #######################################################################
    -dnl # Check for GStreamer
    -dnl #######################################################################
    -AC_ARG_ENABLE(gstreamer,
    - [AS_HELP_STRING([--disable-gstreamer], [compile without GStreamer audio support])],
    - enable_gst="$enableval", enable_gst="yes")
    -
    -if test x"$enable_gst" != "xno"; then
    - PKG_CHECK_MODULES(GSTREAMER, [gstreamer-1.0], [
    - AC_DEFINE(USE_GSTREAMER, 1, [Use GStreamer for playing sounds])
    - AC_SUBST(GSTREAMER_CFLAGS)
    - AC_SUBST(GSTREAMER_LIBS)
    - ], [
    - AC_MSG_RESULT(no)
    - enable_gst="no"
    - if test "x$force_deps" = "xyes" ; then
    - AC_MSG_ERROR([
    - GStreamer development headers not found.
    - Use --disable-gstreamer if you do not need GStreamer (sound) support.
    - ])
    - fi
    - ])
    -fi
    -
    -dnl #######################################################################
    -dnl # Check for GStreamer Video
    -dnl #######################################################################
    -if test "x$enable_gst" != "xno"; then
    - AC_ARG_ENABLE(gstreamer-video,
    - [AS_HELP_STRING([--disable-gstreamer-video], [compile without GStreamer 1.0 Video Overlay support])],
    - enable_gstvideo="$enableval", enable_gstvideo="yes")
    - if test "x$enable_gstvideo" != "xno"; then
    - PKG_CHECK_MODULES(GSTVIDEO, [gstreamer-video-1.0], [
    - AC_DEFINE(USE_GSTVIDEO, 1, [Use GStreamer Video Overlay support])
    - AC_SUBST(GSTVIDEO_CFLAGS)
    - AC_SUBST(GSTVIDEO_LIBS)
    - ], [
    - enable_gstvideo="no"
    - ])
    - fi
    -else
    - enable_gstvideo="no"
    -fi
    -
    -dnl #######################################################################
    -dnl # Check for Farstream
    -dnl #######################################################################
    -AC_ARG_ENABLE(farstream,
    - [AS_HELP_STRING([--disable-farstream], [compile without farstream support])],
    - enable_farstream="$enableval", enable_farstream="yes")
    -if test "x$enable_farstream" != "xno"; then
    - PKG_CHECK_MODULES(FARSTREAM, [farstream-0.2 >= 0.2.7], [
    - AC_SUBST(FARSTREAM_CFLAGS)
    - AC_SUBST(FARSTREAM_LIBS)
    - ], [
    - enable_farstream="no"
    - ])
    -fi
    -
    -dnl #######################################################################
    -dnl # Check for Voice and Video support
    -dnl #######################################################################
    -AC_ARG_ENABLE(vv,
    - [AS_HELP_STRING([--disable-vv], [compile without voice and video support])],
    - enable_vv="$enableval", enable_vv="yes")
    -if test "x$enable_vv" != "xno"; then
    - if test "x$enable_gst" != "xno" -a "x$enable_gstvideo" != "xno" -a "x$enable_farstream" != "xno"; then
    - AC_DEFINE(USE_VV, 1, [Use voice and video])
    - else
    - enable_vv="no"
    - if test "x$force_deps" = "xyes"; then
    - AC_MSG_ERROR([
    -Dependencies for voice/video were not met.
    -Install the necessary gstreamer and farstream packages first.
    -Or use --disable-vv if you do not need voice/video support.
    - ])
    - fi
    - fi
    -fi
    -AM_CONDITIONAL(USE_VV, test "x$enable_vv" != "xno")
    -
    -dnl #######################################################################
    -dnl # Check for Raw data streams support in Farstream
    -dnl #######################################################################
    -if test "x$enable_vv" != "xno"; then
    - PKG_CHECK_MODULES(GSTAPP, [gstreamer-app-1.0], [
    - AC_DEFINE(USE_GSTAPP, 1, [Use GStreamer Video Overlay support])
    - AC_SUBST(GSTAPP_CFLAGS)
    - AC_SUBST(GSTAPP_LIBS)
    - AC_DEFINE(HAVE_MEDIA_APPLICATION, 1, [Define if we have support for application media type.])
    - ] , )
    -fi
    -
    -dnl #######################################################################
    -dnl # Check for Internationalized Domain Name support
    -dnl #######################################################################
    -
    -AC_ARG_ENABLE(idn,
    - [AS_HELP_STRING([--disable-idn], [compile without IDN support])],
    - [enable_idn="$enableval" force_idn=$enableval], [enable_idn="yes" force_idn=no])
    -if test "x$enable_idn" != "xno"; then
    - PKG_CHECK_MODULES(IDN, libidn >= 0.0.0, [
    - AC_DEFINE(USE_IDN, 1, [Use GNU Libidn for stringprep and IDN])
    - AC_SUBST(IDN_CFLAGS)
    - AC_SUBST(IDN_LIBS)
    - ], [
    - AC_MSG_RESULT(no)
    - enable_idn="no"
    - if test "x$force_deps" = "xyes" ; then
    - AC_MSG_ERROR([
    -GNU Libidn development headers not found.
    -Use --disable-idn if you do not need it.
    -])
    - fi
    - ])
    -fi
    -
    -dnl #######################################################################
    -dnl # Check for Meanwhile headers (for Sametime)
    -dnl #######################################################################
    -AC_ARG_ENABLE(meanwhile,
    - [AS_HELP_STRING([--disable-meanwhile],
    - [compile without meanwhile (required for Sametime support)])],
    - enable_meanwhile="$enableval", enable_meanwhile="yes")
    -if test "x$enable_meanwhile" = "xyes"; then
    - PKG_CHECK_MODULES(MEANWHILE, [meanwhile >= 1.0.0 meanwhile < 2.0.0], [
    - have_meanwhile="yes"
    - ], [
    - have_meanwhile="no"
    - if test "x$force_deps" = "xyes" ; then
    - AC_MSG_ERROR([
    -Meanwhile development headers not found.
    -Use --disable-meanwhile if you do not need meanwhile (Sametime) support.
    -])
    - fi])
    -fi
    -AC_SUBST(MEANWHILE_CFLAGS)
    -AC_SUBST(MEANWHILE_LIBS)
    -
    -dnl #######################################################################
    -dnl # Check for Native Avahi headers (for Bonjour)
    -dnl #######################################################################
    -AC_ARG_ENABLE(avahi,
    - [AS_HELP_STRING([--disable-avahi],
    - [compile without avahi (required for Bonjour support)])],
    - enable_avahi="$enableval", enable_avahi="yes")
    -
    -if test "x$enable_avahi" = "xyes" -a "x$is_win32" = "xyes" ; then
    - avahiincludes="yes"
    - avahilibs="yes"
    -elif test "x$enable_avahi" = "xyes"; then
    - AC_ARG_WITH(avahi-client-includes, [AS_HELP_STRING([--with-avahi-client-includes=DIR], [compile the Bonjour plugin against the Avahi Client includes in DIR])], [ac_avahi_client_includes="$withval"], [ac_avahi_client_includes="no"])
    - AC_ARG_WITH(avahi-client-libs, [AS_HELP_STRING([--with-avahi-client-libs=DIR], [compile the Bonjour plugin against the Avahi Client libs in DIR])], [ac_avahi_client_libs="$withval"], [ac_avahi_client_libs="no"])
    - AVAHI_CFLAGS=""
    - AVAHI_LIBS=""
    -
    - dnl Attempt to autodetect Avahi
    - PKG_CHECK_MODULES(AVAHI, [avahi-client avahi-glib], [
    - avahiincludes="yes"
    - avahilibs="yes"
    - ], [
    - avahiincludes="no"
    - avahilibs="no"
    - ])
    -
    - dnl Override AVAHI_CFLAGS if the user specified an include dir
    - if test "$ac_avahi_client_includes" != "no"; then
    - AVAHI_CFLAGS="-I$ac_avahi_client_includes"
    - fi
    - CPPFLAGS_save="$CPPFLAGS"
    - CPPFLAGS="$CPPFLAGS $AVAHI_CFLAGS"
    - AC_CHECK_HEADER(avahi-client/client.h, [avahiincludes=yes], [avahiincludes=no])
    - CPPFLAGS="$CPPFLAGS $AVAHI_CFLAGS $GLIB_CFLAGS"
    - AC_CHECK_HEADER(avahi-glib/glib-malloc.h, [avahiincludes=yes], [avahiincludes=no])
    - CPPFLAGS="$CPPFLAGS_save"
    -
    - dnl Override AVAHI_LIBS if the user specified a libs dir
    - if test "$ac_avahi_client_libs" != "no"; then
    - AVAHI_LIBS="-L$ac_avahi_client_libs -lavahi-common -lavahi-client -lavahi-glib "
    - fi
    - AC_CHECK_LIB(avahi-client, avahi_client_new, [avahilibs=yes], [avahilibs=no], $AVAHI_LIBS)
    -fi
    -
    -if test "x$enable_avahi" = "xyes" -a \( "x$avahiincludes" = "xno" -o "x$avahilibs" = "xno" \); then
    - enable_avahi="no"
    - if test "x$force_deps" = "xyes"; then
    - AC_MSG_ERROR([
    -avahi development headers not found.
    -Use --disable-avahi if you do not need avahi (Bonjour) support.
    -])
    - fi
    -fi
    -AC_SUBST(AVAHI_CFLAGS)
    -AC_SUBST(AVAHI_LIBS)
    -
    -
    -dnl #######################################################################
    -dnl # Check for SILC client includes and libraries
    -dnl #######################################################################
    -AC_ARG_WITH(silc-includes, [AS_HELP_STRING([--with-silc-includes=DIR], [compile the SILC plugin against includes in DIR])], [ac_silc_includes="$withval"], [ac_silc_includes="no"])
    -AC_ARG_WITH(silc-libs, [AS_HELP_STRING([--with-silc-libs=DIR], [compile the SILC plugin against the SILC libs in DIR])], [ac_silc_libs="$withval"], [ac_silc_libs="no"])
    -SILC_CFLAGS=""
    -SILC_LIBS=""
    -have_silc="no"
    -if test -n "$with_silc_includes" || test -n "$with_silc_libs"; then
    - silc_manual_check="yes"
    -else
    - silc_manual_check="no"
    -fi
    -if test "x$silc_manual_check" = "xno"; then
    - PKG_CHECK_MODULES(SILC, [silcclient >= 1.1], [
    - have_silc="yes"
    - silcincludes="yes"
    - silcclient="yes"
    - ], [
    - have_silc="no"
    - ])
    -else
    - if test "$ac_silc_includes" != "no"; then
    - SILC_CFLAGS="-I$ac_silc_includes"
    - fi
    - CPPFLAGS_save="$CPPFLAGS"
    - CPPFLAGS="$CPPFLAGS $SILC_CFLAGS"
    - AC_CHECK_HEADER(silc.h, [silcincludes=yes])
    - CPPFLAGS="$CPPFLAGS_save"
    -
    - if test "$ac_silc_libs" != "no"; then
    - SILC_LIBS="-L$ac_silc_libs"
    - fi
    - SILC_LIBS="$SILC_LIBS -lsilc -lsilcclient -lpthread $LIBDL"
    - AC_CHECK_LIB(silcclient, silc_client_init, [silcclient=yes], , $SILC_LIBS)
    -
    - if test "x$silcincludes" = "xyes" -a "x$silcclient" = "xyes"; then
    - have_silc="yes"
    - fi
    -fi
    -AC_SUBST(SILC_LIBS)
    -AC_SUBST(SILC_CFLAGS)
    -dnl SILC Toolkit >= 1.0.1 has a new MIME API
    -if test "x$silcclient" = "xyes"; then
    - AC_DEFINE(HAVE_SILCMIME_H, 1, [Define if we have silcmime.h])
    -fi
    -
    -dnl #######################################################################
    -dnl # Check for Gadu-Gadu protocol library (libgadu)
    -dnl #######################################################################
    -AC_ARG_ENABLE(libgadu,
    - [AS_HELP_STRING([--disable-libgadu],
    - [compile without libgadu (required for GaduGadu support)])],
    - enable_libgadu="$enableval", enable_libgadu="yes")
    -
    -if test "x$enable_libgadu" = "xyes"; then
    - PKG_CHECK_MODULES(LIBGADU, [libgadu >= 1.12.0], [
    - have_libgadu=yes
    - AC_CHECK_LIB(gadu, gg_is_gpl_compliant, [ ], [
    - LIBGADU_LIBS=""
    - LIBGADU_CFLAGS=""
    - have_libgadu=no
    - if test "x$force_deps" = "xyes" ; then
    - AC_MSG_WARN([
    -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 ./configure
    - ])
    - fi
    - ], [$LIBGADU_LIBS])
    - ], [
    - have_libgadu=no
    - ])
    -
    - if test "x$have_libgadu" != "xyes" -a "x$force_deps" = "xyes" ; then
    - AC_MSG_ERROR([
    -Libgadu development headers not found.
    -Use --disable-libgadu if you do not need GG (GaduGadu) support.
    -])
    - fi
    -fi
    -
    -AC_SUBST(LIBGADU_LIBS)
    -AC_SUBST(LIBGADU_CFLAGS)
    -
    -
    -DYNAMIC_PRPLS=all
    -AC_ARG_WITH(static-prpls, [AS_HELP_STRING([--with-static-prpls], [Link to certain protocols statically])], [STATIC_PRPLS=`echo $withval | $sedpath 's/,/ /g'`], [STATIC_PRPLS=""])
    -if test "x$STATIC_PRPLS" != "x" -a "x$DYNAMIC_PRPLS" = "xall"; then
    - DYNAMIC_PRPLS=""
    -fi
    -
    -if test "x$STATIC_PRPLS" = "xall" ; then
    - STATIC_PRPLS="bonjour facebook gg irc jabber novell oscar sametime silc simple zephyr"
    -fi
    -if test "x$have_meanwhile" != "xyes" ; then
    - STATIC_PRPLS=`echo $STATIC_PRPLS | $sedpath 's/sametime//'`
    -fi
    -if test "x$avahiincludes" != "xyes" -o "x$avahilibs" != "xyes"; then
    - STATIC_PRPLS=`echo $STATIC_PRPLS | $sedpath 's/bonjour//'`
    -fi
    -if test "x$silcincludes" != "xyes" -o "x$silcclient" != "xyes"; then
    - STATIC_PRPLS=`echo $STATIC_PRPLS | $sedpath 's/silc//'`
    -fi
    -if test "x$have_libgadu" != "xyes" ; then
    - STATIC_PRPLS=`echo $STATIC_PRPLS | $sedpath 's/gg//'`
    -fi
    -if test "x$is_win32" = "xyes" ; then
    - STATIC_PRPLS=`echo $STATIC_PRPLS | $sedpath 's/zephyr//'`
    -fi
    -AC_SUBST(STATIC_PRPLS)
    -STATIC_LINK_LIBS=
    -extern_load=
    -load_proto=
    -extern_unload=
    -unload_proto=
    -for i in $STATIC_PRPLS ; do
    - dnl Ugly special case for "libsilcpurple.la":
    - if test "x$i" = "xsilc"; then
    - STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/$i/lib${i}purple.la"
    - else
    - STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/$i/lib$i.la"
    - fi
    - extern_load="$extern_load extern gboolean ${i}_plugin_load();"
    - load_proto="$load_proto ${i}_plugin_load();"
    - extern_unload="$extern_unload extern gboolean ${i}_plugin_unload();"
    - unload_proto="$unload_proto ${i}_plugin_unload();"
    -
    - case $i in
    - bonjour) static_bonjour=yes ;;
    - facebook) static_facebook=yes ;;
    - gg) static_gg=yes ;;
    - irc) static_irc=yes ;;
    - jabber) static_jabber=yes ;;
    - novell) static_novell=yes ;;
    - oscar) static_oscar=yes ;;
    - aim) static_oscar=yes ;;
    - icq) static_oscar=yes ;;
    - sametime) static_sametime=yes ;;
    - silc) static_silc=yes ;;
    - simple) static_simple=yes ;;
    - zephyr) static_zephyr=yes ;;
    - *) echo "Invalid static protocol $i!!" ; exit 1 ;;
    - esac
    -done
    -AM_CONDITIONAL(STATIC_BONJOUR, test "x$static_bonjour" = "xyes")
    -AM_CONDITIONAL(STATIC_FACEBOOK, test "x$static_facebook" = "xyes")
    -AM_CONDITIONAL(STATIC_GG, test "x$static_gg" = "xyes")
    -AM_CONDITIONAL(STATIC_IRC, test "x$static_irc" = "xyes")
    -AM_CONDITIONAL(STATIC_JABBER, test "x$static_jabber" = "xyes")
    -AM_CONDITIONAL(STATIC_NOVELL, test "x$static_novell" = "xyes")
    -AM_CONDITIONAL(STATIC_OSCAR, test "x$static_oscar" = "xyes")
    -AM_CONDITIONAL(STATIC_SAMETIME, test "x$static_sametime" = "xyes" -a "x$have_meanwhile" = "xyes")
    -AM_CONDITIONAL(STATIC_SILC, test "x$static_silc" = "xyes" -a "x$have_silc" = "xyes")
    -AM_CONDITIONAL(STATIC_SIMPLE, test "x$static_simple" = "xyes")
    -AM_CONDITIONAL(STATIC_ZEPHYR, test "x$static_zephyr" = "xyes")
    -AC_SUBST(STATIC_LINK_LIBS)
    -AC_DEFINE_UNQUOTED(STATIC_PROTO_LOAD, $extern_load static void static_proto_load(void) { $load_proto },
    - [Loads protocols from static protocol plugin modules.])
    -AC_DEFINE_UNQUOTED(STATIC_PROTO_UNLOAD, $extern_unload static void static_proto_unload(void) { $unload_proto },
    - [Unloads protocols from static protocol plugin modules.])
    -
    -AC_ARG_WITH(dynamic_prpls, [AS_HELP_STRING([--with-dynamic-prpls], [specify which protocols to build dynamically])], [DYNAMIC_PRPLS=`echo $withval | $sedpath 's/,/ /g'`])
    -if test "x$DYNAMIC_PRPLS" = "xall" ; then
    - DYNAMIC_PRPLS="bonjour facebook gg irc jabber novell oscar sametime silc simple zephyr"
    -fi
    -if test "x$have_meanwhile" != "xyes"; then
    - DYNAMIC_PRPLS=`echo $DYNAMIC_PRPLS | $sedpath 's/sametime//'`
    -fi
    -if test "x$avahiincludes" != "xyes" -o "x$avahilibs" != "xyes"; then
    - DYNAMIC_PRPLS=`echo $DYNAMIC_PRPLS | $sedpath 's/bonjour//'`
    -fi
    -if test "x$silcincludes" != "xyes" -o "x$silcclient" != "xyes"; then
    - DYNAMIC_PRPLS=`echo $DYNAMIC_PRPLS | $sedpath 's/silc//'`
    -fi
    -if test "x$have_libgadu" != "xyes"; then
    - DYNAMIC_PRPLS=`echo $DYNAMIC_PRPLS | $sedpath 's/gg//'`
    -fi
    -if test "x$is_win32" = "xyes" ; then
    - DYNAMIC_PRPLS=`echo $DYNAMIC_PRPLS | $sedpath 's/zephyr//'`
    -fi
    -AC_SUBST(DYNAMIC_PRPLS)
    -for i in $DYNAMIC_PRPLS ; do
    - case $i in
    - bonjour) dynamic_bonjour=yes ;;
    - facebook) dynamic_facebook=yes ;;
    - gg) dynamic_gg=yes ;;
    - irc) dynamic_irc=yes ;;
    - jabber) dynamic_jabber=yes ;;
    - novell) dynamic_novell=yes ;;
    - null) dynamic_null=yes ;;
    - oscar) dynamic_oscar=yes ;;
    - aim) dynamic_oscar=yes ;;
    - icq) dynamic_oscar=yes ;;
    - sametime) dynamic_sametime=yes ;;
    - silc) dynamic_silc=yes ;;
    - simple) dynamic_simple=yes ;;
    - zephyr) dynamic_zephyr=yes ;;
    - *) echo "Invalid dynamic protocol $i!!" ; exit 1 ;;
    - esac
    -done
    -
    -AC_ARG_ENABLE(plugins, [AS_HELP_STRING([--disable-plugins], [compile without plugin support])], , enable_plugins=yes)
    -AC_ARG_WITH(krb4, [AS_HELP_STRING([--with-krb4=PREFIX], [compile Zephyr plugin with Kerberos 4 support])], kerberos="$withval", kerberos="no")
    -AC_ARG_WITH(zephyr, [AS_HELP_STRING([--with-zephyr=PREFIX], [compile Zephyr plugin against external libzephyr])], zephyr="$withval", zephyr="no")
    -AM_CONDITIONAL(EXTERNAL_LIBZEPHYR, test "x$zephyr" != "xno")
    -
    -AC_CHECK_HEADERS(sys/utsname.h)
    -AC_CHECK_FUNC(uname)
    -
    -AC_ARG_ENABLE(fortify, [AS_HELP_STRING([--disable-fortify], [compile without FORTIFY_SOURCE support])], , enable_fortify=yes)
    -
    -DEBUG_CFLAGS="$DEBUG_CFLAGS -DPURPLE_DISABLE_DEPRECATED -DPIDGIN_DISABLE_DEPRECATED -DFINCH_DISABLE_DEPRECATED -DGNT_DISABLE_DEPRECATED"
    -if test "x$GCC" = "xyes"; then
    - dnl We enable -Wall later.
    - dnl If it's set after the warning CFLAGS in the compiler invocation, it counteracts the -Wno... flags.
    - dnl This leads to warnings we don't want.
    - CFLAGS=`echo $CFLAGS |$sedpath 's/-Wall//'`
    -
    - dnl ENABLE WARNINGS SUPPORTED BY THE VERSION OF GCC IN USE
    - dnl
    - dnl Future Possibilities
    - dnl
    - dnl Consider adding -Wbad-function-cast.
    - dnl This leads to spurious warnings using GPOINTER_TO_INT(), et al. directly on a function call.
    - dnl We'd need an intermediate variable.
    - dnl
    - for newflag in \
    - "-Waggregate-return" \
    - "-Wcast-align" \
    - "-Wdeclaration-after-statement" \
    - "-Wendif-labels" \
    - "-Werror-implicit-function-declaration" \
    - "-Wextra -Wno-unused-parameter" \
    - "-Wno-missing-field-initializers" \
    - "-Wformat-security" \
    - "-Werror=format-security" \
    - "-Winit-self" \
    - "-Wmissing-declarations" \
    - "-Wmissing-noreturn" \
    - "-Wmissing-prototypes" \
    - "-Wpointer-arith" \
    - "-Wfloat-equal" \
    - "-Wundef" \
    - ; do
    - orig_CFLAGS="$CFLAGS"
    - CFLAGS="$CFLAGS $newflag"
    - AC_MSG_CHECKING(for $newflag option to gcc)
    - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [
    - AC_MSG_RESULT(yes)
    - CFLAGS="$orig_CFLAGS"
    - DEBUG_CFLAGS="$DEBUG_CFLAGS $newflag"
    - ], [
    - AC_MSG_RESULT(no)
    - CFLAGS="$orig_CFLAGS"
    - ])
    - done
    -
    - if test "x$enable_fortify" = "xyes"; then
    - AC_MSG_CHECKING(for FORTIFY_SOURCE support)
    - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <features.h>]], [[
    - #if !(__GNUC_PREREQ (4, 1) \
    - || (defined __GNUC_RH_RELEASE__ && __GNUC_PREREQ (4, 0)) \
    - || (defined __GNUC_RH_RELEASE__ && __GNUC_PREREQ (3, 4) \
    - && __GNUC_MINOR__ == 4 \
    - && (__GNUC_PATCHLEVEL__ > 2 \
    - || (__GNUC_PATCHLEVEL__ == 2 && __GNUC_RH_RELEASE__ >= 8))))
    - #error No FORTIFY_SOURCE support
    - #endif
    - return 0;
    - ]])], [
    - AC_MSG_RESULT(yes)
    - DEBUG_CFLAGS="$DEBUG_CFLAGS -Wp,-D_FORTIFY_SOURCE=2"
    - ], [
    - AC_MSG_RESULT(no)
    - ])
    - fi
    -
    - DEBUG_CFLAGS="-Wall $DEBUG_CFLAGS"
    - CFLAGS="-g $CFLAGS"
    -fi
    -DEBUG_CPPFLAGS=`echo "$DEBUG_CFLAGS" | $sedpath 's/-Wdeclaration-after-statement//' | $sedpath 's/-Wmissing-prototypes//' | $sedpath 's/-Waggregate-return//'`
    -
    -if test "x$SUNCC" = "xyes"; then
    - CFLAGS="$CFLAGS -features=extensions"
    -fi
    -AC_SUBST(CFLAGS)
    -
    -AC_PATH_PROG(pidginpath, pidgin)
    -
    -AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
    - #if !defined(__clang__)
    - #error
    - #endif
    -])], have_clang=yes, have_clang=no)
    -
    -AC_ARG_ENABLE(clang-address-sanitizer,
    - [AS_HELP_STRING([--enable-clang-address-sanitizer],
    - [compile with the Clang's address sanitizer enabled])],
    - enable_clang_address_sanitizer="$enableval", enable_clang_address_sanitizer="no")
    -
    -if test "x$enable_clang_address_sanitizer" = "xyes" -a "x$have_clang" = "xno"; then
    - AC_MSG_ERROR([
    -Clang address sanitizer requested, but we don't compile with Clang.
    -Disable the sanitizer or run configure script with CC and CCX set to clang binaries.
    -])
    -fi
    -
    -if test "x$have_clang" = "xyes"; then
    - GLIB_LIBS=`echo $GLIB_LIBS | $sedpath 's/-pthread/-lpthread/'`
    -fi
    -
    -if test "x$enable_clang_address_sanitizer" = "xyes"; then
    - CFLAGS="$CFLAGS -faddress-sanitizer -g -fno-omit-frame-pointer -fno-inline -fno-optimize-sibling-calls"
    -fi
    -
    -
    -AC_ARG_ENABLE(glib-errors-trace, [AS_HELP_STRING([--enable-glib-errors-trace], [print backtraces for glib errors])], enable_glibtrace="$enableval", enable_glibtrace="no")
    -if test "x$enable_glibtrace" = "xyes"; then
    - if test "x$have_clang" = "xyes"; then
    - AC_MSG_ERROR([--enable-glib-errors-trace doesn't work with clang])
    - fi
    - AC_DEFINE(ENABLE_GLIBTRACE, 1, [Define if backtraces should be printed for glib errors.])
    - dnl CFLAGS="$CFLAGS -rdynamic"
    - CFLAGS="$CFLAGS -rdynamic"
    -fi
    -
    -dnl #######################################################################
    -dnl # Check for D-Bus libraries
    -dnl #######################################################################
    -
    -# dbus doesn't compile for win32 at the moment
    -AC_ARG_ENABLE(dbus,
    - [AS_HELP_STRING([--disable-dbus], [disable D-Bus support])], ,
    - enable_dbus="$is_not_win32")
    -
    -if test "x$enable_dbus" = "xyes" ; then
    - AC_CHECK_PROG(enable_dbus, dbus-binding-tool, yes, no)
    -fi
    -
    -if test "x$enable_dbus" = "xyes" ; then
    - PKG_CHECK_MODULES(DBUS, [dbus-1 >= 0.60 dbus-glib-1 >= 0.60], [
    - AC_SUBST(DBUS_CFLAGS)
    - AC_SUBST(DBUS_LIBS)
    - enable_dbus=yes
    - ], [
    - enable_dbus=no
    - if test "x$force_deps" = "xyes" ; then
    - AC_MSG_ERROR([
    -D-Bus development headers not found.
    -Use --disable-dbus if you do not need D-Bus support.
    -])
    - fi])
    -fi
    -
    -dnl #######################################################################
    -dnl # Check for Unity and Messaging Menu
    -dnl # Remove when Ubuntu 16.04 is EOL
    -dnl #######################################################################
    -AC_ARG_ENABLE(unity, [AC_HELP_STRING([--enable-unity],
    - [compile with support for unity integration plugin])], enable_unity="$enableval", enable_unity="no")
    -if test "$enable_unity" = yes; then
    - PKG_CHECK_MODULES(UNITY, [unity >= 6.8 messaging-menu >= 12.10], , [
    - AC_MSG_RESULT(no)
    - AC_MSG_ERROR([
    -You must have libunity9 >= 6.8 and libmessaging-menu >= 12.10 to build the unity integration plugin.
    - ])])
    - USES_MM_CHAT_SECTION="X-MessagingMenu-UsesChatSection=true"
    - AC_SUBST(UNITY_CFLAGS)
    - AC_SUBST(UNITY_LIBS)
    - AC_SUBST(USES_MM_CHAT_SECTION)
    -else
    - enable_unity=no
    -fi
    -AM_CONDITIONAL(ENABLE_UNITY, [test "x$enable_unity" = "xyes"])
    -
    -dnl #######################################################################
    -dnl # Check for Secret Service headers
    -dnl #######################################################################
    -
    -AC_ARG_ENABLE(libsecret,
    - [AC_HELP_STRING([--disable-libsecret], [enable Secret Service support])],
    - enable_secret_service="$enableval", enable_secret_service="$is_not_win32")
    -
    -if test "x$enable_secret_service" = "xyes" ; then
    - PKG_CHECK_MODULES(SECRETSERVICE, [libsecret-1], [
    - AC_SUBST(SECRETSERVICE_CFLAGS)
    - AC_SUBST(SECRETSERVICE_LIBS)
    - AC_DEFINE(HAVE_SECRETSERVICE, 1, [Define if we have Secret Service.])
    - ], [
    - AC_MSG_RESULT(no)
    - enable_secret_service="no"
    - if test "x$force_deps" = "xyes" ; then
    - AC_MSG_ERROR([
    -Libsecret development headers not found
    -Use --disable-libsecret if you do not need it.
    -])
    - fi
    - ])
    -
    -fi
    -
    -AM_CONDITIONAL(ENABLE_SECRETSERVICE, test "x$enable_secret_service" = "xyes")
    -
    -dnl #######################################################################
    -dnl # Check for GNOME Keyring headers
    -dnl #######################################################################
    -
    -AC_ARG_ENABLE(gnome-keyring,
    - [AC_HELP_STRING([--disable-gnome-keyring], [disable GNOME Keyring support])],
    - enable_gnome_keyring="$enableval", enable_gnome_keyring="$is_not_win32")
    -
    -if test "x$enable_gnome_keyring" = "xyes" ; then
    - PKG_CHECK_MODULES(GNOMEKEYRING, [gnome-keyring-1], [
    - AC_SUBST(GNOMEKEYRING_CFLAGS)
    - AC_SUBST(GNOMEKEYRING_LIBS)
    - AC_DEFINE(HAVE_GNOMEKEYRING, 1, [Define if we have GNOME Keyring.])
    - ], [
    - AC_MSG_RESULT(no)
    - enable_gnome_keyring="no"
    - if test "x$force_deps" = "xyes" ; then
    - AC_MSG_ERROR([
    -GNOME Keyring development headers not found
    -Use --disable-gnome-keyring if you do not need it.
    -])
    - fi
    - ])
    -fi
    -
    -AM_CONDITIONAL(ENABLE_GNOMEKEYRING, test "x$enable_gnome_keyring" = "xyes")
    -
    -dnl #######################################################################
    -dnl # Check for KWallet headers
    -dnl #######################################################################
    -
    -AC_ARG_ENABLE(kwallet,
    - [AC_HELP_STRING([--disable-kwallet], [disable KWallet support])],
    - enable_kwallet="$enableval", enable_kwallet="$is_not_win32")
    -AC_ARG_WITH(kwallet-includes, [AC_HELP_STRING([--with-kwallet-includes=DIR], [compile the KWallet plugin against includes in DIR])], [ac_kwallet_includes="$withval"], [ac_kwallet_includes="no"])
    -AC_ARG_WITH(kwallet-libs, [AC_HELP_STRING([--with-kwallet-libs=DIR], [compile the KWallet plugin against the KWallet libs in DIR])], [ac_kwallet_libs="$withval"], [ac_kwallet_libs="no"])
    -
    -if test "x$enable_kwallet" = "xyes"; then
    - dnl Ensure C++ compiler works
    - AC_CHECK_PROG(CXXTEST, [$CXX], [$CXX])
    - if test "x$CXXTEST" = "x"; then
    - enable_kwallet=no
    - if test "x$force_deps" = "xyes"; then
    - AC_MSG_ERROR([
    -A C++ compiler was not found.
    -Use --disable-kwallet if you do not need KWallet support.
    -])
    - fi
    - fi
    -fi
    -
    -AC_LANG_PUSH([C++])
    -CPPFLAGS_save="$CPPFLAGS"
    -LIBS_save="$LIBS"
    -
    -if test "x$enable_kwallet" = "xyes"; then
    - PKG_CHECK_MODULES(QT4, [QtCore], [
    - AC_SUBST(QT4_CFLAGS)
    - AC_SUBST(QT4_LIBS)
    - ], [
    - AC_MSG_RESULT(no)
    - enable_kwallet=no
    - if test "x$force_deps" = "xyes"; then
    - AC_MSG_ERROR([
    -Qt4 development headers not found.
    -Use --disable-kwallet if you do not need KWallet support.
    -])
    - fi
    - ])
    -fi
    -
    -if test "x$enable_kwallet" = "xyes"; then
    - AC_MSG_CHECKING([for metaobject compiler])
    - MOC=`$PKG_CONFIG --variable=moc_location QtCore`
    - AC_SUBST(MOC)
    - AC_MSG_RESULT([$MOC])
    -
    - KWALLET_CXXFLAGS=""
    - KWALLET_LIBS=""
    - if test -z "$with_kwallet_includes" || test -z "$with_kwallet_libs"; then
    - AC_CHECK_PROG(KDE4_CONFIG, kde4-config, kde4-config, no)
    - if test "x$KDE4_CONFIG" = "xno"; then
    - enable_kwallet=no
    - if test "x$force_deps" = "xyes"; then
    - AC_MSG_ERROR([
    -kde4-config not found. $KDE4_CONFIG
    -Use --disable-kwallet if you do not need KWallet support.
    -Use --with-kwallet-includes and --with-kwallet-libs to set up includes manually.
    -])
    - fi
    - fi
    - fi
    -fi
    -
    -if test "x$enable_kwallet" = "xyes"; then
    - if test "$ac_kwallet_includes" != "no"; then
    - KWALLET_CXXFLAGS="-I$ac_kwallet_includes"
    - elif test "x$KDE4_CONFIG" != "xno"; then
    - KWALLET_CXXFLAGS="$QT4_CFLAGS -I`$KDE4_CONFIG --path include`"
    - fi
    - CPPFLAGS="$CPPFLAGS $KWALLET_CXXFLAGS"
    - AC_CHECK_HEADER([kwallet.h], , [
    - enable_kwallet=no
    - if test "x$force_deps" = "xyes"; then
    - AC_MSG_ERROR([
    -KWallet development headers not found.
    -Use --disable-kwallet if you do not need KWallet support.
    -])
    - fi
    -])
    -fi
    -
    -if test "x$enable_kwallet" = "xyes"; then
    - AC_MSG_CHECKING([for KWallet libraries])
    - if test "$ac_kwallet_libs" != "no"; then
    - KWALLET_LIBS="-L$ac_kwallet_libs -lkdeui"
    - elif test "x$KDE4_CONFIG" != "xno"; then
    - KWALLET_LIBS="-L`$KDE4_CONFIG --install lib`/kde4/devel -lkdeui"
    - else
    - KWALLET_LIBS="-lkdeui"
    - fi
    - KWALLET_LIBS="$KWALLET_LIBS"
    - LIBS="$LIBS $KWALLET_LIBS $QT4_LIBS"
    - AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <kwallet.h>],
    - [KWallet::Wallet::LocalWallet();])], [AC_MSG_RESULT([yes])],
    - [
    - AC_MSG_RESULT(no)
    - enable_kwallet=no
    - if test "x$force_deps" = "xyes"; then
    - AC_MSG_ERROR([
    -KWallet development libraries not found.
    -Use --disable-kwallet if you do not need KWallet support.
    -])
    - fi
    - ])
    -fi
    -
    -CPPFLAGS="$CPPFLAGS_save"
    -LIBS="$LIBS_save"
    -AC_LANG_POP
    -
    -AC_SUBST(KWALLET_CXXFLAGS)
    -AC_SUBST(KWALLET_LIBS)
    -
    -AM_CONDITIONAL(ENABLE_KWALLET, test "x$enable_kwallet" = "xyes")
    -
    -dnl #######################################################################
    -dnl # Check for GPlugin 0.0.17
    -dnl #######################################################################
    -if test "x$enable_plugins" = "xyes" ; then
    - PKG_CHECK_MODULES(GPLUGIN, [gplugin >= 0.0.17 gmodule-2.0], [
    - dnl # GPLUGIN_REQ sets pkg-config requirements in the .pc file
    - GPLUGIN_REQ=[", gplugin"]
    - ], [
    - AC_MSG_RESULT(no)
    - AC_MSG_ERROR([
    - GPlugin 0.0.17 development headers not found, which are required if you wish to
    - enable plugins.
    - Use --disable-plugins if you want to disable plugins.
    - ])])
    - AC_SUBST(GPLUGIN_REQ)
    - AC_SUBST(GPLUGIN_CFLAGS)
    - AC_SUBST(GPLUGIN_LIBS)
    -else
    - enable_introspection=no
    -fi
    -
    -dnl # Check for gobject introspection
    -GOBJECT_INTROSPECTION_CHECK([1.30.0])
    -
    -if test "x$enable_introspection" = "xyes" ; then
    - AC_DEFINE(ENABLE_INTROSPECTION, 1, [Define if GObject introspection is enabled.])
    -fi
    -
    -dnl #######################################################################
    -dnl # Check for Python
    -dnl #######################################################################
    -
    -dnl Python scripts are used to auto-generate about 3000 lines of C
    -dnl and XML code that wraps (part of) the existing API so that
    -dnl it is now accessible through D-Bus.
    -
    -dnl Python is only required if --enable-dbus is used, and only for
    -dnl the build process to generate the code, not for running pidgin.
    -dnl This autogenerated code is system-independent, so in principle we
    -dnl can generate all of it before shipping. But I thought adding
    -dnl auto-generated stuff to the repository is inelegant.
    -dnl Alternatively, these python scripts could be rewritten
    -dnl in C (brrrr ...).
    -
    -AC_ARG_WITH([python],
    - AS_HELP_STRING([--with-python=PATH],
    - [which python interpreter to use for dbus code generation]),
    - PYTHON=$withval)
    -
    -if test "x$enable_dbus" = "xyes" || test "x$enable_consoleui" = "xyes" ; then
    - if test -z "$PYTHON" -a "x$is_win32" = "xyes" ; then
    - dnl there are problems with include files when cross compiling
    - dnl feel free to fix it, if you want
    - PYTHON=no
    - elif test -z "$PYTHON" -o "x$PYTHON" = "xyes"; then
    - AC_PATH_PROG([PYTHON], [python], [no])
    - fi
    -
    - if test x"$PYTHON" = x"no" -a "x$is_win32" != "xyes" ; then
    - AC_MSG_WARN([python interpreter not found in your path])
    - enable_dbus=no
    - fi
    -
    - if test "x$PYTHON" != "xno" ; then
    - if $PYTHON -c "import sys; sys.exit(sys.version[[:3]] >= '2.4')" ; then
    - AC_MSG_WARN([python version >= 2.4 required])
    - enable_dbus=no
    - fi
    - fi
    -fi
    -
    -dnl ###########################################################################
    -dnl # Find the D-Bus services dir.
    -dnl #
    -dnl # This is a 3 step process that
    -dnl #
    -dnl # 1. checks if --with-dbus-services was set, if so use that.
    -dnl # 2. checks if --prefix was given, if so use that.
    -dnl # 3. fallbacks to installing into what should be the correct system
    -dnl # directories.
    -dnl #
    -dnl # This is still prone to error if one of the legacy directories exist
    -dnl # although a newer dbus is installed. But I have tried to order the
    -dnl # directory searching to keep this situation at a minimum.
    -dnl ###########################################################################
    -AC_ARG_WITH(dbus-services, [AS_HELP_STRING([--with-dbus-services=<dir>], [where the D-Bus services directory is located.])])
    -
    -DBUS_SERVICES_DIR=""
    -
    -if test x"$enable_dbus" = "xyes" ; then
    - AC_MSG_CHECKING([location of the D-Bus services directory])
    - if ! test -z "$with_dbus_services" ; then
    - if ! test -d "$with_dbus_services" ; then
    - AC_MSG_ERROR([$with_dbus_services does not exist, if this is the correct location please make sure that it exists.])
    - fi
    -
    - DBUS_SERVICES_DIR="$with_dbus_services"
    - else
    - if test x"$prefix" = x"NONE" ; then
    - dnl # no prefix given, so we look for the correct dbus system paths.
    - dnl # if a prefix is given, we use it.
    -
    - serviceprefixes="$prefix/share $prefix/lib /usr/share /usr/local/share"
    - DBUS_SERVICES_DIR=""
    -
    - for d in $serviceprefixes ; do
    - dir="$d/dbus-1/services"
    - if test -d $dir ; then
    - DBUS_SERVICES_DIR="$dir"
    - break
    - fi
    - done
    -
    - if test -z $DBUS_SERVICES_DIR ; then
    - AC_MSG_ERROR([D-Bus services directory was not found! Please use --with-dbus-services and specify its location.])
    - fi
    - else
    - DBUS_SERVICES_DIR="$datadir/dbus-1/services"
    - fi
    - fi
    - AC_MSG_RESULT([$DBUS_SERVICES_DIR])
    - AC_DEFINE(HAVE_DBUS, 1, [Define if we are using D-Bus.])
    -fi
    -AC_SUBST(DBUS_SERVICES_DIR)
    -
    -if test "x$enable_dbus" = "xyes" ; then
    - echo "Building with D-Bus support"
    -else
    - echo "Building without D-Bus support"
    -fi
    -
    -AM_CONDITIONAL(ENABLE_DBUS, test "x$enable_dbus" = "xyes")
    -
    -dnl Check for Python headers (currently useful only for libgnt)
    -dnl (Thanks to XChat)
    -if test "x$enable_consoleui" = "xyes" -a ! -z "$PYTHON" -a x"$PYTHON" != x"no" ; then
    - AC_MSG_CHECKING(for Python compile flags)
    - if test -f ${PYTHON}-config; then
    - PY_CFLAGS=`${PYTHON}-config --includes`
    - PY_LIBS=`${PYTHON}-config --libs`
    - AC_DEFINE(USE_PYTHON, [1], [Define if python headers are available.])
    - AC_MSG_RESULT(ok)
    - else
    - AC_MSG_RESULT([Cannot find ${PYTHON}-config])
    - PY_CFLAGS=""
    - PY_LIBS=""
    - fi
    -fi
    -AC_SUBST(PY_CFLAGS)
    -AC_SUBST(PY_LIBS)
    -
    -dnl #######################################################################
    -dnl # SSL support
    -dnl #
    -dnl # Thanks go to Evolution for the checks.
    -dnl #######################################################################
    -
    -AC_ARG_WITH(system-ssl-certs, [AS_HELP_STRING([--with-system-ssl-certs=<dir>], [directory containing system-wide SSL CA certificates])], [ssl_certificates_dir=$withval])
    -
    -SSL_CERTIFICATES_DIR=""
    -if ! test -z "$ssl_certificates_dir" ; then
    - if test "x$ssl_certificates_dir" = "xyes" ; then
    - AC_MSG_ERROR([--with-system-ssl-certs requires that a location is specified, eg. --with-system-ssl-certs=/etc/pki/tls/certs])
    - fi
    - if ! test -d "$ssl_certificates_dir" ; then
    - if test "x$is_win32" = "xyes" ; then
    - AC_MSG_WARN([$ssl_certificates_dir does not exist. \
    -It may be OK when cross-compiling, but please make sure about it.])
    - else
    - AC_MSG_ERROR([$ssl_certificates_dir does not exist, \
    -if this is the correct location please make sure that it exists.])
    - fi
    - fi
    - SSL_CERTIFICATES_DIR="$ssl_certificates_dir"
    -fi
    -AC_SUBST(SSL_CERTIFICATES_DIR)
    -if test "x$SSL_CERTIFICATES_DIR" != "x" ; then
    - AC_DEFINE_UNQUOTED([SSL_CERTIFICATES_DIR], ["$SSL_CERTIFICATES_DIR"],
    - [Directory where SSL certificates can be found])
    -fi
    -AM_CONDITIONAL(INSTALL_SSL_CERTIFICATES, test "x$SSL_CERTIFICATES_DIR" = "x")
    -
    -if test "$ac_cv_cygwin" = yes ; then
    - LDADD="$LDADD -static"
    - AC_DEFINE(DEBUG, 1, [Define if debugging is enabled.])
    -fi
    -
    -AC_SUBST(DEBUG_CPPFLAGS)
    -AC_SUBST(DEBUG_CFLAGS)
    -AC_SUBST(LDADD)
    -AC_SUBST(LIBS)
    -
    -if test "x$enable_plugins" = "xyes" ; then
    - AC_DEFINE(PURPLE_PLUGINS, 1, [Define if plugins are enabled.])
    - AM_CONDITIONAL(PLUGINS, true)
    - PLUGINS_DEFINE="#define PURPLE_PLUGINS 1"
    -else
    - AM_CONDITIONAL(PLUGINS, false)
    - PLUGINS_DEFINE="#undef PURPLE_PLUGINS"
    -fi
    -AC_SUBST(PLUGINS_DEFINE)
    -
    -dnl #######################################################################
    -dnl # Check for Nettle (Crypto Library)
    -dnl #######################################################################
    -AC_ARG_ENABLE(nettle,
    - [AC_HELP_STRING([--disable-nettle], [disable Nettle support])],
    - enable_nettle="$enableval", enable_nettle="yes")
    -
    -if test "x$enable_nettle" = "xyes" ; then
    - PKG_CHECK_MODULES(NETTLE, [nettle >= 3.0], [
    - enable_nettle="yes"
    - AC_SUBST(NETTLE_CFLAGS)
    - AC_SUBST(NETTLE_LIBS)
    - AC_DEFINE(HAVE_NETTLE, 1, [Define if we have Nettle.])
    - ], [
    - enable_nettle="no"
    - ])
    -
    - if test "x$enable_nettle" != "xyes" -a "x$force_deps" = "xyes" ; then
    - AC_MSG_ERROR([
    -Nettle development headers not found
    -Use --disable-nettle if you do not need it.
    -])
    - fi
    -fi
    -
    -AM_CONDITIONAL(ENABLE_NETTLE, test "x$enable_nettle" = "xyes")
    -
    -dnl #######################################################################
    -dnl # Check for Cyrus-SASL (for xmpp/irc)
    -dnl #######################################################################
    -dnl AC_CHECK_SIZEOF(short)
    -AC_CHECK_FUNCS(snprintf connect)
    -AC_SUBST(SASL_LIBS)
    -AC_ARG_ENABLE(cyrus-sasl, AS_HELP_STRING([--enable-cyrus-sasl], [enable Cyrus SASL support for xmpp/irc]), enable_cyrus_sasl=$enableval, enable_cyrus_sasl=no)
    -if test "x$enable_cyrus_sasl" = "xyes" ; then
    - AC_CHECK_LIB(sasl2, sasl_client_init, [
    - AM_CONDITIONAL(USE_CYRUS_SASL, true)
    - AC_DEFINE(HAVE_CYRUS_SASL, [1], [Define to 1 if Cyrus SASL is present])
    - SASL_LIBS=-"lsasl2"
    - ], [
    - AM_CONDITIONAL(USE_CYRUS_SASL, false)
    - AC_MSG_ERROR([Cyrus SASL library not found])
    - ])
    -else
    - AM_CONDITIONAL(USE_CYRUS_SASL, false)
    -fi
    -
    -dnl #######################################################################
    -dnl # Check for Kerberos (for Zephyr)
    -dnl #######################################################################
    -AC_DEFINE(ZEPHYR_INT32, long, [Size of an int32.])
    -AC_SUBST(KRB4_CFLAGS)
    -AC_SUBST(KRB4_LDFLAGS)
    -AC_SUBST(KRB4_LIBS)
    -if test "$kerberos" != "no" ; then
    - if test "$kerberos" != "yes" ; then
    - KRB4_CFLAGS="-I${kerberos}/include"
    - if test -d "$kerberos/include/kerberosIV" ; then
    - KRB4_CFLAGS="$KRB4_CFLAGS -I${kerberos}/include/kerberosIV"
    - fi
    - KRB4_LDFLAGS="-L${kerberos}/lib"
    - elif test -d /usr/local/include/kerberosIV ; then
    - KRB4_CFLAGS="-I/usr/local/include/kerberosIV"
    - elif test -d /usr/include/kerberosIV ; then
    - KRB4_CFLAGS="-I/usr/include/kerberosIV"
    - fi
    - AC_DEFINE(ZEPHYR_USES_KERBEROS, 1, [Define if kerberos should be used in Zephyr.])
    -
    - orig_LDFLAGS="$LDFLAGS"
    - LDFLAGS="$LDFLAGS $KRB4_LDFLAGS"
    - AC_CHECK_LIB(krb4, krb_rd_req,
    - [KRB4_LIBS="-lkrb4 -ldes425 -lkrb5 -lk5crypto -lcom_err"],
    - [AC_CHECK_LIB(krb, krb_rd_req,
    - [KRB4_LIBS="-lkrb -ldes"],
    - [AC_MSG_ERROR([Kerberos 4 libraries not found])],
    - -ldes)],
    - -ldes425 -lkrb5 -lk5crypto -lcom_err)
    - orig_LIBS="$LIBS"
    - LIBS="$LIBS $KRB4_LIBS"
    - AC_CHECK_FUNCS(krb_set_key krb_rd_req krb_get_lrealm)
    - AC_CHECK_FUNCS(krb_get_err_text krb_log)
    - LIBS="$orig_LIBS"
    - LDFLAGS="$orig_LDFLAGS"
    -fi
    -
    -dnl #######################################################################
    -dnl # Check for external libzephyr
    -dnl #######################################################################
    -AC_SUBST(ZEPHYR_CFLAGS)
    -AC_SUBST(ZEPHYR_LDFLAGS)
    -AC_SUBST(ZEPHYR_LIBS)
    -if test "$zephyr" != "no" ; then
    - if test "$zephyr" != "yes" ; then
    - ZEPHYR_CFLAGS="-I${zephyr}/include"
    - ZEPHYR_LDFLAGS="-L${zephyr}/lib"
    - elif test -d /usr/athena/include/zephyr ; then
    - ZEPHYR_CFLAGS="-I/usr/athena/include"
    - elif test -d /usr/include/zephyr ; then
    - ZEPHYR_CFLAGS="-I/usr/include"
    - elif test -d /usr/local/include/zephyr ; then
    - ZEPHYR_CFLAGS="-I/usr/local/include"
    - fi
    - AC_DEFINE(LIBZEPHYR_EXT, 1 , [Define if external libzephyr should be used.])
    - AM_CONDITIONAL(EXTERNAL_LIBZEPHYR, test "x$zephyr" != "xno")
    - orig_LDFLAGS="$LDFLAGS"
    - LDFLAGS="$LDFLAGS $ZEPHYR_LDFLAGS"
    - AC_CHECK_LIB(zephyr, ZInitialize,
    - [ZEPHYR_LIBS="-lzephyr"],
    - [AC_MSG_ERROR([Zephyr libraries not found])],
    - -lzephyr)
    - orig_LIBS="$LIBS"
    - LIBS="$orig_LIBS"
    - LDFLAGS="$orig_LDFLAGS"
    -fi
    -
    -AC_MSG_CHECKING(for me pot o' gold)
    -AC_MSG_RESULT(no)
    -AC_CHECK_FUNCS(gethostid timegm)
    -AC_CHECK_HEADERS(paths.h sgtty.h sys/cdefs.h)
    -AC_CHECK_HEADERS(sys/file.h sys/filio.h sys/ioctl.h sys/msgbuf.h)
    -AC_CHECK_HEADERS(sys/select.h sys/uio.h sys/wait.h)
    -AC_CHECK_HEADERS(termios.h)
    -
    -# sys/sysctl.h on OpenBSD 4.2 requires sys/param.h
    -# sys/sysctl.h on FreeBSD requires sys/types.h
    -AC_CHECK_HEADERS(sys/param.h)
    -AC_CHECK_HEADERS(sys/sysctl.h, [], [],
    - [[
    - #include <sys/types.h>
    - #ifdef HAVE_PARAM_H
    - # include <sys/param.h>
    - #endif
    - ]])
    -
    -AC_CHECK_HEADERS(sys/socket.h)
    -AC_VAR_TIMEZONE_EXTERNALS
    -
    -AC_CHECK_MEMBER([struct tm.tm_gmtoff],
    - [AC_DEFINE(HAVE_TM_GMTOFF, 1, [Define if you have a tm_gmtoff member in struct tm])],
    - [],
    - [[#include <time.h>]])
    -
    -dnl #######################################################################
    -dnl # Disable pixmap installation
    -dnl #######################################################################
    -AC_ARG_ENABLE(pixmaps-install, AS_HELP_STRING([--disable-pixmaps-install], [disable installation of pixmap files - Pidgin still needs them!]), enable_pixmaps="$enableval", enable_pixmaps=yes)
    -
    -AM_CONDITIONAL(INSTALL_PIXMAPS, test "x$enable_pixmaps" = "xyes")
    -
    -dnl #######################################################################
    -dnl # Tweak status tray icon installation directory
    -dnl #######################################################################
    -AC_ARG_ENABLE(trayicon-compat, AS_HELP_STRING([--enable-trayicon-compat], [install tray icons in location compatible with older releases of hicolor-icon-theme]), enable_traycompat="$enableval", enable_traycompat=no)
    -
    -AM_CONDITIONAL(ENABLE_TRAYCOMPAT, test "x$enable_traycompat" = "xyes")
    -
    -# check for gtk-doc
    -m4_ifdef([GTK_DOC_CHECK], [
    -GTK_DOC_CHECK([1.16],[--flavour no-tmpl])
    -],[
    - if test "x$force_deps" = "xyes" -a "x$enable_gtk_doc" = "xyes"; then
    - AC_MSG_ERROR([
    -You have requested to generate documentation, but gtk-doc was not found.
    - ])
    - fi
    -
    - AM_CONDITIONAL([ENABLE_GTK_DOC], false)
    - enable_gtk_doc=no
    -])
    -
    -AC_ARG_ENABLE(debug, [AS_HELP_STRING([--enable-debug],
    - [compile with debugging support])], , enable_debug=no)
    -
    -if test "x$enable_debug" = "xyes" ; then
    - AC_DEFINE(DEBUG, 1, [Define if debugging is enabled.])
    -fi
    -
    -AM_CONDITIONAL(PURPLE_AVAILABLE, true)
    -
    -AC_CONFIG_FILES([Makefile
    - doc/Makefile
    - doc/pidgin.1
    - doc/finch.1
    - doc/reference/Makefile
    - doc/reference/finch/Makefile
    - doc/reference/finch/version.xml
    - doc/reference/libpurple/Makefile
    - doc/reference/libpurple/version.xml
    - doc/reference/protocols/Makefile
    - doc/reference/protocols/facebook/Makefile
    - doc/reference/protocols/version.xml
    - doc/reference/pidgin/Makefile
    - doc/reference/pidgin/version.xml
    - m4macros/Makefile
    - pidgin/Makefile
    - pidgin/data/im.pidgin.Pidgin.desktop.in
    - pidgin/data/pidgin-3.pc
    - pidgin/data/pidgin-3-uninstalled.pc
    - pidgin/pixmaps/Makefile
    - pidgin/pixmaps/emotes/default/24/Makefile
    - pidgin/pixmaps/emotes/small/16/Makefile
    - pidgin/plugins/Makefile
    - pidgin/plugins/cap/Makefile
    - pidgin/plugins/disco/Makefile
    - pidgin/plugins/gestures/Makefile
    - pidgin/plugins/gevolution/Makefile
    - pidgin/plugins/musicmessaging/Makefile
    - pidgin/plugins/ticker/Makefile
    - pidgin/plugins/win32/transparency/Makefile
    - pidgin/plugins/win32/winprefs/Makefile
    - pidgin/themes/Makefile
    - pidgin/win32/pidgin_dll_rc.rc
    - pidgin/win32/pidgin_exe_rc.rc
    - libpurple/data/purple-url-handler.desktop.in
    - libpurple/data/purple-3.pc
    - libpurple/data/purple-3-uninstalled.pc
    - libpurple/example/Makefile
    - libpurple/plugins/Makefile
    - libpurple/plugins/keyrings/Makefile
    - libpurple/Makefile
    - libpurple/protocols/Makefile
    - libpurple/protocols/bonjour/Makefile
    - libpurple/protocols/facebook/Makefile
    - libpurple/protocols/gg/Makefile
    - libpurple/protocols/irc/Makefile
    - libpurple/protocols/jabber/Makefile
    - libpurple/protocols/jabber/tests/Makefile
    - libpurple/protocols/novell/Makefile
    - libpurple/protocols/null/Makefile
    - libpurple/protocols/oscar/Makefile
    - libpurple/protocols/oscar/tests/Makefile
    - libpurple/protocols/sametime/Makefile
    - libpurple/protocols/silc/Makefile
    - libpurple/protocols/simple/Makefile
    - libpurple/protocols/zephyr/Makefile
    - libpurple/tests/Makefile
    - libpurple/purple.h
    - libpurple/version.h
    - libpurple/win32/libpurplerc.rc
    - share/sounds/Makefile
    - share/ca-certs/Makefile
    - finch/finch.pc
    - finch/finch_winres.rc
    - finch/libfinch_winres.rc
    - finch/Makefile
    - finch/libgnt/Makefile
    - finch/libgnt/gnt.pc
    - finch/libgnt/libgnt_winres.rc
    - finch/libgnt/wms/Makefile
    - finch/plugins/Makefile
    - po/Makefile.in
    - ])
    -AC_OUTPUT
    -
    -echo
    -echo $PACKAGE $VERSION
    -
    -echo
    -echo Build GTK+ UI................. : $enable_gtkui
    -echo Build console UI.............. : $enable_consoleui
    -echo Build for X11................. : $with_x
    -echo
    -echo Enable Gestures............... : $enable_gestures
    -echo Protocols to build dynamically : $DYNAMIC_PRPLS
    -echo Protocols to link statically.. : $STATIC_PRPLS
    -echo
    -echo Build with GStreamer support.. : $enable_gst
    -echo Build with D-Bus support...... : $enable_dbus
    -echo Build with voice and video.... : $enable_vv
    -if test "x$enable_dbus" = "xyes" ; then
    - eval eval echo D-Bus services directory...... : $DBUS_SERVICES_DIR
    -fi
    -echo Build with GNU Libidn......... : $enable_idn
    -if test "x$SSL_CERTIFICATES_DIR" != "x" ; then
    - eval eval echo SSL CA certificates directory. : $SSL_CERTIFICATES_DIR
    -fi
    -echo Build with Nettle support..... : $enable_nettle
    -echo Build with Cyrus SASL support. : $enable_cyrus_sasl
    -echo Use kerberos 4 with zephyr.... : $kerberos
    -echo Use external libzephyr........ : $zephyr
    -echo Install pixmaps............... : $enable_pixmaps
    -echo Old tray icon compatibility... : $enable_traycompat
    -echo Install translations.......... : $enable_i18n
    -echo Has you....................... : yes
    -echo
    -echo Build with Enchant support.... : $use_enchant
    -echo Build with GCR widgets........ : $enable_gcr
    -echo Build Unity integration plugin.: $enable_unity
    -echo
    -echo Build with GNOME Keyring...... : $enable_gnome_keyring
    -echo Build with KWallet............ : $enable_kwallet
    -echo Build with Secret Service..... : $enable_secret_service
    -echo
    -echo Build with plugin support..... : $enable_plugins
    -echo Enable Introspection...........: $enable_introspection
    -
    -if test "x$is_win32" = "xyes" ; then
    - echo
    - echo Win32 directory structure..... : $with_win32_dirs
    -fi
    -
    -echo
    -echo Print debugging messages...... : $enable_debug
    -echo Generate documentation........ : $enable_gtk_doc
    -echo
    -eval eval echo Pidgin will be installed in $bindir.
    -if test "x$pidginpath" != "x" ; then
    - echo Warning: You have an old copy of Pidgin at $pidginpath.
    -fi
    -if test "x$enable_pixmaps" = "xno" ; then
    - echo
    - echo Warning: You have disabled the installation of pixmap data, but Pidgin
    - echo still requires installed pixmaps. Be sure you know what you are doing.
    -fi
    -if test "x$enable_i18n" = "xno" ; then
    - echo
    - echo Warning: You have disabled the building and installation of translation
    - echo data. This will prevent building Pidgin desktop files.
    - echo Be sure you know what you are doing.
    -fi
    -echo
    -echo configure complete, now type \'make\'
    -echo
    -
    --- a/doc/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,20 +0,0 @@
    -if ENABLE_GTK_DOC
    -SUBDIRS = reference
    -endif
    -
    -man_MANS =
    -
    -if ENABLE_GTK
    -man_MANS += pidgin.1
    -endif
    -
    -if ENABLE_GNT
    -man_MANS += finch.1
    -endif
    -
    -EXTRA_DIST = \
    - funniest_home_convos.txt \
    - finch.1.in \
    - gtkrc-2.0 \
    - pidgin.1.in \
    - the_penguin.txt
    --- a/doc/reference/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,9 +0,0 @@
    -if ENABLE_GTK
    -GTK_DIR=pidgin
    -endif
    -
    -if ENABLE_GNT
    -GNT_DIR=finch
    -endif
    -
    -SUBDIRS = libpurple protocols $(GNT_DIR) $(GTK_DIR)
    --- a/doc/reference/finch/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,137 +0,0 @@
    -## Process this file with automake to produce Makefile.in
    -
    -# We require automake 1.6 at least.
    -AUTOMAKE_OPTIONS = 1.6
    -
    -# This is a blank Makefile.am for using gtk-doc.
    -# Copy this to your project's API docs directory and modify the variables to
    -# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
    -# of using the various options.
    -
    -# The name of the module, e.g. 'glib'.
    -DOC_MODULE=finch
    -
    -# Uncomment for versioned docs and specify the version of the module, e.g. '2'.
    -#DOC_MODULE_VERSION=2
    -
    -# The top-level XML file (SGML in the past). You can change this if you want to.
    -DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.xml
    -
    -# The directory containing the source code. Relative to $(srcdir).
    -# gtk-doc will search all .c & .h files beneath here for inline comments
    -# documenting the functions and macros.
    -# e.g. DOC_SOURCE_DIR=../../../gtk
    -DOC_SOURCE_DIR=$(top_srcdir)/$(DOC_MODULE)
    -
    -# Extra options to pass to gtkdoc-scangobj. Not normally needed.
    -SCANGOBJ_OPTIONS=
    -
    -# Extra options to supply to gtkdoc-scan.
    -# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
    -SCAN_OPTIONS=\
    - --deprecated-guards="PURPLE_DISABLE_DEPRECATED|GNT_DISABLE_DEPRECATED|FINCH_DISABLE_DEPRECATED" \
    - --rebuild-types \
    - --rebuild-sections
    -
    -# Extra options to supply to gtkdoc-mkdb.
    -# e.g. MKDB_OPTIONS=--xml-mode --output-format=xml
    -MKDB_OPTIONS=--xml-mode --output-format=xml --ignore-files="$(IGNORE_HFILES)"
    -
    -# Extra options to supply to gtkdoc-mktmpl
    -# e.g. MKTMPL_OPTIONS=--only-section-tmpl
    -MKTMPL_OPTIONS=
    -
    -# Extra options to supply to gtkdoc-mkhtml
    -MKHTML_OPTIONS=
    -
    -# Extra options to supply to gtkdoc-fixref. Not normally needed.
    -# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
    -FIXXREF_OPTIONS=
    -
    -# Used for dependencies. The docs will be rebuilt if any of these change.
    -# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
    -# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
    -HFILE_GLOB=$(top_srcdir)/$(DOC_MODULE)/*.h
    -CFILE_GLOB=$(top_srcdir)/$(DOC_MODULE)/*.c
    -
    -# Extra header to include when scanning, which are not under DOC_SOURCE_DIR
    -# e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h
    -EXTRA_HFILES=
    -
    -# Header files or dirs to ignore when scanning. Use base file/dir names
    -# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h private_code
    -IGNORE_HFILES=\
    - plugins \
    - test \
    - libgnt/wms \
    - gntinternal.h \
    - gnt-skel.h
    -
    -# Images to copy into HTML directory.
    -# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
    -HTML_IMAGES=
    -
    -# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
    -# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
    -content_files=version.xml
    -
    -# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
    -# These files must be listed here *and* in content_files
    -# e.g. expand_content_files=running.sgml
    -expand_content_files=
    -
    -# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
    -# Only needed if you are using gtkdoc-scangobj to dynamically query widget
    -# signals and properties.
    -# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
    -# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
    -GTKDOC_CFLAGS = \
    - -I$(top_srcdir) \
    - -I$(top_srcdir)/libpurple \
    - -I$(top_srcdir)/finch \
    - -I$(top_srcdir)/finch/libgnt \
    - $(DEBUG_CFLAGS) \
    - $(GLIB_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(DBUS_CFLAGS) \
    - $(LIBXML_CFLAGS) \
    - $(GSTREAMER_CFLAGS) \
    - $(INTROSPECTION_CFLAGS) \
    - $(GNT_CFLAGS)
    -
    -GTKDOC_LIBS = \
    - $(top_builddir)/finch/libfinch.la \
    - $(top_builddir)/libpurple/libpurple.la \
    - $(DBUS_LIBS) \
    - $(INTLLIBS) \
    - $(GLIB_LIBS) \
    - $(GPLUGIN_LIBS) \
    - $(LIBXML_LIBS) \
    - $(GNT_LIBS) \
    - $(GSTREAMER_LIBS) \
    - $(INTROSPECTION_LIBS) \
    - $(top_builddir)/finch/libgnt/libgnt.la
    -
    -# This includes the standard gtk-doc make rules, copied by gtkdocize.
    -include $(top_srcdir)/gtk-doc.make
    -
    -# Other files to distribute
    -# e.g. EXTRA_DIST += version.xml.in
    -EXTRA_DIST += version.xml.in
    -
    -# Files not to distribute
    -# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types
    -# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt
    -DISTCLEANFILES = $(DOC_MODULE).types $(DOC_MODULE)-sections.txt
    -
    -dist-hook: html-build.stamp
    -
    -# Comment this out if you want 'make check' to test you doc status
    -# and run some sanity checks
    -if ENABLE_GTK_DOC
    -TESTS_ENVIRONMENT = \
    - DOC_MODULE=$(DOC_MODULE) DOC_MAIN_SGML_FILE=$(DOC_MAIN_SGML_FILE) \
    - SRCDIR=$(abs_srcdir)
    -#TODO: fix and enable
    -#TESTS = $(GTKDOC_CHECK)
    -endif
    --- a/doc/reference/libpurple/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,179 +0,0 @@
    -## Process this file with automake to produce Makefile.in
    -
    -# We require automake 1.6 at least.
    -AUTOMAKE_OPTIONS = 1.6
    -
    -# This is a blank Makefile.am for using gtk-doc.
    -# Copy this to your project's API docs directory and modify the variables to
    -# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
    -# of using the various options.
    -
    -# The name of the module, e.g. 'glib'.
    -DOC_MODULE=libpurple
    -
    -# Uncomment for versioned docs and specify the version of the module, e.g. '2'.
    -#DOC_MODULE_VERSION=2
    -
    -# The top-level XML file (SGML in the past). You can change this if you want to.
    -DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.xml
    -
    -# The directory containing the source code. Relative to $(srcdir).
    -# gtk-doc will search all .c & .h files beneath here for inline comments
    -# documenting the functions and macros.
    -# e.g. DOC_SOURCE_DIR=../../../gtk
    -DOC_SOURCE_DIR=$(top_srcdir)/$(DOC_MODULE)
    -
    -# Extra options to pass to gtkdoc-scangobj. Not normally needed.
    -SCANGOBJ_OPTIONS=
    -
    -# Extra options to supply to gtkdoc-scan.
    -# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
    -SCAN_OPTIONS=\
    - --deprecated-guards="PURPLE_DISABLE_DEPRECATED" \
    - --rebuild-types \
    - --rebuild-sections
    -
    -# Extra options to supply to gtkdoc-mkdb.
    -# e.g. MKDB_OPTIONS=--xml-mode --output-format=xml
    -MKDB_OPTIONS=--xml-mode --output-format=xml --ignore-files="$(IGNORE_HFILES)"
    -
    -# Extra options to supply to gtkdoc-mktmpl
    -# e.g. MKTMPL_OPTIONS=--only-section-tmpl
    -MKTMPL_OPTIONS=
    -
    -# Extra options to supply to gtkdoc-mkhtml
    -MKHTML_OPTIONS=
    -
    -# Extra options to supply to gtkdoc-fixref. Not normally needed.
    -# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
    -FIXXREF_OPTIONS=
    -
    -# Used for dependencies. The docs will be rebuilt if any of these change.
    -# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
    -# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
    -HFILE_GLOB=$(top_srcdir)/$(DOC_MODULE)/*.h
    -CFILE_GLOB=$(top_srcdir)/$(DOC_MODULE)/*.c
    -
    -# Extra header to include when scanning, which are not under DOC_SOURCE_DIR
    -# e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h
    -# TODO: those files are not properly scanned when building out-of-tree
    -EXTRA_HFILES = \
    - $(top_builddir)/$(DOC_MODULE)/enums.h \
    - $(top_builddir)/$(DOC_MODULE)/purple.h \
    - $(top_builddir)/$(DOC_MODULE)/version.h
    -
    -# Header files or dirs to ignore when scanning. Use base file/dir names
    -# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h private_code
    -IGNORE_HFILES=\
    - example \
    - plugins \
    - protocols \
    - tests \
    - tests.h \
    - win32 \
    - backend-fs2.h \
    - dbus-define-api.h \
    - dbus-types.h \
    - glibcompat.h \
    - internal.h \
    - purple-client.h \
    - purple-client-bindings.h \
    - valgrind.h
    -
    -# Images to copy into HTML directory.
    -# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
    -HTML_IMAGES=
    -
    -# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
    -# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
    -content_files = version.xml \
    - plugin_i18n.xml \
    - plugin_ids.xml \
    - signals_account.xml \
    - signals_blist.xml \
    - signals_certificate.xml \
    - signals_cmd.xml \
    - signals_connection.xml \
    - signals_conversation.xml \
    - signals_core.xml \
    - signals_dbus_server.xml \
    - signals_jabber.xml \
    - signals_log.xml \
    - signals_notify.xml \
    - signals_plugin.xml \
    - signals_protocol.xml \
    - signals_savedstatus.xml \
    - signals_sound.xml \
    - signals_xfer.xml \
    - tut_c_plugins.xml \
    - tut_signals.xml \
    - ui_ops.xml
    -
    -# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
    -# These files must be listed here *and* in content_files
    -# e.g. expand_content_files=running.sgml
    -expand_content_files=
    -
    -# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
    -# Only needed if you are using gtkdoc-scangobj to dynamically query widget
    -# signals and properties.
    -# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
    -# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
    -GTKDOC_CFLAGS = \
    - -I$(top_srcdir) \
    - -I$(top_srcdir)/libpurple \
    - $(GLIB_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(DEBUG_CFLAGS) \
    - $(DBUS_CFLAGS) \
    - $(LIBXML_CFLAGS) \
    - $(FARSTREAM_CFLAGS) \
    - $(GSTREAMER_CFLAGS) \
    - $(GSTVIDEO_CFLAGS) \
    - $(GSTINTERFACES_CFLAGS) \
    - $(IDN_CFLAGS) \
    - $(NETWORKMANAGER_CFLAGS) \
    - $(JSON_CFLAGS) \
    - $(INTROSPECTION_CFLAGS)
    -
    -GTKDOC_LIBS = \
    - $(top_builddir)/libpurple/libpurple.la \
    - $(STATIC_LINK_LIBS) \
    - $(DBUS_LIBS) \
    - $(GLIB_LIBS) \
    - $(GPLUGIN_LIBS) \
    - $(LIBXML_LIBS) \
    - $(NETWORKMANAGER_LIBS) \
    - $(INTLLIBS) \
    - $(FARSTREAM_LIBS) \
    - $(GSTREAMER_LIBS) \
    - $(GSTVIDEO_LIBS) \
    - $(GSTINTERFACES_LIBS) \
    - $(IDN_LIBS) \
    - $(JSON_LIBS) \
    - $(INTROSPECTION_LIBS) \
    - -lm
    -
    -# This includes the standard gtk-doc make rules, copied by gtkdocize.
    -include $(top_srcdir)/gtk-doc.make
    -
    -# Other files to distribute
    -# e.g. EXTRA_DIST += version.xml.in
    -EXTRA_DIST += version.xml.in
    -
    -# Files not to distribute
    -# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types
    -# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt
    -DISTCLEANFILES = $(DOC_MODULE).types $(DOC_MODULE)-sections.txt
    -
    -dist-hook: html-build.stamp
    -
    -# Comment this out if you want 'make check' to test you doc status
    -# and run some sanity checks
    -if ENABLE_GTK_DOC
    -TESTS_ENVIRONMENT = \
    - DOC_MODULE=$(DOC_MODULE) DOC_MAIN_SGML_FILE=$(DOC_MAIN_SGML_FILE) \
    - SRCDIR=$(abs_srcdir)
    -#TODO: fix and enable
    -#TESTS = $(GTKDOC_CHECK)
    -endif
    --- a/doc/reference/pidgin/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,151 +0,0 @@
    -## Process this file with automake to produce Makefile.in
    -
    -# We require automake 1.6 at least.
    -AUTOMAKE_OPTIONS = 1.6
    -
    -# This is a blank Makefile.am for using gtk-doc.
    -# Copy this to your project's API docs directory and modify the variables to
    -# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
    -# of using the various options.
    -
    -# The name of the module, e.g. 'glib'.
    -DOC_MODULE=pidgin
    -
    -# Uncomment for versioned docs and specify the version of the module, e.g. '2'.
    -#DOC_MODULE_VERSION=2
    -
    -# The top-level XML file (SGML in the past). You can change this if you want to.
    -DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.xml
    -
    -# The directory containing the source code. Relative to $(srcdir).
    -# gtk-doc will search all .c & .h files beneath here for inline comments
    -# documenting the functions and macros.
    -# e.g. DOC_SOURCE_DIR=../../../gtk
    -DOC_SOURCE_DIR=$(top_srcdir)/$(DOC_MODULE)
    -
    -# Extra options to pass to gtkdoc-scangobj. Not normally needed.
    -SCANGOBJ_OPTIONS=
    -
    -# Extra options to supply to gtkdoc-scan.
    -# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
    -SCAN_OPTIONS=\
    - --deprecated-guards="PURPLE_DISABLE_DEPRECATED|PIDGIN_DISABLE_DEPRECATED" \
    - --rebuild-types \
    - --rebuild-sections
    -
    -# Extra options to supply to gtkdoc-mkdb.
    -# e.g. MKDB_OPTIONS=--xml-mode --output-format=xml
    -MKDB_OPTIONS=--xml-mode --output-format=xml --ignore-files="$(IGNORE_HFILES)"
    -
    -# Extra options to supply to gtkdoc-mktmpl
    -# e.g. MKTMPL_OPTIONS=--only-section-tmpl
    -MKTMPL_OPTIONS=
    -
    -# Extra options to supply to gtkdoc-mkhtml
    -MKHTML_OPTIONS=
    -
    -# Extra options to supply to gtkdoc-fixref. Not normally needed.
    -# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
    -FIXXREF_OPTIONS=
    -
    -# Used for dependencies. The docs will be rebuilt if any of these change.
    -# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
    -# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
    -HFILE_GLOB=$(top_srcdir)/$(DOC_MODULE)/*.h
    -CFILE_GLOB=$(top_srcdir)/$(DOC_MODULE)/*.c
    -
    -# Extra header to include when scanning, which are not under DOC_SOURCE_DIR
    -# e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h
    -EXTRA_HFILES=
    -
    -# Header files or dirs to ignore when scanning. Use base file/dir names
    -# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h private_code
    -IGNORE_HFILES=\
    - pixmaps \
    - plugins \
    - themes \
    - win32 \
    - gtk3compat.h \
    - gtkinternal.h \
    - pidgin.gresource.h
    -
    -# Images to copy into HTML directory.
    -# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
    -HTML_IMAGES=
    -
    -# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
    -# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
    -content_files = version.xml \
    - signals_gtkaccount.xml \
    - signals_gtkblist.xml \
    - signals_gtkconv.xml \
    - signals_gtklog.xml
    -
    -# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
    -# These files must be listed here *and* in content_files
    -# e.g. expand_content_files=running.sgml
    -expand_content_files=
    -
    -# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
    -# Only needed if you are using gtkdoc-scangobj to dynamically query widget
    -# signals and properties.
    -# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
    -# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
    -GTKDOC_CFLAGS = \
    - -I$(top_srcdir) \
    - -I$(top_srcdir)/libpurple \
    - -I$(top_srcdir)/pidgin \
    - $(GLIB_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(GCR_CFLAGS) \
    - $(GSTREAMER_CFLAGS) \
    - $(GSTVIDEO_CFLAGS) \
    - $(GSTINTERFACES_CFLAGS) \
    - $(DEBUG_CFLAGS) \
    - $(GTK_CFLAGS) \
    - $(X11_CFLAGS) \
    - $(DBUS_CFLAGS) \
    - $(LIBXML_CFLAGS) \
    - $(WEBKIT_CFLAGS) \
    - $(INTROSPECTION_CFLAGS)
    -
    -GTKDOC_LIBS = \
    - $(top_builddir)/pidgin/libpidgin.la \
    - $(top_builddir)/libpurple/libpurple.la \
    - $(GLIB_LIBS) \
    - $(GPLUGIN_LIBS) \
    - $(GCR_LIBS) \
    - $(DBUS_LIBS) \
    - $(GSTREAMER_LIBS) \
    - $(GSTVIDEO_LIBS) \
    - $(GSTINTERFACES_LIBS) \
    - $(INTLLIBS) \
    - $(LIBXML_LIBS) \
    - $(WEBKIT_LIBS) \
    - $(GTK_LIBS) \
    - $(X11_LIBS) \
    - $(INTROSPECTION_LIBS)
    -
    -# This includes the standard gtk-doc make rules, copied by gtkdocize.
    -include $(top_srcdir)/gtk-doc.make
    -
    -# Other files to distribute
    -# e.g. EXTRA_DIST += version.xml.in
    -EXTRA_DIST += version.xml.in
    -
    -# Files not to distribute
    -# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types
    -# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt
    -DISTCLEANFILES = $(DOC_MODULE).types $(DOC_MODULE)-sections.txt
    -
    -dist-hook: html-build.stamp
    -
    -# Comment this out if you want 'make check' to test you doc status
    -# and run some sanity checks
    -if ENABLE_GTK_DOC
    -TESTS_ENVIRONMENT = \
    - DOC_MODULE=$(DOC_MODULE) DOC_MAIN_SGML_FILE=$(DOC_MAIN_SGML_FILE) \
    - SRCDIR=$(abs_srcdir)
    -#TODO: fix and enable
    -#TESTS = $(GTKDOC_CHECK)
    -endif
    --- a/doc/reference/protocols/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,2 +0,0 @@
    -EXTRA_DIST = version.xml.in
    -SUBDIRS = facebook
    --- a/doc/reference/protocols/facebook/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,123 +0,0 @@
    -## Process this file with automake to produce Makefile.in
    -
    -# We require automake 1.6 at least.
    -AUTOMAKE_OPTIONS = 1.6
    -
    -# This is a blank Makefile.am for using gtk-doc.
    -# Copy this to your project's API docs directory and modify the variables to
    -# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
    -# of using the various options.
    -
    -# The name of the module, e.g. 'glib'.
    -DOC_MODULE=facebook
    -
    -# Uncomment for versioned docs and specify the version of the module, e.g. '2'.
    -#DOC_MODULE_VERSION=2
    -
    -# The top-level XML file (SGML in the past). You can change this if you want to.
    -DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.xml
    -
    -# The directory containing the source code. Relative to $(srcdir).
    -# gtk-doc will search all .c & .h files beneath here for inline comments
    -# documenting the functions and macros.
    -# e.g. DOC_SOURCE_DIR=../../../gtk
    -DOC_SOURCE_DIR=$(top_srcdir)/libpurple/protocols/$(DOC_MODULE)
    -
    -# Extra options to pass to gtkdoc-scangobj. Not normally needed.
    -SCANGOBJ_OPTIONS=
    -
    -# Extra options to supply to gtkdoc-scan.
    -# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
    -SCAN_OPTIONS=\
    - --deprecated-guards="PURPLE_DISABLE_DEPRECATED" \
    - --rebuild-types \
    - --rebuild-sections
    -
    -# Extra options to supply to gtkdoc-mkdb.
    -# e.g. MKDB_OPTIONS=--xml-mode --output-format=xml
    -MKDB_OPTIONS=--xml-mode --output-format=xml
    -
    -# Extra options to supply to gtkdoc-mktmpl
    -# e.g. MKTMPL_OPTIONS=--only-section-tmpl
    -MKTMPL_OPTIONS=
    -
    -# Extra options to supply to gtkdoc-mkhtml
    -MKHTML_OPTIONS=
    -
    -# Extra options to supply to gtkdoc-fixref. Not normally needed.
    -# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
    -FIXXREF_OPTIONS=
    -
    -# Used for dependencies. The docs will be rebuilt if any of these change.
    -# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
    -# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
    -HFILE_GLOB=$(top_srcdir)/libpurple/protocols/$(DOC_MODULE)/*.h
    -CFILE_GLOB=$(top_srcdir)/libpurple/protocols/$(DOC_MODULE)/*.c
    -
    -# Extra header to include when scanning, which are not under DOC_SOURCE_DIR
    -# e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h
    -# TODO: those files are not properly scanned when building out-of-tree
    -EXTRA_HFILES =
    -
    -# Header files or dirs to ignore when scanning. Use base file/dir names
    -# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h private_code
    -IGNORE_HFILES=
    -
    -# Images to copy into HTML directory.
    -# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
    -HTML_IMAGES=
    -
    -# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
    -# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
    -content_files = ../version.xml
    -
    -# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
    -# These files must be listed here *and* in content_files
    -# e.g. expand_content_files=running.sgml
    -expand_content_files=
    -
    -# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
    -# Only needed if you are using gtkdoc-scangobj to dynamically query widget
    -# signals and properties.
    -# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
    -# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
    -GTKDOC_CFLAGS = \
    - -I$(top_srcdir) \
    - -I$(top_srcdir)/libpurple/protocols/$(DOC_MODULE) \
    - $(GLIB_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(DEBUG_CFLAGS) \
    - $(JSON_CFLAGS) \
    - $(INTROSPECTION_CFLAGS)
    -
    -GTKDOC_LIBS = \
    - $(top_builddir)/libpurple/protocols/$(DOC_MODULE)/lib$(DOC_MODULE).la \
    - $(STATIC_LINK_LIBS) \
    - $(GLIB_LIBS) \
    - $(GPLUGIN_LIBS) \
    - $(INTLLIBS) \
    - $(JSON_LIBS) \
    - $(INTROSPECTION_LIBS)
    -
    -# This includes the standard gtk-doc make rules, copied by gtkdocize.
    -include $(top_srcdir)/gtk-doc.make
    -
    -# Other files to distribute
    -# e.g. EXTRA_DIST += version.xml.in
    -
    -# Files not to distribute
    -# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types
    -# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt
    -DISTCLEANFILES = $(DOC_MODULE).types $(DOC_MODULE)-sections.txt
    -
    -dist-hook: html-build.stamp
    -
    -# Comment this out if you want 'make check' to test you doc status
    -# and run some sanity checks
    -if ENABLE_GTK_DOC
    -TESTS_ENVIRONMENT = \
    - DOC_MODULE=$(DOC_MODULE) DOC_MAIN_SGML_FILE=$(DOC_MAIN_SGML_FILE) \
    - SRCDIR=$(abs_srcdir)
    -#TODO: fix and enable
    -#TESTS = $(GTKDOC_CHECK)
    -endif
    --- a/finch/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,184 +0,0 @@
    -EXTRA_DIST = \
    - finch.pc.in
    -
    -pkgconfigdir = $(libdir)/pkgconfig
    -pkgconfig_DATA = finch.pc
    -
    -SUBDIRS = libgnt . plugins
    -
    -if ENABLE_GNT
    -
    -# XXX: should this be lib_, or noinst_?
    -lib_LTLIBRARIES = libfinch.la
    -bin_PROGRAMS = finch
    -
    -endif
    -
    -libfinch_la_SOURCES = \
    - gntaccount.c \
    - gntblist.c \
    - gntcertmgr.c \
    - gntconn.c \
    - gntconv.c \
    - gntdebug.c \
    - gntidle.c \
    - gntlog.c \
    - gntmedia.c \
    - gntmenuutil.c \
    - gntnotify.c \
    - gntplugin.c \
    - gntpounce.c \
    - gntprefs.c \
    - gntrequest.c \
    - gntroomlist.c \
    - gntsound.c \
    - gntstatus.c \
    - gntui.c \
    - gntxfer.c \
    - libfinch.c
    -
    -libfinch_la_headers = \
    - gntaccount.h \
    - gntblist.h \
    - gntcertmgr.h \
    - gntconn.h \
    - gntconv.h \
    - gntdebug.h \
    - finch.h \
    - gntidle.h \
    - gntlog.h \
    - gntmedia.h \
    - gntmenuutil.h \
    - gntnotify.h \
    - gntplugin.h \
    - gntpounce.h \
    - gntprefs.h \
    - gntrequest.h \
    - gntroomlist.h \
    - gntsound.h \
    - gntstatus.h \
    - gntui.h \
    - gntxfer.h
    -
    -finch_SOURCES = \
    - finch.c
    -
    -libfinchincludedir=$(includedir)/finch
    -libfinchinclude_HEADERS = \
    - $(libfinch_la_headers)
    -
    -libfinch_la_DEPENDENCIES = @LIBOBJS@
    -libfinch_la_LDFLAGS = -export-dynamic -no-undefined \
    - -version-info $(PURPLE_LT_VERSION_INFO)
    -libfinch_la_LIBADD = \
    - @LIBOBJS@ \
    - $(DBUS_LIBS) \
    - $(INTLLIBS) \
    - $(GLIB_LIBS) \
    - $(GPLUGIN_LIBS) \
    - $(LIBXML_LIBS) \
    - $(GNT_LIBS) \
    - $(GSTREAMER_LIBS) \
    - $(GSTVIDEO_LIBS) \
    - $(INTROSPECTION_LIBS) \
    - ./libgnt/libgnt.la \
    - $(top_builddir)/libpurple/libpurple.la
    -
    -finch_DEPENDENCIES = $(builddir)/libfinch.la
    -finch_LDFLAGS = -export-dynamic
    -finch_LDADD = $(builddir)/libfinch.la $(libfinch_la_LIBADD)
    -
    -if IS_WIN32
    -libfinch_la_LIBADD += \
    - -lwinmm
    -
    -.rc.o: %.rc
    - $(AM_V_GEN)$(WINDRES) -i $< -o $@
    -
    -FINCH_WIN32RES = finch_winres.o
    -finch_DEPENDENCIES += $(FINCH_WIN32RES)
    -finch_LDFLAGS += -Wl,$(FINCH_WIN32RES)
    -
    -LIBFINCH_WIN32RES = libfinch_winres.o
    -libfinch_la_DEPENDENCIES += $(LIBFINCH_WIN32RES)
    -libfinch_la_LDFLAGS += -Wl,$(LIBFINCH_WIN32RES)
    -
    -endif
    -
    -AM_CPPFLAGS = \
    - -DSTANDALONE \
    - -I$(top_srcdir)/libpurple/ \
    - -I$(top_builddir)/libpurple \
    - -I$(top_srcdir) \
    - -I$(srcdir)/libgnt/ \
    - $(DEBUG_CFLAGS) \
    - $(GLIB_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(DBUS_CFLAGS) \
    - $(LIBXML_CFLAGS) \
    - $(GSTREAMER_CFLAGS) \
    - $(INTROSPECTION_CFLAGS) \
    - $(GNT_CFLAGS)
    -
    -if ENABLE_GNT
    --include $(INTROSPECTION_MAKEFILE)
    -INTROSPECTION_GIRS =
    -INTROSPECTION_SCANNER_ARGS = \
    - --warn-all \
    - --add-include-path=$(prefix)/share/gir-1.0 \
    - --add-include-path=$(builddir)/libgnt \
    - --add-include-path=$(top_builddir)/libpurple \
    - --pkg=purple-$(PURPLE_MAJOR_VERSION) \
    - --pkg-export=finch
    -
    -INTROSPECTION_COMPILER_ARGS = \
    - --includedir=$(prefix)/share/gir-1.0 \
    - --includedir=$(builddir)/libgnt \
    - --includedir=$(top_builddir)/libpurple
    -
    -if HAVE_INTROSPECTION
    -introspection_sources = $(libfinchinclude_HEADERS)
    -
    -Finch-$(PURPLE_MAJOR_VERSION).$(PURPLE_MINOR_VERSION).gir: $(builddir)/libfinch.la
    -Finch_3_0_gir_INCLUDES = \
    - Gnt-$(GNT_MAJOR_VERSION).$(GNT_MINOR_VERSION) \
    - Purple-$(PURPLE_MAJOR_VERSION).$(PURPLE_MINOR_VERSION)
    -
    -Finch_3_0_gir_CFLAGS = \
    - $(INCLUDES) \
    - -DSTANDALONE \
    - -DDATADIR=\"$(datadir)\" \
    - -DLIBDIR=\"$(libdir)/finch/\" \
    - -DLOCALEDIR=\"$(datadir)/locale\" \
    - -DSYSCONFDIR=\"$(sysconfdir)\" \
    - -I$(top_srcdir)/libpurple/ \
    - -I$(top_builddir)/libpurple/ \
    - -I$(top_srcdir) \
    - -I$(srcdir)/libgnt/ \
    - $(GLIB_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(DBUS_CFLAGS) \
    - $(LIBXML_CFLAGS) \
    - $(GSTREAMER_CFLAGS) \
    - $(INTROSPECTION_CFLAGS) \
    - $(GNT_CFLAGS)
    -
    -Finch_3_0_gir_LIBS = $(builddir)/libfinch.la
    -Finch_3_0_gir_FILES = $(introspection_sources)
    -INTROSPECTION_GIRS += Finch-$(PURPLE_MAJOR_VERSION).$(PURPLE_MINOR_VERSION).gir
    -INTROSPECTION_SCANNER_ENV = PKG_CONFIG_PATH=$(top_builddir)/libpurple/data/
    -
    -girdir = \
    - $(prefix)/share/gir-1.0 \
    - $(INTROSPECTION_GIRDIR)
    -gir_DATA = $(INTROSPECTION_GIRS)
    -
    -typelibdir = \
    - $(prefix)/share/gir-1.0 \
    - $(INTROSPECTION_TYPELIBDIR)
    -typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib)
    -
    -CLEANFILES = $(gir_DATA) $(typelib_DATA)
    -endif
    -
    -endif # ENABLE_GNT
    --- a/finch/finch.pc.in Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,14 +0,0 @@
    -prefix=@prefix@
    -exec_prefix=@exec_prefix@
    -libdir=@libdir@
    -includedir=@includedir@
    -datarootdir=@datarootdir@
    -datadir=@datadir@
    -sysconfdir=@sysconfdir@
    -
    -Name: Finch
    -Description: Finch is an instant messenger application that uses libpurple for protocol support and ncurses (libgnt) for the UI.
    -Version: @VERSION@
    -Requires: gnt purple-3
    -Cflags: -I${includedir}/finch
    -Libs: -L${libdir} -lfinch
    --- a/finch/gntblist.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/finch/gntblist.c Thu Nov 23 22:30:26 2017 -0600
    @@ -1171,6 +1171,11 @@
    g_signal_connect_swapped(G_OBJECT(menu), "destroy",
    G_CALLBACK(purple_menu_action_free), action);
    + /* Protocol actions */
    + append_proto_menu(menu,
    + purple_account_get_connection(purple_chat_get_account(chat)),
    + (PurpleBlistNode*)chat);
    +
    add_custom_action(menu, _("Edit Settings"), (PurpleCallback)chat_components_edit, chat);
    }
    --- a/finch/gntnotify.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/finch/gntnotify.c Thu Nov 23 22:30:26 2017 -0600
    @@ -385,11 +385,12 @@
    finch_notify_sr_new_rows(PurpleConnection *gc,
    PurpleNotifySearchResults *results, void *data)
    {
    - GntTree *tree = GNT_TREE(data);
    + GntWindow *window = GNT_WINDOW(data);
    + GntTree *tree = GNT_TREE(g_object_get_data(G_OBJECT(window), "tree-widget"));
    GList *o;
    GntTreeRow *prev = NULL;
    - /* XXX: Do I need to empty the tree here? */
    + gnt_tree_remove_all(GNT_TREE(tree));
    for (o = results->rows; o; o = o->next)
    {
    @@ -493,12 +494,16 @@
    g_signal_connect(G_OBJECT(tree), "destroy",
    G_CALLBACK(notify_sr_destroy_cb), NULL);
    - finch_notify_sr_new_rows(gc, results, tree);
    + g_object_set_data(G_OBJECT(window), "tree-widget", tree);
    + finch_notify_sr_new_rows(gc, results, window);
    +
    + g_signal_connect(G_OBJECT(window), "destroy",
    + G_CALLBACK(notify_msg_window_destroy_cb), GINT_TO_POINTER(PURPLE_NOTIFY_SEARCHRESULTS));
    gnt_widget_show(window);
    g_object_set_data(G_OBJECT(window), "notify-results", results);
    - return tree;
    + return window;
    }
    static void *
    --- a/finch/libgnt/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,134 +0,0 @@
    -SUBDIRS = . wms
    -pkgconfigdir = $(libdir)/pkgconfig
    -pkgconfig_DATA = gnt.pc
    -
    -lib_LTLIBRARIES = libgnt.la
    -
    -noinst_HEADERS = gntinternal.h
    -
    -libgnt_la_SOURCES = \
    - gntwidget.c \
    - gntbindable.c \
    - gntbox.c \
    - gntbutton.c \
    - gntcheckbox.c \
    - gntclipboard.c \
    - gntcolors.c \
    - gntcombobox.c \
    - gntentry.c \
    - gntfilesel.c \
    - gntkeys.c \
    - gntlabel.c \
    - gntline.c \
    - gntmenu.c \
    - gntmenuitem.c \
    - gntmenuitemcheck.c \
    - gntprogressbar.c \
    - gntslider.c \
    - gntstyle.c \
    - gnttextview.c \
    - gnttree.c \
    - gntutils.c \
    - gntwindow.c \
    - gntwm.c \
    - gntws.c \
    - gntmain.c
    -
    -libgnt_la_headers = \
    - gntwidget.h \
    - gntbindable.h \
    - gntbox.h \
    - gntbutton.h \
    - gntcheckbox.h \
    - gntclipboard.h \
    - gntcolors.h \
    - gntcombobox.h \
    - gntentry.h \
    - gntfilesel.h \
    - gntkeys.h \
    - gntlabel.h \
    - gntline.h \
    - gntmenu.h \
    - gntmenuitem.h \
    - gntmenuitemcheck.h \
    - gntprogressbar.h \
    - gntslider.h \
    - gntstyle.h \
    - gnttextview.h \
    - gnttree.h \
    - gntutils.h \
    - gntwindow.h \
    - gntwm.h \
    - gntws.h \
    - gnt.h
    -
    -libgnt_laincludedir=$(includedir)/gnt
    -libgnt_lainclude_HEADERS = \
    - $(libgnt_la_headers)
    -
    -libgnt_la_DEPENDENCIES =
    -libgnt_la_LDFLAGS = -export-dynamic -version-info $(GNT_LT_VERSION_INFO) -no-undefined
    -libgnt_la_LIBADD = \
    - $(GLIB_LIBS) \
    - $(GNT_LIBS) \
    - $(LIBXML_LIBS) \
    - $(INTROSPECTION_LIBS) \
    - $(PY_LIBS)
    -
    -if IS_WIN32
    -
    -.rc.o: %.rc
    - $(AM_V_GEN)$(WINDRES) -i $< -o $@
    -
    -LIBGNT_WIN32RES = libgnt_winres.o
    -libgnt_la_DEPENDENCIES += $(LIBGNT_WIN32RES)
    -libgnt_la_LDFLAGS += -Wl,$(LIBGNT_WIN32RES)
    -
    -libgnt_la_LIBADD += -lgmodule-2.0
    -
    -endif
    -
    -AM_CPPFLAGS = \
    - $(GLIB_CFLAGS) \
    - $(GNT_CFLAGS) \
    - $(DEBUG_CFLAGS) \
    - $(LIBXML_CFLAGS) \
    - $(INTROSPECTION_CFLAGS) \
    - $(PY_CFLAGS)
    -
    --include $(INTROSPECTION_MAKEFILE)
    -INTROSPECTION_GIRS =
    -INTROSPECTION_SCANNER_ARGS = \
    - --add-include-path=$(prefix)/share/gir-1.0 \
    - --warn-all
    -INTROSPECTION_COMPILER_ARGS = --includedir=$(prefix)/share/gir-1.0
    -
    -if HAVE_INTROSPECTION
    -introspection_sources = $(libgnt_lainclude_HEADERS)
    -
    -Gnt-$(GNT_MAJOR_VERSION).$(GNT_MINOR_VERSION).gir: $(builddir)/libgnt.la
    -Gnt_2_9_gir_INCLUDES = GObject-2.0
    -Gnt_2_9_gir_CFLAGS = \
    - $(INCLUDES) \
    - $(GLIB_CFLAGS) \
    - $(GNT_CFLAGS) \
    - $(LIBXML_CFLAGS) \
    - $(INTROSPECTION_CFLAGS) \
    - $(PY_CFLAGS)
    -
    -Gnt_2_9_gir_LIBS = $(builddir)/libgnt.la
    -Gnt_2_9_gir_FILES = $(introspection_sources)
    -INTROSPECTION_GIRS += Gnt-$(GNT_MAJOR_VERSION).$(GNT_MINOR_VERSION).gir
    -
    -girdir = \
    - $(prefix)/share/gir-1.0 \
    - $(INTROSPECTION_GIRDIR)
    -gir_DATA = $(INTROSPECTION_GIRS)
    -
    -typelibdir = \
    - $(prefix)/share/gir-1.0 \
    - $(INTROSPECTION_TYPELIBDIR)
    -typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib)
    -
    -CLEANFILES = $(gir_DATA) $(typelib_DATA)
    -endif
    --- a/finch/libgnt/autogen.sh Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,48 +0,0 @@
    -#!/bin/sh
    -
    -(libtoolize --version) < /dev/null > /dev/null 2>&1 || {
    - echo;
    - echo "You must have libtool installed to compile LibGNT";
    - echo;
    - exit;
    -}
    -
    -(automake --version) < /dev/null > /dev/null 2>&1 || {
    - echo;
    - echo "You must have automake installed to compile LibGNT";
    - echo;
    - exit;
    -}
    -
    -(autoconf --version) < /dev/null > /dev/null 2>&1 || {
    - echo;
    - echo "You must have autoconf installed to compile LibGNT";
    - echo;
    - exit;
    -}
    -
    -echo "Generating configuration files for LibGNT, please wait...."
    -echo;
    -
    -echo "Running libtoolize, please ignore non-fatal messages...."
    -echo n | libtoolize --copy --force || exit;
    -
    -# Add other directories to this list if people continue to experience
    -# brokennesses ... Obviously the real answer is for them to fix it
    -# themselves, but for Luke's sake we have this.
    -for dir in "/usr/local/share/aclocal" \
    - "/opt/gnome-1.4/share/aclocal"
    -do
    - if test -d $dir ; then
    - ACLOCAL_FLAGS="$ACLOCAL_FLAGS -I $dir"
    - fi
    -done
    -
    -libtoolize -c -f --automake
    -aclocal $ACLOCAL_FLAGS || exit;
    -autoheader || exit;
    -automake --add-missing --copy;
    -autoconf || exit;
    -automake || exit;
    -./configure $@
    -
    --- a/finch/libgnt/configure.ac Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,297 +0,0 @@
    -dnl Process this file with autoconf to produce a configure script.
    -AC_PREREQ([2.50])
    -
    -# UPDATING VERSION NUMBERS FOR RELEASES
    -#
    -# gnt_micro_version += 1
    -#
    -# If any functions have been added to libgnt:
    -# gnt_micro_version = 0
    -# gnt_minor_version += 1
    -# gnt_lt_current += 1
    -#
    -# If backwards compatibility has been broken in libgnt:
    -# gnt_micro_version = 0
    -# gnt_minor_version = 0
    -# gnt_major_version += 1;
    -# gnt_lt_current += 1
    -#
    -# gnt_version_suffix should be similar to one of the following:
    -# For beta releases: [beta2]
    -# For code under development: [devel]
    -# For production releases: []
    -#
    -# Make sure to update ../../configure.ac with libgnt version changes.
    -#
    -
    -m4_define([gnt_lt_current], [8])
    -m4_define([gnt_major_version], [2])
    -m4_define([gnt_minor_version], [8])
    -m4_define([gnt_micro_version], [0])
    -m4_define([gnt_version_suffix], [devel])
    -m4_define([gnt_version],
    - [gnt_major_version.gnt_minor_version.gnt_micro_version])
    -m4_define([gnt_display_version], gnt_version[]m4_ifdef([gnt_version_suffix],[gnt_version_suffix]))
    -
    -AC_INIT([libgnt], [gnt_display_version], [devel@pidgin.im])
    -AC_CANONICAL_SYSTEM
    -AM_CONFIG_HEADER(config.h)
    -AC_CONFIG_AUX_DIR([.])
    -AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
    -
    -GNT_MAJOR_VERSION=gnt_major_version
    -GNT_MINOR_VERSION=gnt_minor_version
    -GNT_MICRO_VERSION=gnt_micro_version
    -GNT_VERSION=gnt_display_version
    -AC_SUBST(GNT_MAJOR_VERSION)
    -AC_SUBST(GNT_MINOR_VERSION)
    -AC_SUBST(GNT_MICRO_VERSION)
    -AC_SUBST(GNT_VERSION)
    -
    -GNT_LT_VERSION_INFO="gnt_lt_current:gnt_micro_version:gnt_minor_version"
    -AC_SUBST(GNT_LT_VERSION_INFO)
    -
    -AC_PATH_PROG(sedpath, sed)
    -
    -dnl Storing configure arguments
    -AC_DEFINE_UNQUOTED(CONFIG_ARGS, "$ac_configure_args", [configure arguments])
    -
    -dnl Checks for programs.
    -AC_PROG_CC
    -AC_DISABLE_STATIC
    -AM_PROG_LIBTOOL
    -LIBTOOL="$LIBTOOL --silent"
    -AC_PROG_INSTALL
    -
    -dnl we don't use autobreak on cygwin!!
    -dnl AC_CYGWIN
    -
    -dnl Checks for header files.
    -AC_HEADER_SYS_WAIT
    -AC_CHECK_HEADERS(unistd.h)
    -
    -dnl Checks for typedefs, structures, and compiler characteristics.
    -
    -AC_C_BIGENDIAN
    -
    -dnl Checks for library functions.
    -AC_CHECK_FUNCS(strdup)
    -
    -dnl to prevent the g_stat()/g_unlink() crash,
    -dnl (09:50:07) Robot101: LSchiere2: it's easy. +LC_SYS_LARGEFILE somewhere in configure.ac
    -AC_SYS_LARGEFILE
    -
    -if test "x$enable_debug" = "xyes" ; then
    - AC_DEFINE(DEBUG, 1, [Define if debugging is enabled.])
    -fi
    -
    -if test "x$enable_deprecated" = "xno"; then
    - DEBUG_CFLAGS="$DEBUG_CFLAGS -DG_DISABLE_DEPRECATED -DGDK_DISABLE_DEPRECATED -DGDK_PIXBUF_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
    -fi
    -
    -if test "x$GCC" = "xyes"; then
    - dnl We enable -Wall later.
    - dnl If it's set after the warning CFLAGS in the compiler invocation, it counteracts the -Wno... flags.
    - dnl This leads to warnings we don't want.
    - CFLAGS=`echo $CFLAGS |$sedpath 's/-Wall//'`
    -
    - dnl ENABLE WARNINGS SUPPORTED BY THE VERSION OF GCC IN USE
    - dnl
    - dnl Future Possibilities
    - dnl
    - dnl Consider adding -Wbad-function-cast.
    - dnl This leads to spurious warnings using GPOINTER_TO_INT(), et al. directly on a function call.
    - dnl We'd need an intermediate variable.
    - dnl
    - dnl Consider adding -Wfloat-equal.
    - dnl This leads to warnings with Perl.
    - dnl Perhaps we could write ugly configure magic and pass -Wno-float-equal down to that subdirectory.
    - dnl On the other hand, it's probably actually broken, so maybe the Perl folks should fix that?
    - dnl
    - dnl Consider removing -Wno-sign-compare (from the -Wextra set) and fixing all those cases.
    - dnl This is likely non-trivial.
    - dnl
    - for newflag in \
    - "-Waggregate-return" \
    - "-Wcast-align" \
    - "-Wdeclaration-after-statement" \
    - "-Werror-implicit-function-declaration" \
    - "-Wextra -Wno-sign-compare -Wno-unused-parameter" \
    - "-Winit-self" \
    - "-Wmissing-declarations" \
    - "-Wmissing-prototypes" \
    - "-Wnested-externs" \
    - "-Wpointer-arith" \
    - "-Wundef" \
    - ; do
    - orig_CFLAGS="$CFLAGS"
    - CFLAGS="$CFLAGS $newflag"
    - AC_MSG_CHECKING(for $newflag option to gcc)
    - AC_TRY_COMPILE([], [
    - int main() {return 0;}
    - ], [
    - AC_MSG_RESULT(yes)
    - CFLAGS="$orig_CFLAGS"
    - DEBUG_CFLAGS="$DEBUG_CFLAGS $newflag"
    - ], [
    - AC_MSG_RESULT(no)
    - CFLAGS="$orig_CFLAGS"
    - ])
    - done
    -
    - if test "x$enable_fortify" = "xyes"; then
    - AC_MSG_CHECKING(for FORTIFY_SOURCE support)
    - AC_TRY_COMPILE([#include <features.h>], [
    - int main() {
    - #if !(__GNUC_PREREQ (4, 1) \
    - || (defined __GNUC_RH_RELEASE__ && __GNUC_PREREQ (4, 0)) \
    - || (defined __GNUC_RH_RELEASE__ && __GNUC_PREREQ (3, 4) \
    - && __GNUC_MINOR__ == 4 \
    - && (__GNUC_PATCHLEVEL__ > 2 \
    - || (__GNUC_PATCHLEVEL__ == 2 && __GNUC_RH_RELEASE__ >= 8))))
    - #error No FORTIFY_SOURCE support
    - #endif
    - return 0;
    - }
    - ], [
    - AC_MSG_RESULT(yes)
    - DEBUG_CFLAGS="$DEBUG_CFLAGS -D_FORTIFY_SOURCE=2"
    - ], [
    - AC_MSG_RESULT(no)
    - ])
    - fi
    -
    - DEBUG_CFLAGS="-Wall $DEBUG_CFLAGS"
    - CFLAGS="-g $CFLAGS"
    -fi
    -AC_SUBST(CFLAGS)
    -
    -PKG_CHECK_MODULES(GLIB, [glib-2.0 >= 2.0.0 gobject-2.0 gmodule-2.0],,
    - [
    - AC_MSG_ERROR([
    -*** GLib 2.0 is required to build LibGNT; please make sure you have the GLib
    -*** development headers installed. The latest version of GLib is
    -*** always available at http://www.gtk.org/.])
    - ])
    -AC_SUBST(GLIB_CFLAGS)
    -AC_SUBST(GLIB_LIBS)
    -
    -
    -AC_MSG_CHECKING(for me pot o' gold)
    -AC_MSG_RESULT(no)
    -AC_CHECK_HEADERS(sys/wait.h)
    -#AC_CHECK_FUNC(wcwidth, [AC_DEFINE([HAVE_WCWIDTH], [1], [Define to 1 if you have wcwidth function.])])
    -#AC_VAR_TIMEZONE_EXTERNALS
    -
    -GNT_CFLAGS=
    -GNT_LIBS=
    -AC_ARG_WITH(ncurses-headers, [AC_HELP_STRING([--with-ncurses-headers=DIR],
    - [compile finch against the ncurses includes in DIR])],
    - [ac_ncurses_includes="$withval"], [ac_ncurses_includes=""])
    -AC_CHECK_LIB(ncursesw, initscr, [GNT_LIBS="-lncursesw"], [enable_gnt=no])
    -AC_CHECK_LIB(panelw, update_panels, [GNT_LIBS="$GNT_LIBS -lpanelw"], [enable_gnt=no])
    -
    -# If ncursesw is not found, look for plain old ncurses
    -if test "x$enable_gnt" = "xno"; then
    - AC_CHECK_LIB(ncurses, initscr, [[GNT_LIBS="-lncurses"] [enable_gnt=yes]], [enable_gnt=no])
    - AC_CHECK_LIB(panel, update_panels, [[GNT_LIBS="$GNT_LIBS -lpanel"] [enable_gnt=yes]], [enable_gnt=no])
    - AC_DEFINE(NO_WIDECHAR, [1], [Define to 1 if you do not have ncursesw.])
    -else
    - dnl # Some distros put the headers in ncursesw/, some don't
    - found_ncurses_h=no
    - for location in $ac_ncurses_includes /usr/include/ncursesw /usr/include
    - do
    - f="$location/ncurses.h"
    - orig_CFLAGS="$CFLAGS"
    - orig_CPPFLAGS="$CPPFLAGS"
    - CFLAGS="$CFLAGS -I$location"
    - CPPFLAGS="$CPPFLAGS -I$location"
    - AC_CHECK_HEADER($f,[
    - AC_MSG_CHECKING([if $f supports wide characters])
    - AC_TRY_COMPILE([
    - #define _XOPEN_SOURCE_EXTENDED
    - #include <$f>
    - ], [
    - #ifndef get_wch
    - # error get_wch not found!
    - #endif
    - ], [
    - dir=$location
    - if test x"$dir" != x"." ; then
    - GNT_CFLAGS="-I$dir/"
    - else
    - GNT_CFLAGS=""
    - fi
    -
    - found_ncurses_h=yes
    - CFLAGS="$orig_CFLAGS"
    - CPPFLAGS="$orig_CPPFLAGS"
    - AC_MSG_RESULT([yes])
    - break
    - ], [
    - CFLAGS="$orig_CFLAGS"
    - CPPFLAGS="$orig_CPPFLAGS"
    - AC_MSG_RESULT([no])
    - ])
    - ])
    - done
    - if test x"$found_ncurses_h" != "xyes"; then
    - enable_gnt="no"
    - fi
    -fi
    -AC_SUBST(GNT_CFLAGS)
    -AC_SUBST(GNT_LIBS)
    -
    -if test "x$enable_gnt" = "xno"; then
    - AC_MSG_ERROR([
    -*** You need ncursesw or ncurses and its header files.])
    -fi
    -
    -dnl Check for Python headers (currently useful only for libgnt)
    -dnl (Thanks to XChat)
    -AC_PATH_PROG(pythonpath, python)
    -if test "_$pythonpath" != _ ; then
    - AC_MSG_CHECKING(for Python compile flags)
    - PY_PREFIX=`$pythonpath -c 'import sys ; print sys.prefix'`
    - PY_EXEC_PREFIX=`$pythonpath -c 'import sys ; print sys.exec_prefix'`
    - changequote(<<, >>)dnl
    - PY_VERSION=`$pythonpath -c 'import sys ; print sys.version[0:3]'`
    - PY_MAJOR=`$pythonpath -c 'import sys ; print sys.version[0:2]'`
    - changequote([, ])dnl
    - if test -f $PY_PREFIX/include/python$PY_VERSION/Python.h -a "$PY_MAJOR" = "2."; then
    - AC_CHECK_LIB(pthread, pthread_create, )
    - AC_CHECK_LIB(util, openpty, )
    - AC_CHECK_LIB(db, dbopen, )
    - PY_LIBS="-lpython$PY_VERSION -L$PY_EXEC_PREFIX/lib/python$PY_VERSION/config"
    - PY_CFLAGS="-I$PY_PREFIX/include/python$PY_VERSION"
    - AC_DEFINE(USE_PYTHON, [1], [Define if python headers are available.])
    - AC_MSG_RESULT(ok)
    - else
    - AC_MSG_RESULT([Can't find Python.h])
    - PY_LIBS=""
    - PY_CFLAGS=""
    - fi
    -fi
    -AC_SUBST(PY_CFLAGS)
    -AC_SUBST(PY_LIBS)
    -
    -dnl Check for libxml
    -have_libxml=yes
    -PKG_CHECK_MODULES(LIBXML, [libxml-2.0], , [
    - AC_MSG_RESULT(no)
    - have_libxml=no
    - ])
    -AC_SUBST(LIBXML_CFLAGS)
    -AC_SUBST(LIBXML_LIBS)
    -
    -if test "x$have_libxml" = "xno"; then
    - AC_DEFINE(NO_LIBXML, 1, [Do not have libxml2.])
    -fi
    -
    -AM_CONDITIONAL(PURPLE_AVAILABLE, false)
    -
    -AC_OUTPUT([Makefile
    - gnt.pc
    - wms/Makefile
    - ])
    -
    --- a/finch/libgnt/gnt.pc.in Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,14 +0,0 @@
    -prefix=@prefix@
    -exec_prefix=@exec_prefix@
    -libdir=@libdir@
    -includedir=@includedir@
    -datarootdir=@datarootdir@
    -datadir=@datadir@
    -sysconfdir=@sysconfdir@
    -
    -Name: LibGNT
    -Description: Glib Ncurses Toolkit is a collection of curses-widgets.
    -Version: @VERSION@
    -Requires: glib-2.0
    -Cflags: -I${includedir}/gnt
    -Libs: -L${libdir} -lgnt
    --- a/finch/libgnt/gntmain.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/finch/libgnt/gntmain.c Thu Nov 23 22:30:26 2017 -0600
    @@ -551,10 +551,11 @@
    #ifdef SIGWINCH
    static void (*org_winch_handler)(int);
    +static void (*org_winch_handler_sa)(int, siginfo_t *, void *);
    #endif
    static void
    -sighandler(int sig)
    +sighandler(int sig, siginfo_t *info, void *data)
    {
    switch (sig) {
    #ifdef SIGWINCH
    @@ -563,18 +564,17 @@
    g_idle_add((GSourceFunc)refresh_screen, NULL);
    if (org_winch_handler)
    org_winch_handler(sig);
    - signal(SIGWINCH, sighandler);
    + if (org_winch_handler_sa)
    + org_winch_handler_sa(sig, info, data);
    break;
    #endif
    #ifndef _WIN32
    case SIGCHLD:
    clean_pid();
    - signal(SIGCHLD, sighandler);
    break;
    #endif
    case SIGINT:
    ask_before_exit();
    - signal(SIGINT, sighandler);
    break;
    }
    }
    @@ -602,6 +602,10 @@
    {
    char *filename;
    const char *locale;
    + struct sigaction act;
    +#ifdef SIGWINCH
    + struct sigaction oact;
    +#endif
    if (channel)
    return;
    @@ -654,14 +658,26 @@
    werase(stdscr);
    wrefresh(stdscr);
    + act.sa_sigaction = sighandler;
    + sigemptyset(&act.sa_mask);
    + act.sa_flags = SA_SIGINFO;
    +
    #ifdef SIGWINCH
    - org_winch_handler = signal(SIGWINCH, sighandler);
    + org_winch_handler = NULL;
    + org_winch_handler_sa = NULL;
    + sigaction(SIGWINCH, &act, &oact);
    + if (oact.sa_flags & SA_SIGINFO)
    + {
    + org_winch_handler_sa = oact.sa_sigaction;
    + }
    + else if (oact.sa_handler != SIG_DFL && oact.sa_handler != SIG_IGN)
    + {
    + org_winch_handler = oact.sa_handler;
    + }
    #endif
    -#ifndef _WIN32
    - signal(SIGCHLD, sighandler);
    + sigaction(SIGCHLD, &act, NULL);
    + sigaction(SIGINT, &act, NULL);
    signal(SIGPIPE, SIG_IGN);
    -#endif
    - signal(SIGINT, sighandler);
    #if !GLIB_CHECK_VERSION(2, 36, 0)
    /* GLib type system is automaticaly initialized since 2.36. */
    --- a/finch/libgnt/gntwm.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/finch/libgnt/gntwm.c Thu Nov 23 22:30:26 2017 -0600
    @@ -166,37 +166,37 @@
    cchar_t ch;
    PANEL *below = panel;
    - sx = panel->win->_begx;
    - ex = panel->win->_maxx + sx;
    - sy = panel->win->_begy;
    - ey = panel->win->_maxy + sy;
    + sx = getbegx(panel->win);
    + ex = getmaxx(panel->win) + sx;
    + sy = getbegy(panel->win);
    + ey = getmaxy(panel->win) + sy;
    while ((below = panel_below(below)) != NULL) {
    - if (sy > below->win->_begy + below->win->_maxy ||
    - ey < below->win->_begy)
    + if (sy > getbegy(below->win) + getmaxy(below->win) ||
    + ey < getbegy(below->win))
    continue;
    - if (sx > below->win->_begx + below->win->_maxx ||
    - ex < below->win->_begx)
    + if (sx > getbegx(below->win) + getmaxx(below->win) ||
    + ex < getbegx(below->win))
    continue;
    - for (y = MAX(sy, below->win->_begy); y <= MIN(ey, below->win->_begy + below->win->_maxy); y++) {
    - if (mvwin_wch(below->win, y - below->win->_begy, sx - 1 - below->win->_begx, &ch) != OK)
    + for (y = MAX(sy, getbegy(below->win)); y <= MIN(ey, getbegy(below->win) + getmaxy(below->win)); y++) {
    + if (mvwin_wch(below->win, y - getbegy(below->win), sx - 1 - getbegx(below->win), &ch) != OK)
    goto right;
    w = widestringwidth(ch.chars);
    if (w > 1 && (ch.attr & 1)) {
    ch.chars[0] = ' ';
    ch.attr &= ~ A_CHARTEXT;
    - mvwadd_wch(below->win, y - below->win->_begy, sx - 1 - below->win->_begx, &ch);
    - touchline(below->win, y - below->win->_begy, 1);
    + mvwadd_wch(below->win, y - getbegy(below->win), sx - 1 - getbegx(below->win), &ch);
    + touchline(below->win, y - getbegy(below->win), 1);
    }
    right:
    - if (mvwin_wch(below->win, y - below->win->_begy, ex + 1 - below->win->_begx, &ch) != OK)
    + if (mvwin_wch(below->win, y - getbegy(below->win), ex + 1 - getbegx(below->win), &ch) != OK)
    continue;
    w = widestringwidth(ch.chars);
    if (w > 1 && !(ch.attr & 1)) {
    ch.chars[0] = ' ';
    ch.attr &= ~ A_CHARTEXT;
    - mvwadd_wch(below->win, y - below->win->_begy, ex + 1 - below->win->_begx, &ch);
    - touchline(below->win, y - below->win->_begy, 1);
    + mvwadd_wch(below->win, y - getbegy(below->win), ex + 1 - getbegx(below->win), &ch);
    + touchline(below->win, y - getbegy(below->win), 1);
    }
    }
    }
    --- a/finch/libgnt/meson.build Thu Oct 05 21:24:11 2017 -0500
    +++ b/finch/libgnt/meson.build Thu Nov 23 22:30:26 2017 -0600
    @@ -76,11 +76,14 @@
    link_with : libgnt,
    dependencies : [ncurses, glib])
    -configure_file(input : 'gnt.pc.in',
    - output : 'gnt.pc',
    - configuration : pkg_conf,
    - install : true,
    - install_dir : get_option('libdir') + '/pkgconfig')
    +pkgconfig.generate(
    + name : 'LibGNT',
    + description : 'Glib Ncurses Toolkit is a collection of curses-widgets.',
    + version : purple_display_version,
    + filebase : 'gnt',
    + subdirs : 'gnt',
    + libraries : [libgnt],
    + requires : ['glib-2.0'])
    if enable_introspection
    libgnt_gir = gnome.generate_gir(libgnt,
    @@ -94,5 +97,6 @@
    endif
    subdir('wms')
    +subdir('test')
    endif # enable_consoleui
    --- a/finch/libgnt/test/Makefile Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,16 +0,0 @@
    -CC=gcc
    -CFLAGS=`pkg-config --cflags gobject-2.0 gmodule-2.0` -g -I../ -DSTANDALONE -I/usr/include/ncursesw/
    -LDFLAGS=`pkg-config --libs gobject-2.0 gmodule-2.0 gnt` -pg
    -
    -EXAMPLES=combo focus tv multiwin keys menu parse
    -
    -all:
    - make examples
    -
    -clean:
    - rm -f $(EXAMPLES) *.so wm
    -
    -WM: wm
    - for i in $(EXAMPLES); do gcc -shared $(CFLAGS) -USTANDALONE $(LDFLAGS) $${i}.c -o $${i}.so ; done
    -
    -examples: $(EXAMPLES)
    --- /dev/null Thu Jan 01 00:00:00 1970 +0000
    +++ b/finch/libgnt/test/meson.build Thu Nov 23 22:30:26 2017 -0600
    @@ -0,0 +1,13 @@
    +foreach prog : ['combo', 'focus', 'tv', 'multiwin', 'keys', 'menu', 'parse']
    + executable(prog,
    + prog + '.c',
    + c_args : '-DSTANDALONE',
    + dependencies : [libgnt_dep, gobject, gmodule],
    + build_by_default : false)
    +endforeach
    +
    +shared_library('wm',
    + 'wm.c',
    + name_prefix : '',
    + dependencies : [libgnt_dep, gobject, gmodule],
    + build_by_default : false)
    --- a/finch/libgnt/wms/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,41 +0,0 @@
    -wms = irssi.la
    -if PURPLE_AVAILABLE
    -# These custom wms depend on libpurple
    -purple_wms = s.la
    -else
    -purple_wms =
    -endif
    -
    -s_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -irssi_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -
    -plugin_LTLIBRARIES = \
    - $(wms) \
    - $(purple_wms)
    -
    -plugindir = $(libdir)/gnt
    -
    -irssi_la_SOURCES = irssi.c
    -irssi_la_LIBADD = \
    - $(GLIB_LIBS) \
    - ../libgnt.la
    -
    -s_la_SOURCES = s.c
    -s_la_LIBADD = \
    - $(GLIB_LIBS) \
    - ../libgnt.la \
    - $(top_builddir)/libpurple/libpurple.la
    -
    -EXTRA_DIST =
    -
    -AM_CPPFLAGS = \
    - -I$(top_srcdir)/libpurple \
    - -I$(top_builddir)/libpurple \
    - -I$(top_srcdir)/finch \
    - -I$(top_srcdir)/finch/libgnt \
    - $(DEBUG_CFLAGS) \
    - $(GLIB_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(GNT_CFLAGS) \
    - $(PLUGIN_CFLAGS)
    -
    --- a/finch/meson.build Thu Oct 05 21:24:11 2017 -0500
    +++ b/finch/meson.build Thu Nov 23 22:30:26 2017 -0600
    @@ -91,11 +91,14 @@
    dependencies : [libpurple_dep, libgnt_dep, libfinch_dep],
    install : true)
    - configure_file(input : 'finch.pc.in',
    - output : 'finch.pc',
    - configuration : pkg_conf,
    - install : true,
    - install_dir : get_option('libdir') + '/pkgconfig')
    + pkgconfig.generate(
    + name : 'Finch',
    + description : 'Finch is an instant messenger application that uses libpurple for protocol support and ncurses (libgnt) for the UI.',
    + version : purple_display_version,
    + filebase : 'finch',
    + subdirs : 'finch',
    + libraries : [libfinch],
    + requires : ['gnt', 'purple-3'])
    if enable_introspection
    introspection_sources = libfinch_headers
    --- a/finch/plugins/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,63 +0,0 @@
    -gntclipboard_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -gntgf_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -gnthistory_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -gntlastlog_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -gnttinyurl_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -grouping_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -
    -if PLUGINS
    -
    -plugin_LTLIBRARIES = \
    - gntclipboard.la \
    - gntgf.la \
    - gnthistory.la \
    - gntlastlog.la \
    - gnttinyurl.la \
    - grouping.la
    -
    -plugindir = @FINCH_PLUGINDIR@
    -
    -gntclipboard_la_SOURCES = gntclipboard.c
    -gntgf_la_SOURCES = gntgf.c
    -gnthistory_la_SOURCES = gnthistory.c
    -gntlastlog_la_SOURCES = lastlog.c
    -gnttinyurl_la_SOURCES = gnttinyurl.c
    -grouping_la_SOURCES = grouping.c
    -
    -gntclipboard_la_CFLAGS = $(X11_CFLAGS)
    -gntgf_la_CFLAGS = $(X11_CFLAGS)
    -
    -gntclipboard_la_LIBADD = @FINCH_LIBS@ $(X11_LIBS)
    -gntgf_la_LIBADD = @FINCH_LIBS@ $(X11_LIBS)
    -gnthistory_la_LIBADD = @FINCH_LIBS@
    -gntlastlog_la_LIBADD = @FINCH_LIBS@
    -gnttinyurl_la_LIBADD = @FINCH_LIBS@
    -grouping_la_LIBADD = @FINCH_LIBS@
    -
    -endif # PLUGINS
    -
    -EXTRA_DIST = pietray.py
    -
    -AM_CPPFLAGS = \
    - -I$(top_builddir)/libpurple \
    - -I$(top_srcdir)/libpurple \
    - -I$(top_srcdir) \
    - -I$(top_srcdir)/finch \
    - -I$(top_srcdir)/finch/libgnt \
    - $(DEBUG_CFLAGS) \
    - $(GLIB_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(GNT_CFLAGS) \
    - $(PLUGIN_CFLAGS)
    -
    -#
    -# This part allows people to build their own plugins in here.
    -# Yes, it's a mess.
    -#
    -SUFFIXES = .c .so
    -.c.so:
    - $(LIBTOOL) --mode=compile $(CC) -DHAVE_CONFIG_H -I$(top_builddir) $(AM_CPPFLAGS) $(CFLAGS) -c $< -o tmp$@.lo $(PLUGIN_CFLAGS)
    - $(LIBTOOL) --mode=link $(CC) $(CFLAGS) -o libtmp$@.la -rpath $(plugindir) tmp$@.lo $(LIBS) $(LDFLAGS) -module @PLUGIN_LDFLAGS@ $(PLUGIN_LIBS)
    - @rm -f tmp$@.lo tmp$@.o libtmp$@.la
    - @cp .libs/libtmp$@.so.so $@
    - @rm -rf .libs/libtmp$@.*
    --- a/finch/plugins/gnthistory.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/finch/plugins/gnthistory.c Thu Nov 23 22:30:26 2017 -0600
    @@ -46,6 +46,8 @@
    GList *logs = NULL;
    const char *alias = name;
    PurpleLogReadFlags flags;
    + GDateTime *dt;
    + char *date;
    char *history;
    char *header;
    PurpleMessageFlags mflag;
    @@ -113,9 +115,11 @@
    mflag = PURPLE_MESSAGE_NO_LOG | PURPLE_MESSAGE_SYSTEM | PURPLE_MESSAGE_DELAYED;
    history = purple_log_read((PurpleLog*)logs->data, &flags);
    - header = g_strdup_printf(_("<b>Conversation with %s on %s:</b><br>"), alias,
    - purple_date_format_full(localtime(&((PurpleLog *)logs->data)->time)));
    + dt = g_date_time_to_local(((PurpleLog *)logs->data)->time);
    + date = g_date_time_format(dt, "%c");
    + header = g_strdup_printf(_("<b>Conversation with %s on %s:</b><br>"), alias, date);
    purple_conversation_write_system_message(c, header, mflag);
    + g_free(date);
    g_free(header);
    if (flags & PURPLE_LOG_READ_NO_NEWLINE)
    --- a/glib-tap.mk Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,135 +0,0 @@
    -# GLIB - Library of useful C routines
    -
    -AM_TESTS_ENVIRONMENT= \
    - G_TEST_SRCDIR="$(abs_srcdir)" \
    - G_TEST_BUILDDIR="$(abs_builddir)" \
    - G_DEBUG=gc-friendly \
    - MALLOC_CHECK_=2 \
    - MALLOC_PERTURB_=$$(($${RANDOM:-256} % 256))
    -LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) $(top_srcdir)/tap-driver.sh
    -LOG_COMPILER = $(top_srcdir)/tap-test
    -
    -NULL =
    -
    -# initialize variables for unconditional += appending
    -BUILT_SOURCES =
    -BUILT_EXTRA_DIST =
    -CLEANFILES = *.log *.trs
    -DISTCLEANFILES =
    -MAINTAINERCLEANFILES =
    -EXTRA_DIST =
    -TESTS =
    -
    -installed_test_LTLIBRARIES =
    -installed_test_PROGRAMS =
    -installed_test_SCRIPTS =
    -nobase_installed_test_DATA =
    -
    -noinst_LTLIBRARIES =
    -noinst_PROGRAMS =
    -noinst_SCRIPTS =
    -noinst_DATA =
    -
    -check_LTLIBRARIES =
    -check_PROGRAMS =
    -check_SCRIPTS =
    -check_DATA =
    -
    -# We support a fairly large range of possible variables. It is expected that all types of files in a test suite
    -# will belong in exactly one of the following variables.
    -#
    -# First, we support the usual automake suffixes, but in lowercase, with the customary meaning:
    -#
    -# test_programs, test_scripts, test_data, test_ltlibraries
    -#
    -# The above are used to list files that are involved in both uninstalled and installed testing. The
    -# test_programs and test_scripts are taken to be actual testcases and will be run as part of the test suite.
    -# Note that _data is always used with the nobase_ automake variable name to ensure that installed test data is
    -# installed in the same way as it appears in the package layout.
    -#
    -# In order to mark a particular file as being only for one type of testing, use 'installed' or 'uninstalled',
    -# like so:
    -#
    -# installed_test_programs, uninstalled_test_programs
    -# installed_test_scripts, uninstalled_test_scripts
    -# installed_test_data, uninstalled_test_data
    -# installed_test_ltlibraries, uninstalled_test_ltlibraries
    -#
    -# Additionally, we support 'extra' infixes for programs and scripts. This is used for support programs/scripts
    -# that should not themselves be run as testcases (but exist to be used from other testcases):
    -#
    -# test_extra_programs, installed_test_extra_programs, uninstalled_test_extra_programs
    -# test_extra_scripts, installed_test_extra_scripts, uninstalled_test_extra_scripts
    -#
    -# Additionally, for _scripts and _data, we support the customary dist_ prefix so that the named script or data
    -# file automatically end up in the tarball.
    -#
    -# dist_test_scripts, dist_test_data, dist_test_extra_scripts
    -# dist_installed_test_scripts, dist_installed_test_data, dist_installed_test_extra_scripts
    -# dist_uninstalled_test_scripts, dist_uninstalled_test_data, dist_uninstalled_test_extra_scripts
    -#
    -# Note that no file is automatically disted unless it appears in one of the dist_ variables. This follows the
    -# standard automake convention of not disting programs scripts or data by default.
    -#
    -# test_programs, test_scripts, uninstalled_test_programs and uninstalled_test_scripts (as well as their disted
    -# variants) will be run as part of the in-tree 'make check'. These are all assumed to be runnable under
    -# gtester. That's a bit strange for scripts, but it's possible.
    -
    -TESTS += $(test_programs) $(test_scripts) $(uninstalled_test_programs) $(uninstalled_test_scripts) \
    - $(dist_test_scripts) $(dist_uninstalled_test_scripts)
    -
    -# Note: build even the installed-only targets during 'make check' to ensure that they still work.
    -# We need to do a bit of trickery here and manage disting via EXTRA_DIST instead of using dist_ prefixes to
    -# prevent automake from mistreating gmake functions like $(wildcard ...) and $(addprefix ...) as if they were
    -# filenames, including removing duplicate instances of the opening part before the space, eg. '$(addprefix'.
    -all_test_programs = $(test_programs) $(uninstalled_test_programs) $(installed_test_programs) \
    - $(test_extra_programs) $(uninstalled_test_extra_programs) $(installed_test_extra_programs)
    -all_test_scripts = $(test_scripts) $(uninstalled_test_scripts) $(installed_test_scripts) \
    - $(test_extra_scripts) $(uninstalled_test_extra_scripts) $(installed_test_extra_scripts)
    -all_dist_test_scripts = $(dist_test_scripts) $(dist_uninstalled_test_scripts) $(dist_installed_test_scripts) \
    - $(dist_test_extra_scripts) $(dist_uninstalled_test_extra_scripts) $(dist_installed_test_extra_scripts)
    -all_test_scripts += $(all_dist_test_scripts)
    -EXTRA_DIST += $(all_dist_test_scripts)
    -all_test_data = $(test_data) $(uninstalled_test_data) $(installed_test_data)
    -all_dist_test_data = $(dist_test_data) $(dist_uninstalled_test_data) $(dist_installed_test_data)
    -all_test_data += $(all_dist_test_data)
    -EXTRA_DIST += $(all_dist_test_data)
    -all_test_ltlibs = $(test_ltlibraries) $(uninstalled_test_ltlibraries) $(installed_test_ltlibraries)
    -
    -if ENABLE_ALWAYS_BUILD_TESTS
    -noinst_LTLIBRARIES += $(all_test_ltlibs)
    -noinst_PROGRAMS += $(all_test_programs)
    -noinst_SCRIPTS += $(all_test_scripts)
    -noinst_DATA += $(all_test_data)
    -else
    -check_LTLIBRARIES += $(all_test_ltlibs)
    -check_PROGRAMS += $(all_test_programs)
    -check_SCRIPTS += $(all_test_scripts)
    -check_DATA += $(all_test_data)
    -endif
    -
    -if ENABLE_INSTALLED_TESTS
    -installed_test_PROGRAMS += $(test_programs) $(installed_test_programs) \
    - $(test_extra_programs) $(installed_test_extra_programs)
    -installed_test_SCRIPTS += $(test_scripts) $(installed_test_scripts) \
    - $(test_extra_scripts) $(installed_test_extra_scripts)
    -installed_test_SCRIPTS += $(dist_test_scripts) $(dist_test_extra_scripts) \
    - $(dist_installed_test_scripts) $(dist_installed_test_extra_scripts)
    -nobase_installed_test_DATA += $(test_data) $(installed_test_data)
    -nobase_installed_test_DATA += $(dist_test_data) $(dist_installed_test_data)
    -installed_test_LTLIBRARIES += $(test_ltlibraries) $(installed_test_ltlibraries)
    -installed_testcases = $(test_programs) $(installed_test_programs) \
    - $(test_scripts) $(installed_test_scripts) \
    - $(dist_test_scripts) $(dist_installed_test_scripts)
    -
    -installed_test_meta_DATA = $(installed_testcases:=.test)
    -
    -%.test: %$(EXEEXT) Makefile
    - $(AM_V_GEN) (echo '[Test]' > $@.tmp; \
    - echo 'Type=session' >> $@.tmp; \
    - echo 'Exec=$(installed_testdir)/$(notdir $<) --tap' >> $@.tmp; \
    - echo 'Output=TAP' >> $@.tmp; \
    - mv $@.tmp $@)
    -
    -CLEANFILES += $(installed_test_meta_DATA)
    -endif
    --- a/libpurple/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,506 +0,0 @@
    -EXTRA_DIST = \
    - dbus-analyze-functions.py \
    - dbus-analyze-signals.py \
    - dbus-analyze-types.py \
    - enums.c.in \
    - enums.h.in \
    - glibcompat.h \
    - purple-notifications-example \
    - purple-remote \
    - purple-send \
    - purple-send-async \
    - purple-url-handler \
    - purple.h.in \
    - tag.sh \
    - version.h.in \
    - Makefile.mingw \
    - data/purple-3.pc.in \
    - data/purple-3-uninstalled.pc.in \
    - data/purple-url-handler.desktop.in \
    - win32/global.mak \
    - win32/libc_interface.c \
    - win32/libc_interface.h \
    - win32/libc_internal.h \
    - win32/libpurplerc.rc.in \
    - win32/rules.mak \
    - win32/targets.mak \
    - win32/wpurpleerror.h \
    - win32/win32dep.c \
    - win32/win32dep.h
    -
    -SUBDIRS = . plugins protocols tests example
    -
    -purple_coresources = \
    - account.c \
    - accounts.c \
    - accountopt.c \
    - blistnode.c \
    - buddy.c \
    - buddylist.c \
    - buddyicon.c \
    - chat.c \
    - circularbuffer.c \
    - cmds.c \
    - connection.c \
    - contact.c \
    - conversation.c \
    - conversationtypes.c \
    - conversations.c \
    - core.c \
    - countingnode.c \
    - debug.c \
    - e2ee.c \
    - eventloop.c \
    - group.c \
    - http.c \
    - idle.c \
    - image.c \
    - image-store.c \
    - keyring.c \
    - log.c \
    - media/backend-fs2.c \
    - media/backend-iface.c \
    - media/candidate.c \
    - media/codec.c \
    - media/enum-types.c \
    - media.c \
    - mediamanager.c \
    - memorypool.c \
    - message.c \
    - mime.c \
    - nat-pmp.c \
    - network.c \
    - notify.c \
    - plugins.c \
    - pluginpref.c \
    - pounce.c \
    - prefs.c \
    - presence.c \
    - proxy.c \
    - protocol.c \
    - protocols.c \
    - purple-gio.c \
    - queuedoutputstream.c \
    - request.c \
    - request-datasheet.c \
    - roomlist.c \
    - savedstatuses.c \
    - server.c \
    - signals.c \
    - smiley-custom.c \
    - smiley-list.c \
    - smiley-parser.c \
    - smiley-theme.c \
    - smiley.c \
    - status.c \
    - stringref.c \
    - stun.c \
    - sound.c \
    - sound-theme.c \
    - sound-theme-loader.c \
    - sslconn.c \
    - theme.c \
    - theme-loader.c \
    - theme-manager.c \
    - tls-certificate.c \
    - tls-certificate-info.c \
    - trie.c \
    - upnp.c \
    - util.c \
    - version.c \
    - whiteboard.c \
    - xfer.c \
    - xmlnode.c
    -
    -purple_builtsources = \
    - enums.c
    -
    -purple_coreheaders = \
    - account.h \
    - accounts.h \
    - accountopt.h \
    - blistnode.h \
    - buddy.h \
    - buddylist.h \
    - buddyicon.h \
    - chat.h \
    - circularbuffer.h \
    - cmds.h \
    - connection.h \
    - contact.h \
    - conversation.h \
    - conversationtypes.h \
    - conversations.h \
    - core.h \
    - countingnode.h \
    - dbus-maybe.h \
    - debug.h \
    - e2ee.h \
    - eventloop.h \
    - group.h \
    - http.h \
    - idle.h \
    - image.h \
    - image-store.h \
    - keyring.h \
    - log.h \
    - media.h \
    - mediamanager.h \
    - memorypool.h \
    - message.h \
    - mime.h \
    - nat-pmp.h \
    - network.h \
    - notify.h \
    - plugins.h \
    - pluginpref.h \
    - pounce.h \
    - prefs.h \
    - presence.h \
    - proxy.h \
    - protocol.h \
    - protocols.h \
    - purple-gio.h \
    - queuedoutputstream.h \
    - request.h \
    - request-datasheet.h \
    - roomlist.h \
    - savedstatuses.h \
    - server.h \
    - signals.h \
    - smiley-custom.h \
    - smiley-list.h \
    - smiley-parser.h \
    - smiley-theme.h \
    - smiley.h \
    - status.h \
    - stringref.h \
    - stun.h \
    - sound.h \
    - sound-theme.h \
    - sound-theme-loader.h \
    - sslconn.h \
    - tests.h \
    - theme.h \
    - theme-loader.h \
    - theme-manager.h \
    - tls-certificate.h \
    - tls-certificate-info.h \
    - trie.h \
    - upnp.h \
    - util.h \
    - whiteboard.h \
    - xfer.h \
    - xmlnode.h
    -
    -if USE_VV
    -purple_coreheaders += media-gst.h
    -else
    -EXTRA_DIST += media-gst.h
    -endif
    -
    -if IS_WIN32
    -purple_coresources += \
    - win32/libc_interface.c \
    - win32/win32dep.c
    -
    -purple_coreheaders += \
    - win32/libc_interface.h \
    - win32/libc_internal.h \
    - win32/win32dep.h \
    - win32/wpurpleerror.h
    -
    -.rc.o: %.rc
    - $(AM_V_GEN)$(WINDRES) -i $< -o $@
    -
    -LIBPURPLE_WIN32RES = win32/libpurplerc.o
    -LIBPURPLE_WIN32RES_LDFLAGS = -Wl,$(LIBPURPLE_WIN32RES)
    -endif
    -
    -purple_mediaheaders = \
    - backend-iface.h \
    - candidate.h \
    - codec.h \
    - enum-types.h
    -
    -purple_builtheaders = purple.h version.h enums.h
    -
    -purple_enumheaders = \
    - $(srcdir)/account.h \
    - $(srcdir)/buddyicon.h \
    - $(srcdir)/connection.h \
    - $(srcdir)/conversation.h \
    - $(srcdir)/conversationtypes.h \
    - $(srcdir)/debug.h \
    - $(srcdir)/eventloop.h \
    - $(srcdir)/notify.h \
    - $(srcdir)/plugins.h \
    - $(srcdir)/protocol.h \
    - $(srcdir)/protocols.h \
    - $(srcdir)/roomlist.h \
    - $(srcdir)/status.h \
    - $(srcdir)/sound.h \
    - $(srcdir)/xfer.h \
    - $(srcdir)/xmlnode.h
    -
    -
    -# glib-mkenums doesn't handle VPATHs well, sed is used here to fix the
    -# include paths and documentation.
    -# Escaping possible . in $(srcdir) to \. for sed pattern.
    -enums.h: $(srcdir)/enums.h.in $(purple_enumheaders)
    - $(AM_V_GEN)$(GLIB_MKENUMS) --template $(srcdir)/enums.h.in $(purple_enumheaders) > $@
    - sed -i 's,$(subst .,\.,$(srcdir))/,,g' $@
    -
    -enums.c: $(srcdir)/enums.c.in $(purple_enumheaders)
    - $(AM_V_GEN)$(GLIB_MKENUMS) --template $(srcdir)/enums.c.in $(purple_enumheaders) > $@
    - sed -i 's,$(subst .,\.,$(srcdir))/,,g' $@
    -
    -CLEANFILES = \
    - enums.c \
    - enums.h
    -
    -DISTCLEANFILES = \
    - data/purple-url-handler.desktop
    -
    -if ENABLE_DBUS
    -
    -CLEANFILES += \
    - dbus-bindings.ch \
    - dbus-client-binding.c \
    - dbus-client-binding.h \
    - dbus-signals.ch \
    - dbus-types.ch \
    - dbus-types.h \
    - purple-client-bindings.ch \
    - purple-client-bindings.h \
    - purple.service
    -
    -# purple dbus server
    -
    -dbus_sources = dbus-server.c dbus-useful.c
    -dbus_headers = dbus-server.h dbus-bindings.h dbus-purple.h dbus-useful.h dbus-define-api.h dbus-types.h
    -
    -dbus_exported = dbus-useful.h dbus-define-api.h account.h accounts.h blistnode.h \
    - buddy.h buddylist.h buddyicon.h connection.h conversation.h \
    - conversationtypes.h conversations.h core.h xfer.h log.h notify.h \
    - prefs.h presence.h roomlist.h savedstatuses.h smiley.h smiley-list.h \
    - status.h server.h util.h xmlnode.h protocol.h protocols.h
    -
    -# Filter out enums.h as it doesn't actually generate anything.
    -# This way making from a VPATH and distcheck doesn't fail due
    -# to not being able to find the enums.h file if it's already
    -# been generated in the $(srcdir).
    -purple_build_coreheaders = $(addprefix $(srcdir)/, $(purple_coreheaders)) \
    - $(addprefix $(srcdir)/media/, $(purple_mediaheaders)) \
    - $(filter-out: enums.h, $(purple_builtheaders))
    -dbus_build_exported = $(addprefix $(srcdir)/, $(dbus_exported))
    -# We should probably make this better
    -dbus_signals = $(addprefix $(srcdir)/, $(purple_coresources)) \
    - $(srcdir)/protocols/irc/irc.c \
    - $(srcdir)/protocols/jabber/jabber.c
    -
    -dbus-types.ch: dbus-analyze-types.py $(purple_build_coreheaders)
    - $(AM_V_GEN) $(PYTHON) $(srcdir)/dbus-analyze-types.py --pattern=PURPLE_DBUS_DEFINE_TYPE\(%s\) -o $@ $(purple_build_coreheaders)
    -
    -dbus-types.h: dbus-analyze-types.py $(purple_build_coreheaders)
    - $(AM_V_GEN) $(PYTHON) $(srcdir)/dbus-analyze-types.py --pattern=PURPLE_DBUS_DECLARE_TYPE\(%s\) -o $@ $(purple_build_coreheaders)
    -
    -dbus-bindings.ch: dbus-analyze-functions.py $(dbus_exported)
    - $(AM_V_GEN)$(PYTHON) $(srcdir)/dbus-analyze-functions.py -o $@ $(dbus_build_exported)
    -
    -dbus-signals.ch: dbus-analyze-signals.py $(dbus_signals)
    - $(AM_V_GEN) $(PYTHON) $(srcdir)/dbus-analyze-signals.py -o $@ $(dbus_signals)
    -
    -dbus-server.$(OBJEXT): dbus-bindings.ch dbus-signals.ch dbus-types.ch dbus-types.h
    -dbus-server.lo: dbus-bindings.ch dbus-signals.ch dbus-types.ch dbus-types.h
    -
    -# Declare these as dependencies so they're built even if `make distcheck`
    -# is run immediately after configuring.
    -$(libpurple_la_OBJECTS): dbus-types.h enums.h
    -
    -# libpurple-client
    -
    -libpurple_client_lib = libpurple-client.la
    -
    -libpurple_client_la_SOURCES = purple-client.c purple-client.h
    -libpurple_client_la_LDFLAGS = -version-info $(PURPLE_LT_VERSION_INFO) -no-undefined
    -libpurple_client_la_LIBADD = $(DBUS_LIBS)
    -
    -purple-client-bindings.ch: dbus-analyze-functions.py $(dbus_exported)
    - $(AM_V_GEN) $(PYTHON) $(srcdir)/dbus-analyze-functions.py --client -o $@ $(dbus_build_exported)
    -
    -purple-client-bindings.h: dbus-analyze-types.py dbus-analyze-functions.py $(purple_coreheaders) $(addprefix media/, $(purple_mediaheaders)) $(purple_builtheaders) $(dbus_exported)
    - $(AM_V_GEN) $(PYTHON) $(srcdir)/dbus-analyze-types.py --keyword=enum --verbatim -o $@ $(purple_build_coreheaders)
    - $(AM_V_at) $(PYTHON) $(srcdir)/dbus-analyze-functions.py --client --headers --append -o $@ $(dbus_build_exported)
    -
    -$(libpurple_client_la_OBJECTS): purple-client-bindings.h purple-client-bindings.ch
    -
    -# purple-client-example
    -
    -purple_client_example_SOURCES = purple-client-example.c
    -
    -purple_client_example_DEPENDENCIES = libpurple-client.la
    -
    -purple_client_example_LDADD = \
    - libpurple-client.la \
    - $(GLIB_LIBS) \
    - $(DBUS_LIBS)
    -
    -bin_PROGRAMS = purple-client-example
    -
    -purple-client-example.$(OBJEXT): purple-client-bindings.h
    -
    -# scripts
    -
    -bin_SCRIPTS = purple-remote purple-send purple-send-async purple-url-handler
    -
    -BUILT_SOURCES = $(purple_builtheaders) \
    - $(purple_builtsources) \
    - dbus-bindings.ch \
    - dbus-signals.ch \
    - dbus-types.ch \
    - dbus-types.h \
    - purple-client-bindings.ch \
    - purple-client-bindings.h
    -
    -else
    -
    -BUILT_SOURCES = $(purple_builtheaders) $(purple_builtsources)
    -
    -# Declare these as dependencies so they're built even if `make distcheck`
    -# is run immediately after configuring.
    -$(libpurple_la_OBJECTS): enums.h
    -
    -endif
    -
    -lib_LTLIBRARIES = libpurple.la $(libpurple_client_lib)
    -
    -libpurple_la_SOURCES = \
    - $(purple_coresources) \
    - $(purple_builtsources) \
    - $(dbus_sources)
    -
    -noinst_HEADERS= \
    - internal.h \
    - media/backend-fs2.h \
    - valgrind.h
    -
    -libpurpleincludedir=$(includedir)/libpurple
    -libpurpleinclude_HEADERS = \
    - $(purple_coreheaders) \
    - $(purple_builtheaders) \
    - $(dbus_headers)
    -
    -mediaincludedir=$(includedir)/libpurple/media
    -mediainclude_HEADERS = \
    - $(addprefix $(srcdir)/media/, $(purple_mediaheaders))
    -
    -pkgconfigdir = $(libdir)/pkgconfig
    -pkgconfig_DATA = data/purple-3.pc
    -
    -if INSTALL_I18N
    -DESKTOP_FILE=data/purple-url-handler.desktop
    -
    -appsdir = $(datadir)/applications
    -apps_in_files = data/purple-url-handler.desktop.in
    -apps_DATA = $(apps_in_files:.desktop.in=.desktop)
    -
    -# silenced INTLTOOL_DESKTOP_RULE
    -%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po)
    - $(AM_V_GEN) LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ > /dev/null
    -
    -@INTLTOOL_XML_RULE@
    -
    -endif # INSTALL_I18N
    -
    -libpurple_la_DEPENDENCIES = \
    - $(STATIC_LINK_LIBS) $(LIBPURPLE_WIN32RES)
    -
    -libpurple_la_LDFLAGS = -export-dynamic -version-info $(PURPLE_LT_VERSION_INFO) \
    - -no-undefined $(LIBPURPLE_WIN32RES_LDFLAGS)
    -libpurple_la_LIBADD = \
    - $(STATIC_LINK_LIBS) \
    - $(DBUS_LIBS) \
    - $(DNSAPI_LIBS) \
    - $(GLIB_LIBS) \
    - $(GPLUGIN_LIBS) \
    - $(LIBXML_LIBS) \
    - $(NETWORKMANAGER_LIBS) \
    - $(INTLLIBS) \
    - $(FARSTREAM_LIBS) \
    - $(GSTREAMER_LIBS) \
    - $(GSTVIDEO_LIBS) \
    - $(GSTAPP_LIBS) \
    - $(GSTINTERFACES_LIBS) \
    - $(IDN_LIBS) \
    - $(JSON_LIBS) \
    - $(INTROSPECTION_LIBS) \
    - -lm
    -
    -AM_CPPFLAGS = \
    - $(GLIB_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(DEBUG_CFLAGS) \
    - $(DBUS_CFLAGS) \
    - $(LIBXML_CFLAGS) \
    - $(FARSTREAM_CFLAGS) \
    - $(GSTREAMER_CFLAGS) \
    - $(GSTVIDEO_CFLAGS) \
    - $(GSTAPP_CFLAGS) \
    - $(GSTINTERFACES_CFLAGS) \
    - $(IDN_CFLAGS) \
    - $(NETWORKMANAGER_CFLAGS) \
    - $(JSON_CFLAGS) \
    - $(INTROSPECTION_CFLAGS)
    -
    --include $(INTROSPECTION_MAKEFILE)
    -INTROSPECTION_GIRS =
    -INTROSPECTION_SCANNER_ARGS = --add-include-path=$(prefix)/share/gir-1.0 --warn-all --pkg-export=purple-$(PURPLE_MAJOR_VERSION)
    -INTROSPECTION_COMPILER_ARGS = --includedir=$(prefix)/share/gir-1.0
    -
    -if HAVE_INTROSPECTION
    -introspection_sources = \
    - $(libpurpleinclude_HEADERS) \
    - $(addprefix media/, $(purple_mediaheaders))
    -
    -Purple-$(PURPLE_MAJOR_VERSION).$(PURPLE_MINOR_VERSION).gir: $(builddir)/libpurple.la
    -Purple_3_0_gir_INCLUDES = Gio-2.0 GObject-2.0
    -if PLUGINS
    -Purple_3_0_gir_INCLUDES += GPlugin-0.0
    -endif
    -if ENABLE_DBUS
    -Purple_3_0_gir_INCLUDES += DBus-1.0 DBusGLib-1.0
    -endif
    -
    -Purple_3_0_gir_CFLAGS = \
    - -I$(srcdir) \
    - $(INCLUDES) \
    - -DDATADIR=\"$(datadir)\" \
    - -DLIBDIR=\"$(libdir)/purple-$(PURPLE_MAJOR_VERSION)/\" \
    - -DLOCALEDIR=\"$(datadir)/locale\" \
    - -DSYSCONFDIR=\"$(sysconfdir)\" \
    - $(GLIB_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(DBUS_CFLAGS) \
    - $(LIBXML_CFLAGS) \
    - $(FARSTREAM_CFLAGS) \
    - $(GSTREAMER_CFLAGS) \
    - $(GSTVIDEO_CFLAGS) \
    - $(GSTINTERFACES_CFLAGS) \
    - $(IDN_CFLAGS) \
    - $(NETWORKMANAGER_CFLAGS) \
    - $(JSON_CFLAGS) \
    - $(INTROSPECTION_CFLAGS)
    -
    -Purple_3_0_gir_LIBS = $(builddir)/libpurple.la
    -Purple_3_0_gir_FILES = $(introspection_sources)
    -INTROSPECTION_GIRS += Purple-$(PURPLE_MAJOR_VERSION).$(PURPLE_MINOR_VERSION).gir
    -
    -girdir = $(prefix)/share/gir-1.0 $(INTROSPECTION_GIRDIR)
    -gir_DATA = $(INTROSPECTION_GIRS)
    -
    -typelibdir = $(prefix)/share/gir-1.0 $(INTROSPECTION_TYPELIBDIR)
    -typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib)
    -
    -CLEANFILES += $(gir_DATA) $(typelib_DATA)
    -endif
    --- a/libpurple/Makefile.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,224 +0,0 @@
    -#
    -# Makefile.mingw
    -#
    -# Description: Makefile for win32 (mingw) version of libpurple
    -#
    -
    -PIDGIN_TREE_TOP := ..
    -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
    -
    -TARGET = libpurple
    -
    -ifeq ($(CYRUS_SASL), 1)
    -NEEDED_DLLS = $(CYRUS_SASL_TOP)/bin/libsasl2-3.dll
    -
    -CYRUS_SASL_PLUGINS = \
    - $(CYRUS_SASL_TOP)/lib/sasl2/libanonymous-3.dll \
    - $(CYRUS_SASL_TOP)/lib/sasl2/libcrammd5-3.dll \
    - $(CYRUS_SASL_TOP)/lib/sasl2/libdigestmd5-3.dll \
    - $(CYRUS_SASL_TOP)/lib/sasl2/libplain-3.dll
    -
    -endif
    -
    -##
    -## INCLUDE PATHS
    -##
    -INCLUDE_PATHS += \
    - -I$(PURPLE_TOP) \
    - -I$(PURPLE_TOP)/win32 \
    - -I$(PIDGIN_TREE_TOP) \
    - -I$(GTK_TOP)/include \
    - -I$(GTK_TOP)/include/glib-2.0 \
    - -I$(GTK_TOP)/lib/glib-2.0/include \
    - -I$(JSON_GLIB_TOP)/include/json-glib-1.0 \
    - -I$(LIBXML2_TOP)/include/libxml2 \
    - -I$(NSS_TOP)/include/nspr4 \
    - -I$(NSS_TOP)/include/nss3 \
    - -I$(GNUTLS_TOP)/include \
    - $(VV_INCLUDE_PATHS)
    -
    -LIB_PATHS += -L$(GTK_TOP)/lib \
    - -L$(JSON_GLIB_TOP)/lib \
    - -L$(LIBXML2_TOP)/lib \
    - -L$(NSS_TOP)/lib \
    - -L$(GNUTLS_TOP)/lib \
    - $(VV_LIB_PATHS)
    -
    -##
    -## SOURCES, OBJECTS
    -##
    -ifeq "$(USE_VV)" "1"
    -VV_SRC = \
    - media/backend-fs2.c \
    - media/backend-iface.c \
    - media/codec.c
    -else
    -VV_SRC =
    -endif
    -
    -BUILT_SRC = enums.c
    -
    -C_SRC = \
    - $(BUILT_SRC) \
    - account.c \
    - accounts.c \
    - accountopt.c \
    - blistnode.c \
    - blistnodetypes.c \
    - buddylist.c \
    - buddyicon.c \
    - certificate.c \
    - circularbuffer.c \
    - cmds.c \
    - connection.c \
    - conversation.c \
    - conversationtypes.c \
    - conversations.c \
    - core.c \
    - debug.c \
    - dnsquery.c \
    - dnssrv.c \
    - e2ee.c \
    - eventloop.c \
    - http.c \
    - idle.c \
    - image.c \
    - image-store.c \
    - keyring.c \
    - log.c \
    - media/candidate.c \
    - media/enum-types.c \
    - mediamanager.c \
    - media.c \
    - memorypool.c \
    - mime.c \
    - nat-pmp.c \
    - network.c \
    - notify.c \
    - plugins.c \
    - pluginpref.c \
    - pounce.c \
    - prefs.c \
    - presence.c \
    - proxy.c \
    - protocol.c \
    - protocols.c \
    - request.c \
    - request-datasheet.c \
    - roomlist.c \
    - savedstatuses.c \
    - server.c \
    - signals.c \
    - smiley.c \
    - smiley-custom.c \
    - smiley-list.c \
    - smiley-parser.c \
    - smiley-theme.c \
    - sound-theme-loader.c \
    - sound-theme.c \
    - sound.c \
    - sslconn.c \
    - status.c \
    - stringref.c \
    - stun.c \
    - theme-loader.c \
    - theme-manager.c \
    - theme.c \
    - trie.c \
    - upnp.c \
    - util.c \
    - version.c \
    - whiteboard.c \
    - xfer.c \
    - xmlnode.c \
    - win32/libc_interface.c \
    - win32/win32dep.c \
    - $(VV_SRC)
    -
    -RC_SRC = win32/libpurplerc.rc
    -
    -ENUM_HEADERS = \
    - account.h \
    - connection.h \
    - conversation.h \
    - conversationtypes.h \
    - roomlist.h \
    - status.h \
    - xfer.h
    -
    -OBJECTS = $(C_SRC:%.c=%.o) $(RC_SRC:%.rc=%.o)
    -
    -##
    -## LIBRARIES
    -##
    -LIBS = \
    - -ldnsapi \
    - -lglib-2.0 \
    - -lgthread-2.0 \
    - -lgobject-2.0 \
    - -lgmodule-2.0 \
    - -lintl \
    - -lws2_32 \
    - -lxml2 \
    - -ljson-glib-1.0 \
    - -lnss3 \
    - -lnspr4 \
    - -lgnutls \
    - -lz \
    - $(VV_LIBS)
    -
    -include $(PIDGIN_COMMON_RULES)
    -
    -##
    -## TARGET DEFINITIONS
    -##
    -.PHONY: all install install_shallow clean
    -
    -all: $(TARGET).dll
    - $(MAKE_at) $(MAKE) -C $(PURPLE_PROTOS_TOP) -f $(MINGW_MAKEFILE)
    - $(MAKE_at) $(MAKE) -C $(PURPLE_PLUGINS_TOP) -f $(MINGW_MAKEFILE)
    -
    -install_shallow: $(PURPLE_INSTALL_DIR) $(TARGET).dll
    - cp $(TARGET).dll $(PURPLE_INSTALL_DIR)
    - cp $(NEEDED_DLLS) $(PURPLE_INSTALL_DIR)
    -ifeq ($(CYRUS_SASL), 1)
    - mkdir -p $(PURPLE_INSTALL_DIR)/sasl2
    - cp $(CYRUS_SASL_PLUGINS) $(PURPLE_INSTALL_DIR)/sasl2
    -endif
    -
    -install: install_shallow all
    - $(MAKE_at) $(MAKE) -C $(PURPLE_PROTOS_TOP) -f $(MINGW_MAKEFILE) install
    - $(MAKE_at) $(MAKE) -C $(PURPLE_PLUGINS_TOP) -f $(MINGW_MAKEFILE) install
    -
    -./win32/libpurplerc.rc: ./win32/libpurplerc.rc.in $(PIDGIN_TREE_TOP)/VERSION
    - @echo -e " GEN\t$@"
    - @sed -e 's/@PURPLE_VERSION@/$(PURPLE_VERSION)/g' \
    - -e 's/@PURPLE_MAJOR_VERSION@/$(PURPLE_MAJOR_VERSION)/g' \
    - -e 's/@PURPLE_MINOR_VERSION@/$(PURPLE_MINOR_VERSION)/g' \
    - -e 's/@PURPLE_MICRO_VERSION@/$(PURPLE_MICRO_VERSION)/g' \
    - -e 's/@PURPLE_API_VERSION@/$(PURPLE_API_VERSION)/g' \
    - $@.in > $@
    -
    -$(OBJECTS): $(PURPLE_CONFIG_H) $(PURPLE_VERSION_H) $(PURPLE_PURPLE_H)
    -
    -enums.h: enums.h.in $(ENUM_HEADERS)
    - @echo -e " GEN\t$@"
    - @$(GLIB_MKENUMS) --template enums.h.in $(ENUM_HEADERS) > enums.h
    -
    -enums.c: enums.c.in enums.h $(ENUM_HEADERS)
    - @echo -e " GEN\t$@"
    - @$(GLIB_MKENUMS) --template enums.c.in $(ENUM_HEADERS) > enums.c
    -
    -$(TARGET).dll $(TARGET).dll.a: $(OBJECTS)
    - $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -Wl,--output-def,$(TARGET).def,--out-implib,$(TARGET).dll.a -o $(TARGET).dll
    -
    -##
    -## CLEAN RULES
    -##
    -clean:
    - rm -f $(OBJECTS) $(RC_SRC) $(PURPLE_VERSION_H) $(PURPLE_PURPLE_H) enums.h enums.c
    - rm -f $(TARGET).dll $(TARGET).dll.a $(TARGET).def
    - $(MAKE_at) $(MAKE) -C $(PURPLE_PROTOS_TOP) -f $(MINGW_MAKEFILE) clean
    - $(MAKE_at) $(MAKE) -C $(PURPLE_PLUGINS_TOP) -f $(MINGW_MAKEFILE) clean
    -
    -include $(PIDGIN_COMMON_TARGETS)
    --- a/libpurple/account.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/account.c Thu Nov 23 22:30:26 2017 -0600
    @@ -2566,7 +2566,7 @@
    }
    static PurpleXmlNode *
    -proxy_settings_to_xmlnode(PurpleProxyInfo *proxy_info)
    +proxy_settings_to_xmlnode(const PurpleProxyInfo *proxy_info)
    {
    PurpleXmlNode *node, *child;
    PurpleProxyType proxy_type;
    @@ -2705,7 +2705,7 @@
    PurpleXmlNode *node, *child;
    const char *tmp;
    PurplePresence *presence;
    - PurpleProxyInfo *proxy_info;
    + const PurpleProxyInfo *proxy_info;
    PurpleAccountPrivate *priv = PURPLE_ACCOUNT_GET_PRIVATE(account);
    node = purple_xmlnode_new("account");
    --- a/libpurple/account.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/account.h Thu Nov 23 22:30:26 2017 -0600
    @@ -42,7 +42,7 @@
    typedef struct _PurpleAccountClass PurpleAccountClass;
    typedef gboolean (*PurpleFilterAccountFunc)(PurpleAccount *account);
    -typedef void (*PurpleAccountRequestAuthorizationCb)(const char *, void *);
    +typedef void (*PurpleAccountRequestAuthorizationCb)(const char *response, void *data);
    typedef void (*PurpleAccountRegistrationCb)(PurpleAccount *account, gboolean succeeded, void *user_data);
    typedef void (*PurpleAccountUnregistrationCb)(PurpleAccount *account, gboolean succeeded, void *user_data);
    typedef void (*PurpleSetPublicAliasSuccessCallback)(PurpleAccount *account, const char *new_alias);
    --- a/libpurple/accountopt.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/accountopt.h Thu Nov 23 22:30:26 2017 -0600
    @@ -119,7 +119,7 @@
    * purple_account_option_list_new:
    * @text: The text of the option.
    * @pref_name: The account preference name for the option.
    - * @list: The key, value list.
    + * @list: (element-type PurpleKeyValuePair) (transfer full): The key, value list.
    *
    * Creates a new list account option.
    *
    @@ -189,7 +189,7 @@
    /**
    * purple_account_option_string_set_hints:
    * @option: The account option.
    - * @hints: The list of hints, stored as strings.
    + * @hints: (element-type utf8) (transfer full): The list of hints, stored as strings.
    *
    * Sets the hint list for an account option.
    *
    @@ -202,7 +202,8 @@
    /**
    * purple_account_option_set_list:
    * @option: The account option.
    - * @values: The default list value.
    + * @values: (element-type PurpleKeyValuePair) (transfer full): The default list
    + * value.
    *
    * Sets the list values for an account option.
    *
    @@ -318,7 +319,7 @@
    *
    * Returns the list of hints for an account option.
    *
    - * Returns: (transfer none): A list of hints, stored as strings.
    + * Returns: (element-type utf8) (transfer none): A list of hints.
    */
    const GSList * purple_account_option_string_get_hints(const PurpleAccountOption *option);
    @@ -328,10 +329,10 @@
    *
    * Returns the list values for an account option.
    *
    - * Returns: (transfer none): A list of #PurpleKeyValuePair, mapping the human-readable
    - * description of the value to the <type>(const char *)</type> that
    - * should be passed to purple_account_set_string() to set the
    - * option.
    + * Returns: (element-type PurpleKeyValuePair) (transfer none): A list of
    + * #PurpleKeyValuePair, mapping the human-readable description of the
    + * value to the <type>(const char *)</type> that should be passed to
    + * purple_account_set_string() to set the option.
    */
    GList *purple_account_option_get_list(const PurpleAccountOption *option);
    --- a/libpurple/accounts.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/accounts.h Thu Nov 23 22:30:26 2017 -0600
    @@ -146,7 +146,7 @@
    *
    * Returns a list of all accounts.
    *
    - * Returns: (transfer none): A list of all accounts.
    + * Returns: (element-type PurpleAccount) (transfer none): A list of all accounts.
    */
    GList *purple_accounts_get_all(void);
    @@ -155,9 +155,8 @@
    *
    * Returns a list of all enabled accounts
    *
    - * Returns: A list of all enabled accounts. The list is owned
    - * by the caller, and must be g_list_free()d to avoid
    - * leaking the nodes.
    + * Returns: (element-type PurpleAccount) (transfer container): A list of all
    + * enabled accounts.
    */
    GList *purple_accounts_get_all_active(void);
    --- a/libpurple/blistnode.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/blistnode.h Thu Nov 23 22:30:26 2017 -0600
    @@ -96,7 +96,7 @@
    * See purple_blist_node_get_parent(), purple_blist_node_get_first_child(),
    * purple_blist_node_get_sibling_next(), purple_blist_node_get_sibling_prev().
    *
    - * Returns: The next node
    + * Returns: (transfer none): The next node
    */
    PurpleBlistNode *purple_blist_node_next(PurpleBlistNode *node, gboolean offline);
    @@ -109,7 +109,7 @@
    * See purple_blist_node_get_first_child(), purple_blist_node_get_sibling_next(),
    * purple_blist_node_get_sibling_prev(), purple_blist_node_next().
    *
    - * Returns: The parent node.
    + * Returns: (transfer none): The parent node.
    */
    PurpleBlistNode *purple_blist_node_get_parent(PurpleBlistNode *node);
    @@ -289,10 +289,8 @@
    * purple_blist_node_get_extended_menu:
    * @n: The blist node for which to obtain the extended menu items.
    *
    - * Retrieves the extended menu items for a buddy list node.
    - *
    - * Returns: A list of PurpleMenuAction items, as harvested by the
    - * blist-node-extended-menu signal.
    + * Returns: (element-type PurpleMenuAction): The extended menu items for a buddy
    + * list node, as harvested by the blist-node-extended-menu signal.
    */
    GList *purple_blist_node_get_extended_menu(PurpleBlistNode *n);
    --- a/libpurple/buddyicon.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/buddyicon.c Thu Nov 23 22:30:26 2017 -0600
    @@ -176,6 +176,7 @@
    if (!purple_image_save(img, path))
    purple_debug_error("buddyicon", "failed to save icon %s", path);
    +
    g_free(path);
    }
    --- a/libpurple/buddylist.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/buddylist.h Thu Nov 23 22:30:26 2017 -0600
    @@ -195,8 +195,8 @@
    *
    * See purple_blist_find_buddies().
    *
    - * Returns: A list of every buddy in the list. Caller is responsible for
    - * freeing the list.
    + * Returns: (element-type PurpleBlistNode) (transfer container): A list of every
    + * buddy in the list.
    */
    GSList *purple_blist_get_buddies(void);
    @@ -380,10 +380,8 @@
    *
    * Finds all PurpleBuddy structs given a name and an account
    *
    - * Returns: NULL if the buddy doesn't exist, or a GSList of
    - * PurpleBuddy structs. You must free the GSList using
    - * g_slist_free. Do not free the PurpleBuddy structs that
    - * the list points to.
    + * Returns: (element-type PurpleBuddy) (transfer container): %NULL if the buddy
    + * doesn't exist, or a GSList of PurpleBuddy structs.
    */
    GSList *purple_blist_find_buddies(PurpleAccount *account, const char *name);
    --- a/libpurple/circularbuffer.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/circularbuffer.h Thu Nov 23 22:30:26 2017 -0600
    @@ -78,18 +78,18 @@
    /**
    * purple_circular_buffer_append:
    - * @buf: The PurpleCircularBuffer to which to append the data
    + * @buffer: The PurpleCircularBuffer to which to append the data
    * @src: pointer to the data to copy into the buffer
    * @len: number of bytes to copy into the buffer
    *
    * Append data to the PurpleCircularBuffer. This will grow the internal
    * buffer to fit the added data, if needed.
    */
    -void purple_circular_buffer_append(PurpleCircularBuffer *buf, gconstpointer src, gsize len);
    +void purple_circular_buffer_append(PurpleCircularBuffer *buffer, gconstpointer src, gsize len);
    /**
    * purple_circular_buffer_get_max_read:
    - * @buf: the PurpleCircularBuffer for which to determine the maximum
    + * @buffer: the PurpleCircularBuffer for which to determine the maximum
    * contiguous bytes that can be read.
    *
    * Determine the maximum number of contiguous bytes that can be read from the
    @@ -100,11 +100,11 @@
    *
    * Returns: the number of bytes that can be read from the PurpleCircularBuffer
    */
    -gsize purple_circular_buffer_get_max_read(const PurpleCircularBuffer *buf);
    +gsize purple_circular_buffer_get_max_read(const PurpleCircularBuffer *buffer);
    /**
    * purple_circular_buffer_mark_read:
    - * @buf: The PurpleCircularBuffer to mark bytes read from
    + * @buffer: The PurpleCircularBuffer to mark bytes read from
    * @len: The number of bytes to mark as read
    *
    * Mark the number of bytes that have been read from the buffer.
    @@ -112,7 +112,7 @@
    * Returns: TRUE if we successfully marked the bytes as having been read, FALSE
    * otherwise.
    */
    -gboolean purple_circular_buffer_mark_read(PurpleCircularBuffer *buf, gsize len);
    +gboolean purple_circular_buffer_mark_read(PurpleCircularBuffer *buffer, gsize len);
    /**
    * purple_circular_buffer_grow:
    --- a/libpurple/cmds.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/cmds.h Thu Nov 23 22:30:26 2017 -0600
    @@ -75,7 +75,7 @@
    * A function implementing a command, as passed to purple_cmd_register().
    */
    /* TODO document the arguments to these functions. */
    -typedef PurpleCmdRet (*PurpleCmdFunc)(PurpleConversation *, const gchar *cmd,
    +typedef PurpleCmdRet (*PurpleCmdFunc)(PurpleConversation *conversation, const gchar *cmd,
    gchar **args, gchar **error, void *data);
    /**
    * PurpleCmdId:
    @@ -272,14 +272,11 @@
    *
    * List registered commands.
    *
    - * Returns a #GList (which must be freed by the caller) of all commands
    + * Returns: (element-type utf8) (transfer container): All commands
    * that are valid in the context of @conv, or all commands, if @conv is
    * %NULL. Don't keep this list around past the main loop, or anything else that
    * might unregister a command, as the <type>const char *</type>'s used get freed
    * then.
    - *
    - * Returns: A #GList of <type>const char *</type>, which must be freed with
    - * g_list_free().
    */
    GList *purple_cmd_list(PurpleConversation *conv);
    @@ -291,11 +288,8 @@
    *
    * Get the help string for a command.
    *
    - * Returns the help strings for a given command in the form of a GList,
    - * one node for each matching command.
    - *
    - * Returns: A #GList of <type>const char *</type>s, which is the help string
    - * for that command.
    + * Returns: (element-type utf8) (transfer container): the help strings for a
    + * given command, one node for each matching command.
    */
    GList *purple_cmd_help(PurpleConversation *conv, const gchar *cmd);
    --- a/libpurple/connection.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/connection.h Thu Nov 23 22:30:26 2017 -0600
    @@ -405,7 +405,7 @@
    *
    * Returns the connection's account.
    *
    - * Returns: The connection's account.
    + * Returns: (transfer none): The connection's account.
    */
    PurpleAccount *purple_connection_get_account(const PurpleConnection *gc);
    @@ -415,7 +415,7 @@
    *
    * Returns the protocol managing a connection.
    *
    - * Returns: The protocol.
    + * Returns: (transfer none): The protocol.
    */
    PurpleProtocol *purple_connection_get_protocol(const PurpleConnection *gc);
    @@ -435,7 +435,8 @@
    *
    * Returns a list of active chat conversations on a connection.
    *
    - * Returns: The active chats on the connection.
    + * Returns: (element-type PurpleChatConversation) (transfer none): The active
    + * chats on the connection.
    */
    GSList *purple_connection_get_active_chats(const PurpleConnection *gc);
    @@ -598,7 +599,8 @@
    * Returns a list of all active connections. This does not
    * include connections that are in the process of connecting.
    *
    - * Returns: (transfer none): A list of all active connections.
    + * Returns: (element-type PurpleConnection) (transfer none): A list of all
    + * active connections.
    */
    GList *purple_connections_get_all(void);
    @@ -607,7 +609,8 @@
    *
    * Returns a list of all connections in the process of connecting.
    *
    - * Returns: (transfer none): A list of connecting connections.
    + * Returns: (element-type PurpleConnection) (transfer none): A list of
    + * connecting connections.
    */
    GList *purple_connections_get_connecting(void);
    @@ -669,4 +672,4 @@
    G_END_DECLS
    -#endif /* _PURPLE_CONNECTION_H_ */
    \ No newline at end of file
    +#endif /* _PURPLE_CONNECTION_H_ */
    --- a/libpurple/conversations.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/conversations.h Thu Nov 23 22:30:26 2017 -0600
    @@ -61,7 +61,7 @@
    *
    * This list includes both IMs and chats.
    *
    - * Returns: (transfer none): A GList of all conversations.
    + * Returns: (element-type PurpleConversation) (transfer none): A GList of all conversations.
    */
    GList *purple_conversations_get_all(void);
    @@ -70,7 +70,7 @@
    *
    * Returns a list of all IMs.
    *
    - * Returns: (transfer none): A GList of all IMs.
    + * Returns: (element-type PurpleIMConversation) (transfer none): All IMs.
    */
    GList *purple_conversations_get_ims(void);
    @@ -79,7 +79,7 @@
    *
    * Returns a list of all chats.
    *
    - * Returns: (transfer none): A GList of all chats.
    + * Returns: (element-type PurpleChatConversation) (transfer none): All chats.
    */
    GList *purple_conversations_get_chats(void);
    --- a/libpurple/data/purple-3-uninstalled.pc.in Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,22 +0,0 @@
    -prefix=@prefix@
    -exec_prefix=@exec_prefix@
    -libdir=@libdir@
    -includedir=@includedir@
    -datarootdir=@datarootdir@
    -datadir=@datadir@
    -sysconfdir=@sysconfdir@
    -
    -abs_srcdir=@abs_srcdir@
    -abs_builddir=@abs_builddir@
    -
    -abs_top_srcdir=@abs_top_srcdir@
    -abs_top_builddir=@abs_top_builddir@
    -
    -plugindir=${libdir}/purple-@PURPLE_MAJOR_VERSION@
    -
    -Name: libpurple
    -Description: libpurple is a GLib-based instant messenger library.
    -Version: @VERSION@
    -Requires: glib-2.0
    -Cflags: -I${abs_top_srcdir} -I${abs_top_builddir}
    -Libs: ${abs_top_builddir}/libpurple/libpurple.la
    --- a/libpurple/data/purple-3.pc.in Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,16 +0,0 @@
    -prefix=@prefix@
    -exec_prefix=@exec_prefix@
    -libdir=@libdir@
    -includedir=@includedir@/libpurple
    -datarootdir=@datarootdir@
    -datadir=@datadir@
    -sysconfdir=@sysconfdir@
    -
    -plugindir=${libdir}/purple-@PURPLE_MAJOR_VERSION@
    -
    -Name: libpurple
    -Description: libpurple is a GLib-based instant messenger library.
    -Version: @VERSION@
    -Requires: glib-2.0@GPLUGIN_REQ@
    -Cflags: -I${includedir}
    -Libs: -L${libdir} -lpurple
    --- a/libpurple/e2ee.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/e2ee.h Thu Nov 23 22:30:26 2017 -0600
    @@ -245,10 +245,8 @@
    * @provider: The E2EE provider.
    * @conv: The conversation.
    *
    - * Returns the list of actions for an E2EE menu.
    - *
    - * Returns: (transfer full): the #GList of #PurpleMenuAction's. Should be
    - * #g_list_free or #g_list_free_full'd when done using it.
    + * Returns: (element-type PurpleMenuAction) (transfer full): The list of
    + * actions for an E2EE menu.
    */
    GList *
    purple_e2ee_provider_get_conv_menu_actions(PurpleE2eeProvider *provider,
    --- a/libpurple/eventloop.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/eventloop.h Thu Nov 23 22:30:26 2017 -0600
    @@ -53,7 +53,7 @@
    * purple_input_add(), the file descriptor on which the event occurred, and the
    * condition that was satisfied to cause the callback to be invoked.
    */
    -typedef void (*PurpleInputFunction)(gpointer, gint, PurpleInputCondition);
    +typedef void (*PurpleInputFunction)(gpointer data, gint fd, PurpleInputCondition cond);
    G_BEGIN_DECLS
    --- a/libpurple/example/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,24 +0,0 @@
    -noinst_PROGRAMS = nullclient
    -
    -nullclient_SOURCES = defines.h nullclient.c
    -nullclient_DEPENDENCIES =
    -nullclient_LDFLAGS = -export-dynamic
    -nullclient_LDADD = \
    - $(top_builddir)/libpurple/libpurple.la \
    - $(DBUS_LIBS) \
    - $(INTLLIBS) \
    - $(GLIB_LIBS) \
    - $(GPLUGIN_LIBS) \
    - $(LIBXML_LIBS) \
    - $(GSTVIDEO_LIBS)
    -
    -AM_CPPFLAGS = \
    - -DSTANDALONE \
    - -I$(top_builddir)/libpurple \
    - -I$(top_srcdir)/libpurple \
    - -I$(top_srcdir) \
    - $(DEBUG_CFLAGS) \
    - $(GLIB_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(DBUS_CFLAGS) \
    - $(LIBXML_CFLAGS)
    --- a/libpurple/group.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/group.h Thu Nov 23 22:30:26 2017 -0600
    @@ -105,8 +105,8 @@
    *
    * Returns a list of accounts that have buddies in this group
    *
    - * Returns: A GSList of accounts (which must be freed), or NULL if the group
    - * has no accounts.
    + * Returns: (element-type PurpleAccount) (transfer container): A list of
    + * accounts, or %NULL if the group has no accounts.
    */
    GSList *purple_group_get_accounts(PurpleGroup *g);
    --- a/libpurple/http.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/http.c Thu Nov 23 22:30:26 2017 -0600
    @@ -420,7 +420,7 @@
    compressed_buff += bytes_read;
    compressed_len -= bytes_read;
    - if (gzres == G_CONVERTER_CONVERTED || G_CONVERTER_FINISHED) {
    + if (gzres == G_CONVERTER_CONVERTED || gzres == G_CONVERTER_FINISHED) {
    if (decompressed_len == 0)
    break;
    if (gzs->decompressed + decompressed_len >=
    --- a/libpurple/http.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/http.h Thu Nov 23 22:30:26 2017 -0600
    @@ -908,8 +908,8 @@
    *
    * Gets all headers got with response.
    *
    - * Returns: GList of PurpleKeyValuePair, which keys are header field
    - * names (gchar*) and values are its contents (gchar*).
    + * Returns: (element-type PurpleKeyValuePair) (transfer none): Keys are header
    + * field names (gchar*) and values are its contents (gchar*).
    */
    const GList * purple_http_response_get_all_headers(PurpleHttpResponse *response);
    @@ -920,7 +920,7 @@
    *
    * Gets all headers with specified name got with response.
    *
    - * Returns: GList of header field records contents (gchar*).
    + * Returns: (element-type gchar*) (transfer none): Header field record contents.
    */
    const GList * purple_http_response_get_headers_by_name(
    PurpleHttpResponse *response, const gchar *name);
    --- a/libpurple/image.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/image.h Thu Nov 23 22:30:26 2017 -0600
    @@ -80,7 +80,7 @@
    /**
    * purple_image_new_from_bytes:
    - * @bytes: (transfer none) A #GBytes containing the raw image data.
    + * @bytes: (transfer none): A #GBytes containing the raw image data.
    *
    * Loads a raw image data as a new #PurpleImage object.
    *
    @@ -91,7 +91,7 @@
    /**
    * purple_image_new_from_file:
    * @path: the path to the image file.
    - * @error: (optional) An optional return address for a #GError
    + * @error: (optional) (out): An optional return address for a #GError
    *
    * Loads an image file as a new #PurpleImage object. The @path must exists, be
    * readable and should point to a valid image file. If you don't set @be_eager
    @@ -118,7 +118,7 @@
    /**
    * purple_image_new_take_data:
    - * @data: (transfer full) the pointer to the image data buffer.
    + * @data: (transfer full): the pointer to the image data buffer.
    * @length: the length of @data.
    *
    * Creates a new #PurpleImage object with contents of @data buffer.
    --- a/libpurple/keyring.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/keyring.h Thu Nov 23 22:30:26 2017 -0600
    @@ -278,7 +278,7 @@
    * Returns a GList containing the IDs and names of the registered
    * keyrings.
    *
    - * Returns: The list of IDs and names.
    + * Returns: (element-type utf8) (transfer container): The list of IDs and names.
    */
    GList *
    purple_keyring_get_options(void);
    --- a/libpurple/log.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/log.h Thu Nov 23 22:30:26 2017 -0600
    @@ -272,7 +272,7 @@
    *
    * Returns a list of all available logs
    *
    - * Returns: A sorted list of PurpleLogs
    + * Returns: (element-type PurpleLog): A sorted list of logs
    */
    GList *purple_log_get_logs(PurpleLogType type, const char *name, PurpleAccount *account);
    @@ -292,7 +292,8 @@
    * destroyed. If a PurpleLogSet is removed from the GHashTable, it
    * must be freed with purple_log_set_free().
    *
    - * Returns: A GHashTable of all available unique PurpleLogSets
    + * Returns: (element-type PurpleLogSet PurpleLogSet): All available unique log
    + * sets.
    */
    GHashTable *purple_log_get_log_sets(void);
    @@ -302,7 +303,7 @@
    *
    * Returns a list of all available system logs
    *
    - * Returns: A sorted list of PurpleLogs
    + * Returns: (element-type PurpleLog): A sorted list of logs
    */
    GList *purple_log_get_system_logs(PurpleAccount *account);
    @@ -440,7 +441,7 @@
    * @ext: The file extension this log format uses.
    * @logger: A reference to the logger struct for this log.
    *
    - * Returns a sorted GList of PurpleLogs of the requested type.
    + * Returns a sorted list of logs of the requested type.
    *
    * This function should only be used with logs that are written
    * with purple_log_common_writer(). It's intended to be used as
    @@ -448,7 +449,7 @@
    * It should only be passed to purple_log_logger_new() and never
    * called directly.
    *
    - * Returns: A sorted GList of PurpleLogs matching the parameters.
    + * Returns: (element-type PurpleLog): A sorted list of logs matching the parameters.
    */
    GList *purple_log_common_lister(PurpleLogType type, const char *name,
    PurpleAccount *account, const char *ext,
    @@ -604,7 +605,7 @@
    * Returns a GList containing the IDs and names of the registered
    * loggers.
    *
    - * Returns: The list of IDs and names.
    + * Returns: (element-type utf8) (transfer container): The list of IDs and names.
    */
    GList *purple_log_logger_get_options(void);
    --- a/libpurple/media.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/media.c Thu Nov 23 22:30:26 2017 -0600
    @@ -1458,20 +1458,12 @@
    gchar dtmf, guint8 volume, guint16 duration)
    {
    #ifdef USE_VV
    - PurpleAccount *account = NULL;
    - PurpleConnection *gc = NULL;
    - PurpleProtocol *protocol = NULL;
    PurpleMediaBackendIface *backend_iface = NULL;
    if (media)
    {
    - account = purple_media_get_account(media);
    backend_iface = PURPLE_MEDIA_BACKEND_GET_INTERFACE(media->priv->backend);
    }
    - if (account)
    - gc = purple_account_get_connection(account);
    - if (gc)
    - protocol = purple_connection_get_protocol(gc);
    if (dtmf == 'a')
    dtmf = 'A';
    @@ -1484,11 +1476,7 @@
    g_return_val_if_fail(strchr("0123456789ABCD#*", dtmf), FALSE);
    - if (PURPLE_PROTOCOL_IMPLEMENTS(protocol, MEDIA_IFACE, send_dtmf)
    - && purple_protocol_media_iface_send_dtmf(protocol, media, dtmf, volume, duration))
    - {
    - return TRUE;
    - } else if (backend_iface && backend_iface->send_dtmf
    + if (backend_iface && backend_iface->send_dtmf
    && backend_iface->send_dtmf(media->priv->backend,
    session_id, dtmf, volume, duration))
    {
    --- a/libpurple/media.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/media.h Thu Nov 23 22:30:26 2017 -0600
    @@ -100,7 +100,7 @@
    *
    * Gets a list of session IDs.
    *
    - * Returns: GList of session IDs. The caller must free the list.
    + * Returns: (element-type utf8) (transfer container): List of session IDs.
    */
    GList *purple_media_get_session_ids(PurpleMedia *media);
    @@ -262,7 +262,7 @@
    *
    * Gets the codecs from a session.
    *
    - * Returns: The retreieved codecs.
    + * Returns: (element-type PurpleMediaCodec): The retrieved codecs.
    */
    GList *purple_media_get_codecs(PurpleMedia *media, const gchar *sess_id);
    @@ -271,7 +271,8 @@
    * @media: The media object to find the session in.
    * @sess_id: The session id of the session find the stream in.
    * @participant: The name of the remote user to add the candidates for.
    - * @remote_candidates: The remote candidates to add.
    + * @remote_candidates: (element-type PurpleMediaCandidate) (transfer none): The
    + * remote candidates to add.
    *
    * Adds remote candidates to the stream.
    */
    @@ -287,6 +288,8 @@
    * @participant: The name of the remote user to get the candidates from.
    *
    * Gets the local candidates from a stream.
    + *
    + * Returns: (element-type PurpleMediaCandidate): The local candidates.
    */
    GList *purple_media_get_local_candidates(PurpleMedia *media,
    const gchar *sess_id,
    @@ -301,7 +304,8 @@
    *
    * Gets the active local candidates for the stream.
    *
    - * Returns: The active candidates retrieved.
    + * Returns: (element-type PurpleMediaCandidate): The active
    + * candidates retrieved.
    */
    GList *purple_media_get_active_local_candidates(PurpleMedia *media,
    const gchar *sess_id, const gchar *participant);
    @@ -315,7 +319,8 @@
    *
    * Gets the active remote candidates for the stream.
    *
    - * Returns: The remote candidates retrieved.
    + * Returns: (element-type PurpleMediaCandidate): The remote
    + * candidates retrieved.
    */
    GList *purple_media_get_active_remote_candidates(PurpleMedia *media,
    const gchar *sess_id, const gchar *participant);
    @@ -325,7 +330,8 @@
    * @media: The media object to find the session in.
    * @sess_id: The session id of the session find the stream in.
    * @participant: The name of the remote user to set the codecs for.
    - * @codecs: The list of remote codecs to set.
    + * @codecs: (element-type PurpleMediaCodec) (transfer none): The list of remote
    + * codecs to set.
    *
    * Sets remote codecs from the stream.
    *
    --- a/libpurple/media/backend-fs2.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/media/backend-fs2.c Thu Nov 23 22:30:26 2017 -0600
    @@ -1059,7 +1059,7 @@
    FsParticipant *participant;
    PurpleMediaBackendFs2Session *session;
    PurpleMediaBackendFs2Stream *media_stream;
    - gchar *name;
    + const gchar *name;
    value = gst_structure_get_value(structure, "stream");
    stream = g_value_get_object(value);
    @@ -1073,8 +1073,7 @@
    local_candidate->foundation);
    g_object_get(stream, "participant", &participant, NULL);
    - g_object_get(participant, "cname", &name, NULL);
    - g_object_unref(participant);
    + name = g_object_get_data(G_OBJECT(participant), "purple-name");
    media_stream = get_stream(self, session->id, name);
    media_stream->local_candidates = g_list_append(
    @@ -1085,24 +1084,25 @@
    g_signal_emit_by_name(self, "new-candidate",
    session->id, name, candidate);
    g_object_unref(candidate);
    + g_object_unref(participant);
    } else if (gst_structure_has_name(structure,
    "farstream-local-candidates-prepared")) {
    const GValue *value;
    FsStream *stream;
    FsParticipant *participant;
    PurpleMediaBackendFs2Session *session;
    - gchar *name;
    value = gst_structure_get_value(structure, "stream");
    stream = g_value_get_object(value);
    session = get_session_from_fs_stream(self, stream);
    g_object_get(stream, "participant", &participant, NULL);
    - g_object_get(participant, "cname", &name, NULL);
    - g_object_unref(participant);
    g_signal_emit_by_name(self, "candidates-prepared",
    - session->id, name);
    + session->id,
    + g_object_get_data(G_OBJECT(participant), "purple-name"));
    +
    + g_object_unref(participant);
    } else if (gst_structure_has_name(structure,
    "farstream-new-active-candidate-pair")) {
    const GValue *value;
    @@ -1112,7 +1112,6 @@
    FsParticipant *participant;
    PurpleMediaBackendFs2Session *session;
    PurpleMediaCandidate *lcandidate, *rcandidate;
    - gchar *name;
    value = gst_structure_get_value(structure, "stream");
    stream = g_value_get_object(value);
    @@ -1122,8 +1121,6 @@
    remote_candidate = g_value_get_boxed(value);
    g_object_get(stream, "participant", &participant, NULL);
    - g_object_get(participant, "cname", &name, NULL);
    - g_object_unref(participant);
    session = get_session_from_fs_stream(self, stream);
    @@ -1131,8 +1128,11 @@
    rcandidate = candidate_from_fs(remote_candidate);
    g_signal_emit_by_name(self, "active-candidate-pair",
    - session->id, name, lcandidate, rcandidate);
    -
    + session->id,
    + g_object_get_data(G_OBJECT(participant), "purple-name"),
    + lcandidate, rcandidate);
    +
    + g_object_unref(participant);
    g_object_unref(lcandidate);
    g_object_unref(rcandidate);
    } else if (gst_structure_has_name(structure,
    @@ -1775,6 +1775,9 @@
    return FALSE;
    }
    + g_object_set_data_full(G_OBJECT(participant), "purple-name",
    + g_strdup(name), g_free);
    +
    if (g_object_class_find_property(G_OBJECT_GET_CLASS(participant),
    "cname")) {
    g_object_set(participant, "cname", name, NULL);
    --- a/libpurple/media/backend-iface.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/media/backend-iface.h Thu Nov 23 22:30:26 2017 -0600
    @@ -188,7 +188,7 @@
    * @self: The media backend the stream is in.
    * @sess_id: The session id the stream is associated with.
    * @participant: The participant the stream is associated with.
    - * @codecs: (element-type PurpleMediaCodec) The list of remote codecs to set.
    + * @codecs: (element-type PurpleMediaCodec): The list of remote codecs to set.
    *
    * Sets the remote codecs on a stream.
    *
    --- a/libpurple/media/candidate.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/media/candidate.h Thu Nov 23 22:30:26 2017 -0600
    @@ -90,17 +90,19 @@
    /**
    * purple_media_candidate_list_copy:
    - * @candidates: The list of candidates to be copied.
    + * @candidates: (element-type PurpleMediaCandidate) (transfer none): The list
    + * of candidates to be copied.
    *
    * Copies a GList of PurpleMediaCandidate and its contents.
    *
    - * Returns: The copy of the GList.
    + * Returns: (element-type PurpleMediaCandidate): The copy of the GList.
    */
    GList *purple_media_candidate_list_copy(GList *candidates);
    /**
    * purple_media_candidate_list_free:
    - * @candidates: The list of candidates to be freed.
    + * @candidates: (element-type PurpleMediaCandidate) (transfer full): The list
    + * of candidates to be freed.
    *
    * Frees a GList of PurpleMediaCandidate and its contents.
    */
    --- a/libpurple/media/codec.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/media/codec.h Thu Nov 23 22:30:26 2017 -0600
    @@ -120,10 +120,8 @@
    *
    * Gets a list of the optional parameters.
    *
    - * The list consists of PurpleKeyValuePair's.
    - *
    - * Returns: The list of optional parameters. The list is owned by the codec and
    - * should not be freed.
    + * Returns: (element-type PurpleKeyValuePair) (transfer none): The list of
    + * optional parameters.
    */
    GList *purple_media_codec_get_optional_parameters(PurpleMediaCodec *codec);
    @@ -174,17 +172,19 @@
    /**
    * purple_media_codec_list_copy:
    - * @codecs: The list of codecs to be copied.
    + * @codecs: (element-type PurpleMediaCodec) (transfer none): The list of codecs
    + * to be copied.
    *
    * Copies a GList of PurpleMediaCodec and its contents.
    *
    - * Returns: The copy of the GList.
    + * Returns: (element-type PurpleMediaCodec): The copy of the GList.
    */
    GList *purple_media_codec_list_copy(GList *codecs);
    /**
    * purple_media_codec_list_free:
    - * @codecs: The list of codecs to be freed.
    + * @codecs: (element-type PurpleMediaCodec) (transfer full): The list of codecs
    + * to be freed.
    *
    * Frees a GList of PurpleMediaCodec and its contents.
    */
    --- a/libpurple/meson.build Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/meson.build Thu Nov 23 22:30:26 2017 -0600
    @@ -418,11 +418,15 @@
    install_headers(purple_mediaheaders,
    subdir : 'libpurple/media')
    -configure_file(input : 'data/purple-3.pc.in',
    - output : 'purple-3.pc',
    - configuration : pkg_conf,
    - install : true,
    - install_dir : get_option('libdir') + '/pkgconfig')
    +pkgconfig.generate(
    + name : 'libpurple',
    + description : 'libpurple is a GLib-based instant messenger library.',
    + version : purple_display_version,
    + filebase : 'purple-3',
    + subdirs : 'libpurple',
    + libraries : [libpurple],
    + requires : ['glib-2.0'] + GPLUGIN_REQ,
    + variables : ['plugindir=${libdir}/purple-@0@'.format(purple_major_version)])
    if INSTALL_I18N
    DESKTOP_FILE = 'purple-url-handler.desktop'
    --- a/libpurple/mime.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/mime.h Thu Nov 23 22:30:26 2017 -0600
    @@ -102,8 +102,8 @@
    *
    * The list of fields in the header of a document
    *
    - * Returns: (transfer none): A list of strings indicating the fields (but not
    - * the values of the fields) in the header of doc.
    + * Returns: (element-type utf8) (transfer none): A list of strings indicating
    + * the fields (but not the values of the fields) in the header of doc.
    */
    GList *purple_mime_document_get_fields(PurpleMimeDocument *doc);
    @@ -140,7 +140,8 @@
    *
    * The list of parts in a multipart document.
    *
    - * Returns: (transfer none): List of PurpleMimePart contained within doc.
    + * Returns: (element-type PurpleMimePart) (transfer none): List of MIME parts
    + * contained within doc.
    */
    GList *purple_mime_document_get_parts(PurpleMimeDocument *doc);
    @@ -159,8 +160,8 @@
    *
    * The list of fields in the header of a document part.
    *
    - * Returns: (transfer none): List of strings indicating the fields (but not the
    - * values of the fields) in the header of part.
    + * Returns: (element-type utf8) (transfer none): List of strings indicating the
    + * fields (but not the values of the fields) in the header of part.
    */
    GList *purple_mime_part_get_fields(PurpleMimePart *part);
    --- a/libpurple/network.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/network.h Thu Nov 23 22:30:26 2017 -0600
    @@ -87,7 +87,7 @@
    * Note: The caller must free this list. If libpurple was built with
    * support for it, this function also enumerates IPv6 addresses.
    *
    - * Returns: A list of local IP addresses.
    + * Returns: (element-type utf8): A list of local IP addresses.
    */
    GList *purple_network_get_all_local_system_ips(void);
    --- a/libpurple/notify.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/notify.h Thu Nov 23 22:30:26 2017 -0600
    @@ -371,7 +371,7 @@
    /**
    * purple_notify_searchresults_row_add:
    * @results: The search results object.
    - * @row: The row of the results.
    + * @row: (element-type utf8) (transfer full): The row of the results.
    *
    * Adds a new row of the results to the search results object.
    */
    --- a/libpurple/pluginpref.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/pluginpref.h Thu Nov 23 22:30:26 2017 -0600
    @@ -100,7 +100,7 @@
    *
    * Get the plugin preferences from a plugin preference frame
    *
    - * Returns: (transfer none): a GList of plugin preferences
    + * Returns: (element-type PurplePluginPref) (transfer none): a list of plugin preferences
    */
    GList *purple_plugin_pref_frame_get_prefs(PurplePluginPrefFrame *frame);
    --- a/libpurple/plugins.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/plugins.h Thu Nov 23 22:30:26 2017 -0600
    @@ -500,7 +500,7 @@
    *
    * Returns a plugin's #PurplePluginInfo instance.
    *
    - * Returns: (transfer none) The plugin's #PurplePluginInfo instance.
    + * Returns: (transfer none): The plugin's #PurplePluginInfo instance.
    * GPlugin refs the plugin info object before returning it. This workaround
    * is to avoid managing the reference counts everywhere in our codebase
    * where we use the plugin info. The plugin info instance is guaranteed to
    --- a/libpurple/plugins/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,137 +0,0 @@
    -DIST_SUBDIRS = keyrings
    -
    -if ENABLE_DBUS
    -DBUS_LTLIB = dbus-example.la
    -endif
    -
    -SUBDIRS = \
    - keyrings
    -
    -plugindir = @PURPLE_PLUGINDIR@
    -
    -autoaccept_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -buddynote_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -codeinline_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -debug_example_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -helloworld_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -idle_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -joinpart_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -log_reader_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -notify_example_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -offlinemsg_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -one_time_password_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -pluginpref_example_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -psychic_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -signals_test_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -simple_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -statenotify_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -
    -# this can't be in a conditional otherwise automake 1.4 yells
    -dbus_example_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -
    -if PLUGINS
    -
    -plugin_LTLIBRARIES = \
    - autoaccept.la \
    - buddynote.la \
    - idle.la \
    - joinpart.la \
    - log_reader.la \
    - offlinemsg.la \
    - psychic.la \
    - statenotify.la
    -
    -noinst_LTLIBRARIES = \
    - codeinline.la \
    - debug_example.la \
    - helloworld.la \
    - notify_example.la \
    - one_time_password.la \
    - pluginpref_example.la \
    - signals_test.la \
    - simple.la \
    - $(DBUS_LTLIB)
    -
    -autoaccept_la_SOURCES = autoaccept.c
    -buddynote_la_SOURCES = buddynote.c
    -codeinline_la_SOURCES = codeinline.c
    -debug_example_la_SOURCES = debug_example.c
    -helloworld_la_SOURCES = helloworld.c
    -idle_la_SOURCES = idle.c
    -joinpart_la_SOURCES = joinpart.c
    -log_reader_la_SOURCES = log_reader.c
    -notify_example_la_SOURCES = notify_example.c
    -offlinemsg_la_SOURCES = offlinemsg.c
    -one_time_password_la_SOURCES = one_time_password.c
    -pluginpref_example_la_SOURCES = pluginpref_example.c
    -psychic_la_SOURCES = psychic.c
    -signals_test_la_SOURCES = signals-test.c
    -simple_la_SOURCES = simple.c
    -statenotify_la_SOURCES = statenotify.c
    -
    -autoaccept_la_LIBADD = @PURPLE_LIBS@
    -buddynote_la_LIBADD = @PURPLE_LIBS@
    -codeinline_la_LIBADD = @PURPLE_LIBS@
    -idle_la_LIBADD = @PURPLE_LIBS@
    -joinpart_la_LIBADD = @PURPLE_LIBS@
    -log_reader_la_LIBADD = @PURPLE_LIBS@
    -notify_example_la_LIBADD = @PURPLE_LIBS@
    -offlinemsg_la_LIBADD = @PURPLE_LIBS@
    -one_time_password_la_LIBADD = @PURPLE_LIBS@
    -pluginpref_example_la_LIBADD = @PURPLE_LIBS@
    -psychic_la_LIBADD = @PURPLE_LIBS@
    -signals_test_la_LIBADD = @PURPLE_LIBS@
    -simple_la_LIBADD = @PURPLE_LIBS@
    -statenotify_la_LIBADD = @PURPLE_LIBS@
    -
    -if ENABLE_DBUS
    -
    -CLEANFILES = dbus-example-bindings.ch
    -dbus_example_la_SOURCES = dbus-example.c
    -
    -dbus_example_la_LIBADD = @PURPLE_LIBS@ $(DBUS_LIBS)
    -
    -.PHONY: always
    -
    -$(top_builddir)/libpurple/dbus-types.h: always
    - $(AM_V_GEN)cd $(@D) && $(MAKE) $(AM_MAKEFLAGS) $(@F)
    -
    -dbus-example-bindings.ch: $(top_srcdir)/libpurple/dbus-analyze-functions.py $(dbus_example_la_SOURCES)
    - $(AM_V_GEN)cat $(srcdir)/$(dbus_example_la_SOURCES) | \
    - $(PYTHON) $(top_srcdir)/libpurple/dbus-analyze-functions.py --export-only > $@
    -
    -$(dbus_example_la_OBJECTS) dbus-example.so: dbus-example-bindings.ch $(top_builddir)/libpurple/dbus-types.h
    -
    -
    -endif # ENABLE_DBUS
    -
    -endif # PLUGINS
    -
    -EXTRA_DIST = \
    - Makefile.mingw \
    - dbus-buddyicons-example.py \
    - filectl.c \
    - startup.py
    -
    -AM_CPPFLAGS = \
    - -I$(top_srcdir)/libpurple \
    - -I$(top_builddir)/libpurple \
    - $(DEBUG_CFLAGS) \
    - $(GLIB_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(PLUGIN_CFLAGS) \
    - $(DBUS_CFLAGS)
    -
    -PLUGIN_LIBS =
    -
    -#
    -# This part allows people to build their own plugins in here.
    -# Yes, it's a mess.
    -#
    -SUFFIXES = .c .so
    -.c.so:
    - $(LIBTOOL) --mode=compile $(CC) -DHAVE_CONFIG_H -I$(top_builddir) $(AM_CPPFLAGS) $(CFLAGS) -c $< -o tmp$@.lo $(PLUGIN_CFLAGS)
    - $(LIBTOOL) --mode=link $(CC) $(CFLAGS) -o libtmp$@.la -rpath $(plugindir) tmp$@.lo $(LIBS) $(LDFLAGS) -module @PLUGIN_LDFLAGS@ $(PLUGIN_LIBS)
    - @rm -f tmp$@.lo tmp$@.o libtmp$@.la
    - @cp .libs/libtmp$@*.so $@
    - @rm -rf .libs/libtmp$@.*
    --- a/libpurple/plugins/Makefile.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,73 +0,0 @@
    -#
    -# Makefile.mingw
    -#
    -# Description: Makefile for win32 (mingw) version of libpurple Plugins
    -#
    -
    -PIDGIN_TREE_TOP := ../..
    -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
    -
    -KEYRING_PLUGIN := ./keyrings
    -
    -.SUFFIXES:
    -.SUFFIXES: .c .dll
    -
    -##
    -## INCLUDE PATHS
    -##
    -INCLUDE_PATHS += \
    - -I$(GTK_TOP)/include \
    - -I$(GTK_TOP)/include/glib-2.0 \
    - -I$(GTK_TOP)/lib/glib-2.0/include \
    - -I$(PIDGIN_TREE_TOP) \
    - -I$(PURPLE_TOP) \
    - -I$(PURPLE_TOP)/win32
    -
    -LIB_PATHS += -L$(GTK_TOP)/lib \
    - -L$(PURPLE_TOP)
    -
    -##
    -## LIBRARIES
    -##
    -LIBS = \
    - -lglib-2.0 \
    - -lgobject-2.0 \
    - -lgmodule-2.0 \
    - -lintl \
    - -lws2_32 \
    - -lpurple
    -
    -##
    -## TARGET DEFINITIONS
    -##
    -.PHONY: all clean plugins install
    -
    -all: $(PURPLE_DLL).a plugins
    - $(MAKE_at) $(MAKE) -C $(KEYRING_PLUGIN) -f $(MINGW_MAKEFILE)
    -
    -install: all $(PURPLE_INSTALL_PLUGINS_DIR)
    - $(MAKE_at) $(MAKE) -C $(KEYRING_PLUGIN) -f $(MINGW_MAKEFILE) install
    - cp *.dll $(PURPLE_INSTALL_PLUGINS_DIR)
    -
    -%.dll: %.c $(PURPLE_CONFIG_H) $(PURPLE_VERSION_H)
    - $(CC) $(CFLAGS) $(DEFINES) $(INCLUDE_PATHS) -o $@.o -c $<
    - $(CC) -shared $@.o $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $@
    -
    -plugins: \
    - autoaccept.dll \
    - buddynote.dll \
    - idle.dll \
    - joinpart.dll \
    - log_reader.dll \
    - offlinemsg.dll \
    - psychic.dll \
    - statenotify.dll
    -
    -##
    -## CLEAN RULES
    -##
    -clean:
    - rm -f *.o *.dll
    - $(MAKE_at) $(MAKE) -C $(KEYRING_PLUGIN) -f $(MINGW_MAKEFILE) clean
    -
    -include $(PIDGIN_COMMON_TARGETS)
    --- a/libpurple/plugins/keyrings/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,99 +0,0 @@
    -EXTRA_DIST = \
    - Makefile.mingw \
    - wincred.c
    -CLEANFILES =
    -
    -plugindir = @PURPLE_PLUGINDIR@
    -
    -if ENABLE_NETTLE
    -
    -internalkeyring_la_CFLAGS = $(AM_CPPFLAGS) $(NETTLE_CFLAGS)
    -internalkeyring_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -internalkeyring_la_SOURCES = internalkeyring.c
    -internalkeyring_la_LIBADD = @PURPLE_LIBS@ $(NETTLE_LIBS)
    -
    -endif
    -
    -if ENABLE_SECRETSERVICE
    -
    -secretservice_la_CFLAGS = $(AM_CPPFLAGS) $(SECRETSERVICE_CFLAGS)
    -secretservice_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -secretservice_la_SOURCES = secretservice.c
    -secretservice_la_LIBADD = @PURPLE_LIBS@ $(SECRETSERVICE_LIBS)
    -
    -endif
    -
    -if ENABLE_GNOMEKEYRING
    -
    -gnomekeyring_la_CFLAGS = $(AM_CPPFLAGS) $(GNOMEKEYRING_CFLAGS)
    -gnomekeyring_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -gnomekeyring_la_SOURCES = gnomekeyring.c
    -gnomekeyring_la_LIBADD = @PURPLE_LIBS@ $(GNOMEKEYRING_LIBS)
    -
    -endif
    -
    -if IS_WIN32
    -
    -wincred_la_CFLAGS = $(AM_CPPFLAGS)
    -wincred_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -wincred_la_SOURCES = wincred.c
    -wincred_la_LIBADD = @PURPLE_LIBS@
    -
    -endif
    -
    -if ENABLE_KWALLET
    -
    -kwallet_la_CXXFLAGS = $(KWALLET_CXXFLAGS) $(QT4_CFLAGS)
    -kwallet_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -kwallet_la_SOURCES = kwallet.cpp
    -kwallet_la_BUILTSOURCES = kwallet.moc
    -kwallet_la_LIBADD = @PURPLE_LIBS@ $(KWALLET_LIBS) $(QT4_LIBS)
    -
    -kwallet.cpp: kwallet.moc
    -
    -kwallet.moc:
    - $(AM_V_GEN)$(MOC) $(kwallet_la_CXXFLAGS) -i $(srcdir)/kwallet.cpp -o $@
    -
    -CLEANFILES += kwallet.moc
    -
    -endif
    -
    -if PLUGINS
    -
    -plugin_LTLIBRARIES =
    -
    -if ENABLE_NETTLE
    -plugin_LTLIBRARIES += \
    - internalkeyring.la
    -endif
    -
    -if ENABLE_SECRETSERVICE
    -plugin_LTLIBRARIES += \
    - secretservice.la
    -endif
    -
    -if ENABLE_GNOMEKEYRING
    -plugin_LTLIBRARIES += \
    - gnomekeyring.la
    -endif
    -
    -if IS_WIN32
    -plugin_LTLIBRARIES += \
    - wincred.la
    -endif
    -
    -if ENABLE_KWALLET
    -plugin_LTLIBRARIES += \
    - kwallet.la
    -endif
    -
    -endif
    -
    -#XXX: that might be done better than adding DEBUG_CPPFLAGS to all objects (not only C++ ones)
    -AM_CPPFLAGS = \
    - -I$(top_srcdir)/libpurple \
    - -I$(top_builddir)/libpurple \
    - $(GLIB_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(DEBUG_CPPFLAGS) \
    - $(PLUGIN_CFLAGS)
    --- a/libpurple/plugins/keyrings/Makefile.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,82 +0,0 @@
    -#
    -# Makefile.mingw
    -#
    -# Description: Makefile for keyring plugins.
    -#
    -
    -PIDGIN_TREE_TOP := ../../..
    -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
    -
    -##
    -## VARIABLE DEFINITIONS
    -##
    -TARGET_INTERNAL = internalkeyring
    -TARGET_WINCRED = wincred
    -
    -##
    -## INCLUDE PATHS
    -##
    -INCLUDE_PATHS += \
    - -I. \
    - -I$(GTK_TOP)/include \
    - -I$(GTK_TOP)/include/glib-2.0 \
    - -I$(GTK_TOP)/lib/glib-2.0/include \
    - -I$(PURPLE_TOP) \
    - -I$(PURPLE_TOP)/win32 \
    - -I$(PIDGIN_TREE_TOP)
    -
    -LIB_PATHS += \
    - -L$(GTK_TOP)/lib \
    - -L$(PURPLE_TOP)
    -
    -##
    -## SOURCES, OBJECTS
    -##
    -C_SRC_INTERNAL = internalkeyring.c
    -OBJECTS_INTERNAL = $(C_SRC_INTERNAL:%.c=%.o)
    -
    -C_SRC_WINCRED = wincred.c
    -OBJECTS_WINCRED = $(C_SRC_WINCRED:%.c=%.o)
    -
    -##
    -## LIBRARIES
    -##
    -LIBS = \
    - -lglib-2.0 \
    - -lgobject-2.0 \
    - -lws2_32 \
    - -lintl \
    - -lpurple
    -
    -include $(PIDGIN_COMMON_RULES)
    -
    -##
    -## TARGET DEFINITIONS
    -##
    -.PHONY: all install clean
    -
    -all: $(TARGET_INTERNAL).dll $(TARGET_WINCRED).dll
    -
    -install: all $(PURPLE_INSTALL_PLUGINS_DIR) $(PURPLE_INSTALL_DIR)
    - cp $(TARGET_INTERNAL).dll $(PURPLE_INSTALL_PLUGINS_DIR)
    - cp $(TARGET_WINCRED).dll $(PURPLE_INSTALL_PLUGINS_DIR)
    -
    -$(OBJECTS_INTERNAL): $(PURPLE_CONFIG_H)
    -
    -##
    -## BUILD DLL
    -##
    -$(TARGET_INTERNAL).dll: $(PURPLE_DLL) $(OBJECTS_INTERNAL)
    - $(CC) -shared $(OBJECTS_INTERNAL) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET_INTERNAL).dll
    -
    -$(TARGET_WINCRED).dll: $(PURPLE_DLL) $(OBJECTS_WINCRED)
    - $(CC) -shared $(OBJECTS_WINCRED) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET_WINCRED).dll
    -
    -##
    -## CLEAN RULES
    -##
    -clean:
    - rm -f $(OBJECTS_INTERNAL) $(TARGET_INTERNAL).dll
    - rm -f $(OBJECTS_WINCRED) $(TARGET_WINCRED).dll
    -
    -include $(PIDGIN_COMMON_TARGETS)
    --- a/libpurple/pounce.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/pounce.h Thu Nov 23 22:30:26 2017 -0600
    @@ -81,7 +81,7 @@
    *
    * A pounce callback.
    */
    -typedef void (*PurplePounceCb)(PurplePounce *, PurplePounceEvent, void *);
    +typedef void (*PurplePounceCb)(PurplePounce *pounce, PurplePounceEvent event, void *data);
    G_BEGIN_DECLS
    @@ -358,7 +358,7 @@
    *
    * Returns a list of all registered buddy pounces.
    *
    - * Returns: (transfer none): The list of buddy pounces.
    + * Returns: (element-type PurplePounce) (transfer none): The list of buddy pounces.
    */
    GList *purple_pounces_get_all(void);
    @@ -368,8 +368,7 @@
    *
    * Returns a list of registered buddy pounces for the ui-type.
    *
    - * Returns: The list of buddy pounces. The list should be freed by
    - * the caller when it's no longer used.
    + * Returns: (element-type PurplePounce) (transfer container): The list of buddy pounces.
    */
    GList *purple_pounces_get_all_for_ui(const char *ui);
    --- a/libpurple/prefs.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/prefs.h Thu Nov 23 22:30:26 2017 -0600
    @@ -130,24 +130,26 @@
    void (*schedule_save)(void);
    /**
    + * connect_callback:
    + * @name: The preference name.
    + * @data: The object to be passed when triggering the callback
    + *
    * Called when a callback is added to a preference. The UI must keep
    * track of it and call #purple_prefs_trigger_callback_object with the
    * data attribute.
    *
    - * @param name The preference name.
    - * @param data The object to be passed when triggering the callback
    - * @return A pointer to a ui_data object.
    - * */
    + * Returns: A pointer to a ui_data object.
    + */
    void *(*connect_callback)(const char *name, PurplePrefCallbackData *data);
    /**
    + * disconnect_callback:
    + * @name The preference name
    + * @ui_data The object that was returned from the connect_callback UI OP.
    + *
    * Called when a callback is removed from a preference. The ui_data
    * object is the one returned from connect_callback.
    - *
    - * @param name The preference name
    - * @param ui_data The object that was returned from the
    - * connect_callback UI OP.
    - * */
    + */
    void (*disconnect_callback)(const char *name, void *ui_data);
    void (*_purple_reserved1)(void);
    @@ -250,7 +252,7 @@
    /**
    * purple_prefs_add_string_list:
    * @name: The name of the pref
    - * @value: The initial value to set
    + * @value: (element-type utf8) (transfer none): The initial value to set
    *
    * Add a new string list pref.
    *
    @@ -272,7 +274,7 @@
    /**
    * purple_prefs_add_path_list:
    * @name: The name of the pref
    - * @value: The initial value to set
    + * @value: (element-type utf8) (transfer none): The initial value to set
    *
    * Add a new path list pref.
    *
    @@ -346,7 +348,7 @@
    /**
    * purple_prefs_set_string_list:
    * @name: The name of the pref
    - * @value: The value to set
    + * @value: (element-type utf8) (transfer none): The value to set
    *
    * Set string list pref value
    */
    @@ -364,7 +366,7 @@
    /**
    * purple_prefs_set_path_list:
    * @name: The name of the pref
    - * @value: The value to set
    + * @value: (element-type utf8) (transfer none): The value to set
    *
    * Set path list pref value
    */
    @@ -427,7 +429,7 @@
    *
    * Get string list pref value
    *
    - * Returns: The value of the pref
    + * Returns: (element-type utf8): The value of the pref
    */
    GList *purple_prefs_get_string_list(const char *name);
    @@ -447,7 +449,7 @@
    *
    * Get path list pref value
    *
    - * Returns: The value of the pref
    + * Returns: (element-type utf8): The value of the pref
    */
    GList *purple_prefs_get_path_list(const char *name);
    @@ -457,9 +459,9 @@
    *
    * Returns a list of children for a pref
    *
    - * Returns: A list of newly allocated strings denoting the names of the children.
    - * Returns %NULL if there are no children or if pref doesn't exist.
    - * The caller must free all the strings and the list.
    + * Returns: (element-type utf8): A list of newly allocated strings denoting the
    + * names of the children. Returns %NULL if there are no children or if
    + * pref doesn't exist. The caller must free all the strings and the list.
    */
    GList *purple_prefs_get_children_names(const char *name);
    --- a/libpurple/presence.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/presence.h Thu Nov 23 22:30:26 2017 -0600
    @@ -302,7 +302,7 @@
    *
    * Returns all the statuses in a presence.
    *
    - * Returns: (transfer none): The statuses.
    + * Returns: (element-type PurpleStatus) (transfer none): The statuses.
    */
    GList *purple_presence_get_statuses(const PurplePresence *presence);
    --- a/libpurple/protocol.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/protocol.h Thu Nov 23 22:30:26 2017 -0600
    @@ -128,9 +128,9 @@
    {
    GObjectClass parent_class;
    - void (*login)(PurpleAccount *);
    + void (*login)(PurpleAccount *account);
    - void (*close)(PurpleConnection *);
    + void (*close)(PurpleConnection *connection);
    GList *(*status_types)(PurpleAccount *account);
    @@ -215,7 +215,7 @@
    GTypeInterface parent_iface;
    /*< public >*/
    - GList *(*get_actions)(PurpleConnection *);
    + GList *(*get_actions)(PurpleConnection *connection);
    const char *(*list_emblem)(PurpleBuddy *buddy);
    @@ -226,9 +226,9 @@
    GList *(*blist_node_menu)(PurpleBlistNode *node);
    - void (*buddy_free)(PurpleBuddy *);
    + void (*buddy_free)(PurpleBuddy *buddy);
    - void (*convo_closed)(PurpleConnection *, const char *who);
    + void (*convo_closed)(PurpleConnection *connection, const char *who);
    const char *(*normalize)(const PurpleAccount *account, const char *who);
    @@ -323,20 +323,20 @@
    GTypeInterface parent_iface;
    /*< public >*/
    - void (*register_user)(PurpleAccount *);
    + void (*register_user)(PurpleAccount *account);
    - void (*unregister_user)(PurpleAccount *, PurpleAccountUnregistrationCb cb,
    + void (*unregister_user)(PurpleAccount *account, PurpleAccountUnregistrationCb cb,
    void *user_data);
    - void (*set_info)(PurpleConnection *, const char *info);
    + void (*set_info)(PurpleConnection *connection, const char *info);
    - void (*get_info)(PurpleConnection *, const char *who);
    + void (*get_info)(PurpleConnection *connection, const char *who);
    void (*set_status)(PurpleAccount *account, PurpleStatus *status);
    - void (*set_idle)(PurpleConnection *, int idletime);
    + void (*set_idle)(PurpleConnection *connection, int idletime);
    - void (*change_passwd)(PurpleConnection *, const char *old_pass,
    + void (*change_passwd)(PurpleConnection *connection, const char *old_pass,
    const char *new_pass);
    void (*add_buddy)(PurpleConnection *pc, PurpleBuddy *buddy,
    @@ -345,23 +345,23 @@
    void (*add_buddies)(PurpleConnection *pc, GList *buddies, GList *groups,
    const char *message);
    - void (*remove_buddy)(PurpleConnection *, PurpleBuddy *buddy,
    + void (*remove_buddy)(PurpleConnection *connection, PurpleBuddy *buddy,
    PurpleGroup *group);
    - void (*remove_buddies)(PurpleConnection *, GList *buddies, GList *groups);
    + void (*remove_buddies)(PurpleConnection *connection, GList *buddies, GList *groups);
    - void (*keepalive)(PurpleConnection *);
    + void (*keepalive)(PurpleConnection *connection);
    - void (*alias_buddy)(PurpleConnection *, const char *who,
    + void (*alias_buddy)(PurpleConnection *connection, const char *who,
    const char *alias);
    - void (*group_buddy)(PurpleConnection *, const char *who,
    + void (*group_buddy)(PurpleConnection *connection, const char *who,
    const char *old_group, const char *new_group);
    - void (*rename_group)(PurpleConnection *, const char *old_name,
    + void (*rename_group)(PurpleConnection *connection, const char *old_name,
    PurpleGroup *group, GList *moved_buddies);
    - void (*set_buddy_icon)(PurpleConnection *, PurpleImage *img);
    + void (*set_buddy_icon)(PurpleConnection *connection, PurpleImage *img);
    void (*remove_group)(PurpleConnection *gc, PurpleGroup *group);
    @@ -410,9 +410,9 @@
    GTypeInterface parent_iface;
    /*< public >*/
    - int (*send)(PurpleConnection *, PurpleMessage *msg);
    + int (*send)(PurpleConnection *connection, PurpleMessage *msg);
    - unsigned int (*send_typing)(PurpleConnection *, const char *name,
    + unsigned int (*send_typing)(PurpleConnection *connection, const char *name,
    PurpleIMTypingState state);
    };
    @@ -493,22 +493,22 @@
    GTypeInterface parent_iface;
    /*< public >*/
    - GList *(*info)(PurpleConnection *);
    + GList *(*info)(PurpleConnection *connection);
    - GHashTable *(*info_defaults)(PurpleConnection *, const char *chat_name);
    + GHashTable *(*info_defaults)(PurpleConnection *connection, const char *chat_name);
    - void (*join)(PurpleConnection *, GHashTable *components);
    + void (*join)(PurpleConnection *connection, GHashTable *components);
    - void (*reject)(PurpleConnection *, GHashTable *components);
    + void (*reject)(PurpleConnection *connection, GHashTable *components);
    char *(*get_name)(GHashTable *components);
    - void (*invite)(PurpleConnection *, int id,
    + void (*invite)(PurpleConnection *connection, int id,
    const char *message, const char *who);
    - void (*leave)(PurpleConnection *, int id);
    + void (*leave)(PurpleConnection *connection, int id);
    - int (*send)(PurpleConnection *, int id, PurpleMessage *msg);
    + int (*send)(PurpleConnection *connection, int id, PurpleMessage *msg);
    char *(*get_user_real_name)(PurpleConnection *gc, int id, const char *who);
    @@ -819,14 +819,14 @@
    /* Protocol Class API */
    /**************************************************************************/
    -void purple_protocol_class_login(PurpleProtocol *, PurpleAccount *);
    +void purple_protocol_class_login(PurpleProtocol *protocol, PurpleAccount *account);
    -void purple_protocol_class_close(PurpleProtocol *, PurpleConnection *);
    +void purple_protocol_class_close(PurpleProtocol *protocol, PurpleConnection *connection);
    -GList *purple_protocol_class_status_types(PurpleProtocol *,
    +GList *purple_protocol_class_status_types(PurpleProtocol *protocol,
    PurpleAccount *account);
    -const char *purple_protocol_class_list_icon(PurpleProtocol *,
    +const char *purple_protocol_class_list_icon(PurpleProtocol *protocol,
    PurpleAccount *account, PurpleBuddy *buddy);
    /**************************************************************************/
    @@ -840,42 +840,42 @@
    */
    GType purple_protocol_client_iface_get_type(void);
    -GList *purple_protocol_client_iface_get_actions(PurpleProtocol *,
    - PurpleConnection *);
    +GList *purple_protocol_client_iface_get_actions(PurpleProtocol *protocol,
    + PurpleConnection *connection);
    -const char *purple_protocol_client_iface_list_emblem(PurpleProtocol *,
    +const char *purple_protocol_client_iface_list_emblem(PurpleProtocol *protocol,
    PurpleBuddy *buddy);
    -char *purple_protocol_client_iface_status_text(PurpleProtocol *,
    +char *purple_protocol_client_iface_status_text(PurpleProtocol *protocol,
    PurpleBuddy *buddy);
    -void purple_protocol_client_iface_tooltip_text(PurpleProtocol *,
    +void purple_protocol_client_iface_tooltip_text(PurpleProtocol *protocol,
    PurpleBuddy *buddy, PurpleNotifyUserInfo *user_info, gboolean full);
    -GList *purple_protocol_client_iface_blist_node_menu(PurpleProtocol *,
    +GList *purple_protocol_client_iface_blist_node_menu(PurpleProtocol *protocol,
    PurpleBlistNode *node);
    -void purple_protocol_client_iface_buddy_free(PurpleProtocol *, PurpleBuddy *);
    +void purple_protocol_client_iface_buddy_free(PurpleProtocol *protocol, PurpleBuddy *buddy);
    -void purple_protocol_client_iface_convo_closed(PurpleProtocol *,
    - PurpleConnection *, const char *who);
    +void purple_protocol_client_iface_convo_closed(PurpleProtocol *protocol,
    + PurpleConnection *connection, const char *who);
    -const char *purple_protocol_client_iface_normalize(PurpleProtocol *,
    +const char *purple_protocol_client_iface_normalize(PurpleProtocol *protocol,
    const PurpleAccount *account, const char *who);
    -PurpleChat *purple_protocol_client_iface_find_blist_chat(PurpleProtocol *,
    +PurpleChat *purple_protocol_client_iface_find_blist_chat(PurpleProtocol *protocol,
    PurpleAccount *account, const char *name);
    -gboolean purple_protocol_client_iface_offline_message(PurpleProtocol *,
    +gboolean purple_protocol_client_iface_offline_message(PurpleProtocol *protocol,
    const PurpleBuddy *buddy);
    -GHashTable *purple_protocol_client_iface_get_account_text_table(PurpleProtocol *,
    +GHashTable *purple_protocol_client_iface_get_account_text_table(PurpleProtocol *protocol,
    PurpleAccount *account);
    -PurpleMood *purple_protocol_client_iface_get_moods(PurpleProtocol *,
    +PurpleMood *purple_protocol_client_iface_get_moods(PurpleProtocol *protocol,
    PurpleAccount *account);
    -gssize purple_protocol_client_iface_get_max_message_size(PurpleProtocol *,
    +gssize purple_protocol_client_iface_get_max_message_size(PurpleProtocol *protocol,
    PurpleConversation *conv);
    /**************************************************************************/
    @@ -889,66 +889,66 @@
    */
    GType purple_protocol_server_iface_get_type(void);
    -void purple_protocol_server_iface_register_user(PurpleProtocol *,
    - PurpleAccount *);
    +void purple_protocol_server_iface_register_user(PurpleProtocol *protocol,
    + PurpleAccount *account);
    /**
    * purple_protocol_server_iface_unregister_user:
    * @cb: (scope call):
    */
    -void purple_protocol_server_iface_unregister_user(PurpleProtocol *,
    - PurpleAccount *, PurpleAccountUnregistrationCb cb, void *user_data);
    +void purple_protocol_server_iface_unregister_user(PurpleProtocol *protocol,
    + PurpleAccount *account, PurpleAccountUnregistrationCb cb, void *user_data);
    -void purple_protocol_server_iface_set_info(PurpleProtocol *, PurpleConnection *,
    +void purple_protocol_server_iface_set_info(PurpleProtocol *protocol, PurpleConnection *connection,
    const char *info);
    -void purple_protocol_server_iface_get_info(PurpleProtocol *, PurpleConnection *,
    +void purple_protocol_server_iface_get_info(PurpleProtocol *protocol, PurpleConnection *connection,
    const char *who);
    -void purple_protocol_server_iface_set_status(PurpleProtocol *,
    +void purple_protocol_server_iface_set_status(PurpleProtocol *protocol,
    PurpleAccount *account, PurpleStatus *status);
    -void purple_protocol_server_iface_set_idle(PurpleProtocol *, PurpleConnection *,
    +void purple_protocol_server_iface_set_idle(PurpleProtocol *protocol, PurpleConnection *connection,
    int idletime);
    -void purple_protocol_server_iface_change_passwd(PurpleProtocol *,
    - PurpleConnection *, const char *old_pass, const char *new_pass);
    +void purple_protocol_server_iface_change_passwd(PurpleProtocol *protocol,
    + PurpleConnection *connection, const char *old_pass, const char *new_pass);
    -void purple_protocol_server_iface_add_buddy(PurpleProtocol *,
    +void purple_protocol_server_iface_add_buddy(PurpleProtocol *protocol,
    PurpleConnection *pc, PurpleBuddy *buddy, PurpleGroup *group,
    const char *message);
    -void purple_protocol_server_iface_add_buddies(PurpleProtocol *,
    +void purple_protocol_server_iface_add_buddies(PurpleProtocol *protocol,
    PurpleConnection *pc, GList *buddies, GList *groups,
    const char *message);
    -void purple_protocol_server_iface_remove_buddy(PurpleProtocol *,
    - PurpleConnection *, PurpleBuddy *buddy, PurpleGroup *group);
    +void purple_protocol_server_iface_remove_buddy(PurpleProtocol *protocol,
    + PurpleConnection *connection, PurpleBuddy *buddy, PurpleGroup *group);
    -void purple_protocol_server_iface_remove_buddies(PurpleProtocol *,
    - PurpleConnection *, GList *buddies, GList *groups);
    +void purple_protocol_server_iface_remove_buddies(PurpleProtocol *protocol,
    + PurpleConnection *connection, GList *buddies, GList *groups);
    -void purple_protocol_server_iface_keepalive(PurpleProtocol *,
    - PurpleConnection *);
    +void purple_protocol_server_iface_keepalive(PurpleProtocol *protocol,
    + PurpleConnection *connection);
    -void purple_protocol_server_iface_alias_buddy(PurpleProtocol *,
    - PurpleConnection *, const char *who, const char *alias);
    +void purple_protocol_server_iface_alias_buddy(PurpleProtocol *protocol,
    + PurpleConnection *connection, const char *who, const char *alias);
    -void purple_protocol_server_iface_group_buddy(PurpleProtocol *,
    - PurpleConnection *, const char *who, const char *old_group,
    +void purple_protocol_server_iface_group_buddy(PurpleProtocol *protocol,
    + PurpleConnection *connection, const char *who, const char *old_group,
    const char *new_group);
    -void purple_protocol_server_iface_rename_group(PurpleProtocol *,
    - PurpleConnection *, const char *old_name, PurpleGroup *group,
    +void purple_protocol_server_iface_rename_group(PurpleProtocol *protocol,
    + PurpleConnection *connection, const char *old_name, PurpleGroup *group,
    GList *moved_buddies);
    -void purple_protocol_server_iface_set_buddy_icon(PurpleProtocol *,
    - PurpleConnection *, PurpleImage *img);
    +void purple_protocol_server_iface_set_buddy_icon(PurpleProtocol *protocol,
    + PurpleConnection *connection, PurpleImage *img);
    -void purple_protocol_server_iface_remove_group(PurpleProtocol *,
    +void purple_protocol_server_iface_remove_group(PurpleProtocol *protocol,
    PurpleConnection *gc, PurpleGroup *group);
    -int purple_protocol_server_iface_send_raw(PurpleProtocol *,
    +int purple_protocol_server_iface_send_raw(PurpleProtocol *protocol,
    PurpleConnection *gc, const char *buf, int len);
    /**
    @@ -956,7 +956,7 @@
    * @success_cb: (scope call):
    * @failure_cb: (scope call):
    */
    -void purple_protocol_server_iface_set_public_alias(PurpleProtocol *,
    +void purple_protocol_server_iface_set_public_alias(PurpleProtocol *protocol,
    PurpleConnection *gc, const char *alias,
    PurpleSetPublicAliasSuccessCallback success_cb,
    PurpleSetPublicAliasFailureCallback failure_cb);
    @@ -966,7 +966,7 @@
    * @success_cb: (scope call):
    * @failure_cb: (scope call):
    */
    -void purple_protocol_server_iface_get_public_alias(PurpleProtocol *,
    +void purple_protocol_server_iface_get_public_alias(PurpleProtocol *protocol,
    PurpleConnection *gc, PurpleGetPublicAliasSuccessCallback success_cb,
    PurpleGetPublicAliasFailureCallback failure_cb);
    @@ -981,11 +981,11 @@
    */
    GType purple_protocol_im_iface_get_type(void);
    -int purple_protocol_im_iface_send(PurpleProtocol *, PurpleConnection *,
    +int purple_protocol_im_iface_send(PurpleProtocol *protocol, PurpleConnection *connection,
    PurpleMessage *msg);
    -unsigned int purple_protocol_im_iface_send_typing(PurpleProtocol *,
    - PurpleConnection *, const char *name, PurpleIMTypingState state);
    +unsigned int purple_protocol_im_iface_send_typing(PurpleProtocol *protocol,
    + PurpleConnection *connection, const char *name, PurpleIMTypingState state);
    /**************************************************************************/
    /* Protocol Chat Interface API */
    @@ -998,34 +998,34 @@
    */
    GType purple_protocol_chat_iface_get_type(void);
    -GList *purple_protocol_chat_iface_info(PurpleProtocol *,
    - PurpleConnection *);
    +GList *purple_protocol_chat_iface_info(PurpleProtocol *protocol,
    + PurpleConnection *connection);
    -GHashTable *purple_protocol_chat_iface_info_defaults(PurpleProtocol *,
    - PurpleConnection *, const char *chat_name);
    +GHashTable *purple_protocol_chat_iface_info_defaults(PurpleProtocol *protocol,
    + PurpleConnection *connection, const char *chat_name);
    -void purple_protocol_chat_iface_join(PurpleProtocol *, PurpleConnection *,
    +void purple_protocol_chat_iface_join(PurpleProtocol *protocol, PurpleConnection *connection,
    GHashTable *components);
    -void purple_protocol_chat_iface_reject(PurpleProtocol *,
    - PurpleConnection *, GHashTable *components);
    +void purple_protocol_chat_iface_reject(PurpleProtocol *protocol,
    + PurpleConnection *connection, GHashTable *components);
    -char *purple_protocol_chat_iface_get_name(PurpleProtocol *,
    +char *purple_protocol_chat_iface_get_name(PurpleProtocol *protocol,
    GHashTable *components);
    -void purple_protocol_chat_iface_invite(PurpleProtocol *,
    - PurpleConnection *, int id, const char *message, const char *who);
    +void purple_protocol_chat_iface_invite(PurpleProtocol *protocol,
    + PurpleConnection *connection, int id, const char *message, const char *who);
    -void purple_protocol_chat_iface_leave(PurpleProtocol *, PurpleConnection *,
    +void purple_protocol_chat_iface_leave(PurpleProtocol *protocol, PurpleConnection *connection,
    int id);
    -int purple_protocol_chat_iface_send(PurpleProtocol *, PurpleConnection *,
    +int purple_protocol_chat_iface_send(PurpleProtocol *protocol, PurpleConnection *connection,
    int id, PurpleMessage *msg);
    -char *purple_protocol_chat_iface_get_user_real_name(PurpleProtocol *,
    +char *purple_protocol_chat_iface_get_user_real_name(PurpleProtocol *protocol,
    PurpleConnection *gc, int id, const char *who);
    -void purple_protocol_chat_iface_set_topic(PurpleProtocol *,
    +void purple_protocol_chat_iface_set_topic(PurpleProtocol *protocol,
    PurpleConnection *gc, int id, const char *topic);
    /**************************************************************************/
    @@ -1039,20 +1039,20 @@
    */
    GType purple_protocol_privacy_iface_get_type(void);
    -void purple_protocol_privacy_iface_add_permit(PurpleProtocol *,
    - PurpleConnection *, const char *name);
    +void purple_protocol_privacy_iface_add_permit(PurpleProtocol *protocol,
    + PurpleConnection *connection, const char *name);
    -void purple_protocol_privacy_iface_add_deny(PurpleProtocol *,
    - PurpleConnection *, const char *name);
    +void purple_protocol_privacy_iface_add_deny(PurpleProtocol *protocol,
    + PurpleConnection *connection, const char *name);
    -void purple_protocol_privacy_iface_rem_permit(PurpleProtocol *,
    - PurpleConnection *, const char *name);
    +void purple_protocol_privacy_iface_rem_permit(PurpleProtocol *protocol,
    + PurpleConnection *connection, const char *name);
    -void purple_protocol_privacy_iface_rem_deny(PurpleProtocol *,
    - PurpleConnection *, const char *name);
    +void purple_protocol_privacy_iface_rem_deny(PurpleProtocol *protocol,
    + PurpleConnection *connection, const char *name);
    -void purple_protocol_privacy_iface_set_permit_deny(PurpleProtocol *,
    - PurpleConnection *);
    +void purple_protocol_privacy_iface_set_permit_deny(PurpleProtocol *protocol,
    + PurpleConnection *connection);
    /**************************************************************************/
    /* Protocol Roomlist Interface API */
    @@ -1065,16 +1065,16 @@
    */
    GType purple_protocol_roomlist_iface_get_type(void);
    -PurpleRoomlist *purple_protocol_roomlist_iface_get_list(PurpleProtocol *,
    +PurpleRoomlist *purple_protocol_roomlist_iface_get_list(PurpleProtocol *protocol,
    PurpleConnection *gc);
    -void purple_protocol_roomlist_iface_cancel(PurpleProtocol *,
    +void purple_protocol_roomlist_iface_cancel(PurpleProtocol *protocol,
    PurpleRoomlist *list);
    -void purple_protocol_roomlist_iface_expand_category(PurpleProtocol *,
    +void purple_protocol_roomlist_iface_expand_category(PurpleProtocol *protocol,
    PurpleRoomlist *list, PurpleRoomlistRoom *category);
    -char *purple_protocol_roomlist_iface_room_serialize(PurpleProtocol *,
    +char *purple_protocol_roomlist_iface_room_serialize(PurpleProtocol *protocol,
    PurpleRoomlistRoom *room);
    /**************************************************************************/
    @@ -1088,10 +1088,10 @@
    */
    GType purple_protocol_attention_iface_get_type(void);
    -gboolean purple_protocol_attention_iface_send(PurpleProtocol *,
    +gboolean purple_protocol_attention_iface_send(PurpleProtocol *protocol,
    PurpleConnection *gc, const char *username, guint type);
    -GList *purple_protocol_attention_iface_get_types(PurpleProtocol *,
    +GList *purple_protocol_attention_iface_get_types(PurpleProtocol *protocol,
    PurpleAccount *acct);
    /**************************************************************************/
    @@ -1105,13 +1105,13 @@
    */
    GType purple_protocol_media_iface_get_type(void);
    -gboolean purple_protocol_media_iface_initiate_session(PurpleProtocol *,
    +gboolean purple_protocol_media_iface_initiate_session(PurpleProtocol *protocol,
    PurpleAccount *account, const char *who, PurpleMediaSessionType type);
    -PurpleMediaCaps purple_protocol_media_iface_get_caps(PurpleProtocol *,
    +PurpleMediaCaps purple_protocol_media_iface_get_caps(PurpleProtocol *protocol,
    PurpleAccount *account, const char *who);
    -gboolean purple_protocol_media_iface_send_dtmf(PurpleProtocol *,
    +gboolean purple_protocol_media_iface_send_dtmf(PurpleProtocol *protocol,
    PurpleMedia *media, gchar dtmf, guint8 volume, guint8 duration);
    /**************************************************************************/
    @@ -1125,16 +1125,28 @@
    */
    GType purple_protocol_factory_iface_get_type(void);
    -PurpleConnection *purple_protocol_factory_iface_connection_new(PurpleProtocol *,
    +/**
    + * purple_protocol_factory_iface_connection_new: (skip)
    + */
    +PurpleConnection *purple_protocol_factory_iface_connection_new(PurpleProtocol *protocol,
    PurpleAccount *account, const char *password);
    -PurpleRoomlist *purple_protocol_factory_iface_roomlist_new(PurpleProtocol *,
    +/**
    + * purple_protocol_factory_iface_roomlist_new: (skip)
    + */
    +PurpleRoomlist *purple_protocol_factory_iface_roomlist_new(PurpleProtocol *protocol,
    PurpleAccount *account);
    -PurpleWhiteboard *purple_protocol_factory_iface_whiteboard_new(PurpleProtocol *,
    +/**
    + * purple_protocol_factory_iface_whiteboard_new: (skip)
    + */
    +PurpleWhiteboard *purple_protocol_factory_iface_whiteboard_new(PurpleProtocol *protocol,
    PurpleAccount *account, const char *who, int state);
    -PurpleXfer *purple_protocol_factory_iface_xfer_new(PurpleProtocol *,
    +/**
    + * purple_protocol_factory_iface_xfer_new: (skip)
    + */
    +PurpleXfer *purple_protocol_factory_iface_xfer_new(PurpleProtocol *protocol,
    PurpleAccount *account, PurpleXferType type, const char *who);
    G_END_DECLS
    --- a/libpurple/protocols.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/protocols.h Thu Nov 23 22:30:26 2017 -0600
    @@ -34,7 +34,7 @@
    #define PURPLE_TYPE_PROTOCOL_ACTION (purple_protocol_action_get_type())
    typedef struct _PurpleProtocolAction PurpleProtocolAction;
    -typedef void (*PurpleProtocolActionCallback)(PurpleProtocolAction *);
    +typedef void (*PurpleProtocolActionCallback)(PurpleProtocolAction *action);
    #define PURPLE_TYPE_ATTENTION_TYPE (purple_attention_type_get_type())
    @@ -466,7 +466,7 @@
    *
    * Retrieves the list of stock status types from a protocol.
    *
    - * Returns: List of statuses
    + * Returns: (transfer full) (element-type PurpleStatus): List of statuses
    */
    GList *purple_protocol_get_statuses(PurpleAccount *account,
    PurplePresence *presence);
    @@ -608,8 +608,8 @@
    *
    * Returns a list of all loaded protocols.
    *
    - * Returns: A list of all loaded protocols. The list is owned by the caller, and
    - * must be g_list_free()d to avoid leaking the nodes.
    + * Returns: (element-type PurpleProtocol) (transfer container): A list of all
    + * loaded protocols.
    */
    GList *purple_protocols_get_all(void);
    --- a/libpurple/protocols/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,5 +0,0 @@
    -EXTRA_DIST = Makefile.mingw
    -
    -DIST_SUBDIRS = bonjour facebook gg irc jabber novell null oscar sametime silc simple zephyr
    -
    -SUBDIRS = $(DYNAMIC_PRPLS) $(STATIC_PRPLS)
    --- a/libpurple/protocols/Makefile.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,29 +0,0 @@
    -# Makefile.mingw
    -#
    -# Author: hermanator12002@yahoo.com
    -# Date 9/11/02
    -# Description: Protocols Makefile for win32 (mingw) port of libpurple
    -#
    -
    -PIDGIN_TREE_TOP := ../..
    -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
    -
    -SUBDIRS = gg irc jabber novell null oscar sametime silc simple bonjour
    -
    -.PHONY: all install clean
    -
    -all:
    - $(MAKE_at) for subdir in $(SUBDIRS); do \
    - $(MAKE) -C $$subdir -f $(MINGW_MAKEFILE) || exit 1; \
    - done;
    -
    -install: all
    - $(MAKE_at) for subdir in $(SUBDIRS); do \
    - $(MAKE) -C $$subdir -f $(MINGW_MAKEFILE) install || exit 1; \
    - done;
    -
    -clean:
    - $(MAKE_at) for subdir in $(SUBDIRS); do \
    - $(MAKE) -C $$subdir -f $(MINGW_MAKEFILE) clean || exit 1; \
    - done;
    -
    --- a/libpurple/protocols/bonjour/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,64 +0,0 @@
    -EXTRA_DIST = \
    - mdns_avahi.c \
    - mdns_dns_sd.c \
    - dns_sd_proxy.c \
    - dns_sd_proxy.h \
    - Makefile.mingw
    -
    -pkgdir = @PURPLE_PLUGINDIR@
    -
    -BONJOURSOURCES = \
    - bonjour.c \
    - bonjour.h \
    - buddy.c \
    - buddy.h \
    - jabber.c \
    - jabber.h \
    - mdns_common.c \
    - mdns_common.h \
    - mdns_interface.h \
    - mdns_types.h \
    - parser.c \
    - parser.h \
    - bonjour_ft.c \
    - bonjour_ft.h
    -
    -if IS_WIN32
    -BONJOURSOURCES += dns_sd_proxy.c mdns_dns_sd.c
    -else
    -BONJOURSOURCES += mdns_avahi.c
    -endif
    -
    -AM_CFLAGS = $(st)
    -
    -libbonjour_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -
    -if STATIC_BONJOUR
    -
    -st = -DPURPLE_STATIC_PRPL
    -noinst_LTLIBRARIES = libbonjour.la
    -libbonjour_la_SOURCES = $(BONJOURSOURCES)
    -libbonjour_la_CFLAGS = $(AM_CFLAGS)
    -
    -else
    -
    -st =
    -pkg_LTLIBRARIES = libbonjour.la
    -libbonjour_la_SOURCES = $(BONJOURSOURCES)
    -
    -endif
    -
    -libbonjour_la_LIBADD = @PURPLE_LIBS@ $(LIBXML_LIBS) $(AVAHI_LIBS)
    -
    -if IS_WIN32
    -libbonjour_la_LIBADD += -lnetapi32
    -endif
    -
    -AM_CPPFLAGS = \
    - -I$(top_srcdir)/libpurple \
    - -I$(top_builddir)/libpurple \
    - $(GLIB_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(DEBUG_CFLAGS) \
    - $(LIBXML_CFLAGS) \
    - $(AVAHI_CFLAGS)
    --- a/libpurple/protocols/bonjour/Makefile.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,92 +0,0 @@
    -#
    -# Makefile.mingw
    -#
    -# Description: Makefile for win32 (mingw) version of libbonjour
    -#
    -
    -PIDGIN_TREE_TOP := ../../..
    -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
    -
    -TARGET = libbonjour
    -TYPE = PLUGIN
    -
    -# Static or Plugin...
    -ifeq ($(TYPE),STATIC)
    - DEFINES += -DSTATIC
    - DLL_INSTALL_DIR = $(PURPLE_INSTALL_DIR)
    -else
    -ifeq ($(TYPE),PLUGIN)
    - DLL_INSTALL_DIR = $(PURPLE_INSTALL_PLUGINS_DIR)
    -endif
    -endif
    -
    -CFLAGS += -DUSE_BONJOUR_APPLE
    -
    -##
    -## INCLUDE PATHS
    -##
    -INCLUDE_PATHS += -I. \
    - -I$(GTK_TOP)/include \
    - -I$(GTK_TOP)/include/glib-2.0 \
    - -I$(GTK_TOP)/lib/glib-2.0/include \
    - -I$(LIBXML2_TOP)/include/libxml2 \
    - -I$(PURPLE_TOP) \
    - -I$(PURPLE_TOP)/win32 \
    - -I$(PIDGIN_TREE_TOP)
    -
    -LIB_PATHS += -L$(GTK_TOP)/lib \
    - -L$(LIBXML2_TOP)/lib \
    - -L$(PURPLE_TOP)
    -
    -##
    -## SOURCES, OBJECTS
    -##
    -C_SRC = bonjour.c \
    - bonjour_ft.c \
    - buddy.c \
    - dns_sd_proxy.c \
    - jabber.c \
    - mdns_common.c \
    - mdns_dns_sd.c \
    - parser.c
    -
    -OBJECTS = $(C_SRC:%.c=%.o)
    -
    -##
    -## LIBRARIES
    -##
    -LIBS = \
    - -lglib-2.0 \
    - -lgobject-2.0 \
    - -lws2_32 \
    - -lintl \
    - -lnetapi32 \
    - -lxml2 \
    - -lpurple
    -
    -include $(PIDGIN_COMMON_RULES)
    -
    -##
    -## TARGET DEFINITIONS
    -##
    -.PHONY: all install clean
    -
    -all: $(TARGET).dll
    -
    -install: all $(DLL_INSTALL_DIR)
    - cp $(TARGET).dll $(DLL_INSTALL_DIR)
    -
    -$(OBJECTS): $(PURPLE_CONFIG_H)
    -
    -$(TARGET).dll: $(PURPLE_DLL).a $(OBJECTS)
    - $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll
    -
    -##
    -## CLEAN RULES
    -##
    -
    -clean:
    - rm -f $(OBJECTS)
    - rm -f $(TARGET).dll
    -
    -include $(PIDGIN_COMMON_TARGETS)
    --- a/libpurple/protocols/facebook/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,52 +0,0 @@
    -EXTRA_DIST = \
    - Makefile.mingw
    -
    -pkgdir = @PURPLE_PLUGINDIR@
    -
    -FACEBOOKSOURCES = \
    - api.c \
    - api.h \
    - data.c \
    - data.h \
    - facebook.h \
    - facebook.c \
    - http.c \
    - http.h \
    - id.h \
    - json.c \
    - json.h \
    - mqtt.c \
    - mqtt.h \
    - thrift.c \
    - thrift.h \
    - util.c \
    - util.h
    -
    -AM_CFLAGS = $(st)
    -
    -libfacebook_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -
    -if STATIC_FACEBOOK
    -
    -st = -DPURPLE_STATIC_PRPL
    -noinst_LTLIBRARIES = libfacebook.la
    -libfacebook_la_SOURCES = $(FACEBOOKSOURCES)
    -libfacebook_la_CFLAGS = $(AM_CFLAGS)
    -
    -else
    -
    -st =
    -pkg_LTLIBRARIES = libfacebook.la
    -libfacebook_la_SOURCES = $(FACEBOOKSOURCES)
    -libfacebook_la_LIBADD = @PURPLE_LIBS@ $(JSON_LIBS)
    -
    -endif
    -
    -AM_CPPFLAGS = \
    - -I$(top_srcdir)/libpurple \
    - -I$(top_builddir)/libpurple \
    - -I$(top_srcdir) \
    - $(GLIB_CFLAGS) \
    - $(JSON_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(DEBUG_CFLAGS)
    --- a/libpurple/protocols/facebook/Makefile.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,94 +0,0 @@
    -#
    -# Makefile.mingw
    -#
    -# Description: Makefile for win32 (mingw) version of libfacebook
    -#
    -
    -PIDGIN_TREE_TOP := ../../..
    -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
    -
    -TARGET = libfacebook
    -TYPE = PLUGIN
    -
    -# Static or Plugin...
    -ifeq ($(TYPE),STATIC)
    - DEFINES += -DSTATIC
    - DLL_INSTALL_DIR = $(PURPLE_INSTALL_DIR)
    -else
    -ifeq ($(TYPE),PLUGIN)
    - DLL_INSTALL_DIR = $(PURPLE_INSTALL_PLUGINS_DIR)
    -endif
    -endif
    -
    -##
    -## INCLUDE PATHS
    -##
    -INCLUDE_PATHS += -I. \
    - -I$(GTK_TOP)/include \
    - -I$(GTK_TOP)/include/glib-2.0 \
    - -I$(GTK_TOP)/lib/glib-2.0/include \
    - -I$(JSON_GLIB_TOP)/include/json-glib-1.0 \
    - -I$(PURPLE_TOP) \
    - -I$(PURPLE_TOP)/win32 \
    - -I$(GPLUGIN_TOP) \
    - -I$(PIDGIN_TREE_TOP)
    -
    -LIB_PATHS += -L$(GTK_TOP)/lib \
    - -L$(JSON_GLIB_TOP)/lib \
    - -L$(GPLUGIN_TOP) \
    - -L$(PURPLE_TOP)
    -
    -##
    -## SOURCES, OBJECTS
    -##
    -C_SRC = \
    - api.c \
    - data.c \
    - facebook.c \
    - http.c \
    - json.c \
    - mqtt.c \
    - thrift.c \
    - util.c
    -
    -OBJECTS = $(C_SRC:%.c=%.o)
    -
    -##
    -## LIBRARIES
    -##
    -LIBS = \
    - -lglib-2.0 \
    - -lgio-2.0 \
    - -lgobject-2.0 \
    - -lws2_32 \
    - -lintl \
    - -lgplugin \
    - -ljson-glib-1.0 \
    - -lz \
    - -lpurple
    -
    -include $(PIDGIN_COMMON_RULES)
    -
    -##
    -## TARGET DEFINITIONS
    -##
    -.PHONY: all install clean
    -
    -all: $(TARGET).dll
    -
    -install: all $(DLL_INSTALL_DIR)
    - cp $(TARGET).dll $(DLL_INSTALL_DIR)
    -
    -$(OBJECTS): $(PURPLE_CONFIG_H)
    -
    -$(TARGET).dll: $(PURPLE_DLL).a $(OBJECTS)
    - $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll
    -
    -##
    -## CLEAN RULES
    -##
    -clean:
    - rm -f $(OBJECTS)
    - rm -f $(TARGET).dll
    -
    -include $(PIDGIN_COMMON_TARGETS)
    --- a/libpurple/protocols/gg/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,88 +0,0 @@
    -pkgdir = @PURPLE_PLUGINDIR@
    -
    -EXTRA_DIST = \
    - account.c \
    - account.h \
    - Makefile.mingw
    -
    -GGSOURCES = \
    - avatar.c \
    - avatar.h \
    - blist.c \
    - blist.h \
    - chat.c \
    - chat.h \
    - edisc.c \
    - edisc.h \
    - gg.c \
    - gg.h \
    - html.c \
    - html.h \
    - image-prpl.c \
    - image-prpl.h \
    - keymapper.c \
    - keymapper.h \
    - libgadu-events.c \
    - libgadu-events.h \
    - libgaduw.c \
    - libgaduw.h \
    - message-prpl.c \
    - message-prpl.h \
    - multilogon.c \
    - multilogon.h \
    - pubdir-prpl.c \
    - pubdir-prpl.h \
    - purplew.c \
    - purplew.h \
    - resolver-purple.c \
    - resolver-purple.h \
    - roster.c \
    - roster.h \
    - servconn.c \
    - servconn.h \
    - status.c \
    - status.h \
    - tcpsocket.c \
    - tcpsocket.h \
    - utils.c \
    - utils.h \
    - validator.c \
    - validator.h \
    - xml.c \
    - xml.h \
    - oauth/oauth.c \
    - oauth/oauth.h \
    - oauth/oauth-parameter.c \
    - oauth/oauth-parameter.h \
    - oauth/oauth-purple.c \
    - oauth/oauth-purple.h
    -
    -AM_CFLAGS = $(st)
    -
    -libgg_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -
    -if STATIC_GG
    -
    -st = -DPURPLE_STATIC_PRPL
    -noinst_LTLIBRARIES = libgg.la
    -libgg_la_SOURCES = $(GGSOURCES)
    -libgg_la_CFLAGS = $(AM_CFLAGS)
    -
    -else
    -
    -st =
    -pkg_LTLIBRARIES = libgg.la
    -libgg_la_SOURCES = $(GGSOURCES)
    -
    -endif
    -
    -libgg_la_LIBADD = @PURPLE_LIBS@ $(LIBGADU_LIBS) $(JSON_LIBS)
    -
    -AM_CPPFLAGS = \
    - -I$(top_srcdir)/libpurple \
    - -I$(top_builddir)/libpurple \
    - $(LIBGADU_CFLAGS) \
    - $(GLIB_CFLAGS) \
    - $(JSON_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(DEBUG_CFLAGS)
    --- a/libpurple/protocols/gg/Makefile.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,115 +0,0 @@
    -#
    -# Makefile.mingw
    -#
    -# Description: Makefile for win32 (mingw) version of libgg
    -#
    -
    -PIDGIN_TREE_TOP := ../../..
    -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
    -
    -TARGET = libgg
    -CFLAGS += -DGG_IGNORE_DEPRECATED
    -TYPE = PLUGIN
    -
    -# Static or Plugin...
    -ifeq ($(TYPE),STATIC)
    - DEFINES += -DSTATIC
    - DLL_INSTALL_DIR = $(PURPLE_INSTALL_DIR)
    -else
    -ifeq ($(TYPE),PLUGIN)
    - DLL_INSTALL_DIR = $(PURPLE_INSTALL_PLUGINS_DIR)
    -endif
    -endif
    -
    -##
    -## INCLUDE PATHS
    -##
    -INCLUDE_PATHS +=\
    - -I$(PIDGIN_TREE_TOP) \
    - -I$(PURPLE_TOP) \
    - -I$(PURPLE_TOP)/win32 \
    - -I$(GTK_TOP)/include \
    - -I$(GTK_TOP)/include/glib-2.0 \
    - -I$(GTK_TOP)/lib/glib-2.0/include \
    - -I$(GNUTLS_TOP)/include \
    - -I$(JSON_GLIB_TOP)/include/json-glib-1.0 \
    - -I$(LIBGADU_TOP)/include
    -
    -LIB_PATHS += \
    - -L$(GTK_TOP)/lib \
    - -L$(GNUTLS_TOP)/lib \
    - -L$(LIBGADU_TOP)/lib \
    - -L$(JSON_GLIB_TOP)/lib \
    - -L$(PURPLE_TOP)
    -
    -##
    -## SOURCES, OBJECTS
    -##
    -C_SRC = \
    - avatar.c \
    - blist.c \
    - chat.c \
    - edisc.c \
    - gg.c \
    - html.c \
    - image-prpl.c \
    - keymapper.c \
    - libgadu-events.c \
    - libgaduw.c \
    - message-prpl.c \
    - multilogon.c \
    - oauth/oauth.c \
    - oauth/oauth-parameter.c \
    - oauth/oauth-purple.c \
    - pubdir-prpl.c \
    - purplew.c \
    - resolver-purple.c \
    - roster.c \
    - servconn.c \
    - status.c \
    - tcpsocket.c \
    - utils.c \
    - validator.c \
    - xml.c
    -
    -OBJECTS = $(C_SRC:%.c=%.o)
    -
    -##
    -## LIBRARIES
    -##
    -LIBS = \
    - -lgadu \
    - -lglib-2.0 \
    - -lgobject-2.0 \
    - -lgnutls \
    - -lintl \
    - -ljson-glib-1.0 \
    - -lpurple \
    - -lws2_32 \
    - -lz
    -
    -include $(PIDGIN_COMMON_RULES)
    -
    -##
    -## TARGET DEFINITIONS
    -##
    -.PHONY: all install clean
    -
    -all: $(TARGET).dll
    -
    -install: all $(DLL_INSTALL_DIR)
    - cp $(TARGET).dll $(DLL_INSTALL_DIR)
    -
    -$(OBJECTS): $(PURPLE_CONFIG_H)
    -
    -$(TARGET).dll: $(PURPLE_DLL).a $(OBJECTS)
    - $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll
    -
    -##
    -## CLEAN RULES
    -##
    -clean:
    - rm -f $(OBJECTS)
    - rm -f $(TARGET).dll
    -
    -include $(PIDGIN_COMMON_TARGETS)
    --- a/libpurple/protocols/gg/blist.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/protocols/gg/blist.c Thu Nov 23 22:30:26 2017 -0600
    @@ -125,7 +125,7 @@
    g = g_strdup("Gadu-Gadu");
    - if ('\0' != data_tbl[F_GROUP]) {
    + if ('\0' != *(data_tbl[F_GROUP])) {
    /* XXX: Probably buddy should be added to all the groups. */
    /* Hard limit to at most 50 groups */
    gchar **group_tbl = g_strsplit(data_tbl[F_GROUP], ",", 50);
    --- a/libpurple/protocols/irc/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,39 +0,0 @@
    -EXTRA_DIST = \
    - Makefile.mingw
    -
    -pkgdir = @PURPLE_PLUGINDIR@
    -
    -IRCSOURCES = \
    - cmds.c \
    - dcc_send.c \
    - irc.c \
    - irc.h \
    - msgs.c \
    - parse.c
    -
    -AM_CFLAGS = $(st)
    -
    -libirc_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -
    -if STATIC_IRC
    -
    -st = -DPURPLE_STATIC_PRPL
    -noinst_LTLIBRARIES = libirc.la
    -libirc_la_SOURCES = $(IRCSOURCES)
    -libirc_la_CFLAGS = $(AM_CFLAGS)
    -
    -else
    -
    -st =
    -pkg_LTLIBRARIES = libirc.la
    -libirc_la_SOURCES = $(IRCSOURCES)
    -libirc_la_LIBADD = @PURPLE_LIBS@ $(SASL_LIBS)
    -
    -endif
    -
    -AM_CPPFLAGS = \
    - -I$(top_srcdir)/libpurple \
    - -I$(top_builddir)/libpurple \
    - $(GLIB_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(DEBUG_CFLAGS)
    --- a/libpurple/protocols/irc/Makefile.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,93 +0,0 @@
    -#
    -# Makefile.mingw
    -#
    -# Description: Makefile for win32 (mingw) version of libirc
    -#
    -
    -PIDGIN_TREE_TOP := ../../..
    -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
    -
    -TARGET = libirc
    -TYPE = PLUGIN
    -
    -# Static or Plugin...
    -ifeq ($(TYPE),STATIC)
    - DEFINES += -DSTATIC
    - DLL_INSTALL_DIR = $(PURPLE_INSTALL_DIR)
    -else
    -ifeq ($(TYPE),PLUGIN)
    - DLL_INSTALL_DIR = $(PURPLE_INSTALL_PLUGINS_DIR)
    -endif
    -endif
    -
    -##
    -## INCLUDE PATHS
    -##
    -INCLUDE_PATHS += -I. \
    - -I$(GTK_TOP)/include \
    - -I$(GTK_TOP)/include/glib-2.0 \
    - -I$(GTK_TOP)/lib/glib-2.0/include \
    - -I$(PURPLE_TOP) \
    - -I$(PURPLE_TOP)/win32 \
    - -I$(PIDGIN_TREE_TOP)
    -
    -LIB_PATHS += -L$(GTK_TOP)/lib \
    - -L$(PURPLE_TOP)
    -
    -##
    -## SOURCES, OBJECTS
    -##
    -C_SRC = cmds.c \
    - dcc_send.c \
    - irc.c \
    - msgs.c \
    - parse.c
    -
    -OBJECTS = $(C_SRC:%.c=%.o)
    -
    -##
    -## LIBRARIES
    -##
    -LIBS = \
    - -lglib-2.0 \
    - -lgobject-2.0 \
    - -lws2_32 \
    - -lintl \
    - -lpurple
    -
    -
    -ifeq ($(CYRUS_SASL), 1)
    -INCLUDE_PATHS += -I$(CYRUS_SASL_TOP)/include
    -LIB_PATHS += -L$(CYRUS_SASL_TOP)/lib
    -LIBS += -llibsasl2
    -endif
    -
    -include $(PIDGIN_COMMON_RULES)
    -
    -##
    -## TARGET DEFINITIONS
    -##
    -.PHONY: all install clean
    -
    -all: $(TARGET).dll
    -
    -install: all $(DLL_INSTALL_DIR)
    - cp $(TARGET).dll $(DLL_INSTALL_DIR)
    -
    -$(OBJECTS): $(PURPLE_CONFIG_H)
    -
    -##
    -## BUILD DLL
    -##
    -$(TARGET).dll: $(PURPLE_DLL).a $(OBJECTS)
    - $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll
    -
    -##
    -## CLEAN RULES
    -##
    -
    -clean:
    - rm -f $(OBJECTS)
    - rm -f $(TARGET).dll
    -
    -include $(PIDGIN_COMMON_TARGETS)
    --- a/libpurple/protocols/jabber/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,135 +0,0 @@
    -EXTRA_DIST = \
    - Makefile.mingw
    -
    -pkgdir = @PURPLE_PLUGINDIR@
    -
    -JABBERSOURCES = \
    - adhoccommands.c \
    - adhoccommands.h \
    - auth.c \
    - auth.h \
    - auth_digest_md5.c \
    - auth_digest_md5.h \
    - auth_plain.c \
    - auth_scram.c \
    - auth_scram.h \
    - buddy.c \
    - buddy.h \
    - bosh.c \
    - bosh.h \
    - caps.c \
    - caps.h \
    - chat.c \
    - chat.h \
    - data.c \
    - data.h \
    - disco.c \
    - disco.h \
    - google/gmail.c \
    - google/gmail.h \
    - google/google.c \
    - google/google.h \
    - google/google_p2p.c \
    - google/google_p2p.h \
    - google/google_presence.c \
    - google/google_presence.h \
    - google/google_roster.c \
    - google/google_roster.h \
    - google/google_session.c \
    - google/google_session.h \
    - google/jingleinfo.c \
    - google/jingleinfo.h \
    - google/relay.c \
    - google/relay.h \
    - gtalk.c \
    - gtalk.h \
    - ibb.c \
    - ibb.h \
    - iq.c \
    - iq.h \
    - jabber.c \
    - jabber.h \
    - jingle/jingle.c \
    - jingle/jingle.h \
    - jingle/content.c \
    - jingle/content.h \
    - jingle/iceudp.c \
    - jingle/iceudp.h \
    - jingle/rawudp.c \
    - jingle/rawudp.h \
    - jingle/rtp.c \
    - jingle/rtp.h \
    - jingle/session.c \
    - jingle/session.h \
    - jingle/transport.c \
    - jingle/transport.h \
    - jutil.c \
    - jutil.h \
    - message.c \
    - message.h \
    - namespaces.h \
    - oob.c \
    - oob.h \
    - parser.c \
    - parser.h \
    - pep.c \
    - pep.h \
    - ping.c \
    - ping.h \
    - presence.c \
    - presence.h \
    - roster.c \
    - roster.h \
    - si.c \
    - si.h \
    - useravatar.c \
    - useravatar.h \
    - usermood.c \
    - usermood.h \
    - usernick.c \
    - usernick.h \
    - usertune.c \
    - usertune.h \
    - xdata.c \
    - xdata.h \
    - xmpp.c \
    - xmpp.h
    -
    -AM_CFLAGS = $(st)
    -
    -libjabber_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -
    -if USE_CYRUS_SASL
    -JABBERSOURCES += auth_cyrus.c
    -endif
    -
    -if STATIC_JABBER
    -
    -st = -DPURPLE_STATIC_PRPL
    -noinst_LTLIBRARIES = libjabber.la
    -libjabber_la_SOURCES = $(JABBERSOURCES)
    -libjabber_la_CFLAGS = $(AM_CFLAGS)
    -
    -else
    -
    -st =
    -pkg_LTLIBRARIES = libjabber.la
    -libjabber_la_SOURCES = $(JABBERSOURCES)
    -libjabber_la_LIBADD = @PURPLE_LIBS@ $(SASL_LIBS) $(LIBXML_LIBS) $(IDN_LIBS)\
    - $(FARSTREAM_LIBS) \
    - $(GSTREAMER_LIBS)
    -
    -endif
    -
    -AM_CPPFLAGS = \
    - -I$(top_srcdir)/libpurple \
    - -I$(top_builddir)/libpurple \
    - $(DEBUG_CFLAGS) \
    - $(GLIB_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(IDN_CFLAGS) \
    - $(LIBXML_CFLAGS) \
    - $(FARSTREAM_CFLAGS) \
    - $(GSTREAMER_CFLAGS)
    -
    -SUBDIRS = tests
    --- a/libpurple/protocols/jabber/Makefile.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,142 +0,0 @@
    -#
    -# Makefile.mingw
    -#
    -# Description: Makefile for win32 (mingw) version of libjabber
    -#
    -
    -PIDGIN_TREE_TOP := ../../..
    -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
    -
    -TARGET = libjabber
    -TYPE = PLUGIN
    -
    -# Static or Plugin...
    -ifeq ($(TYPE),STATIC)
    - DEFINES += -DSTATIC
    - DLL_INSTALL_DIR = $(PURPLE_INSTALL_DIR)
    -else
    -ifeq ($(TYPE),PLUGIN)
    - DLL_INSTALL_DIR = $(PURPLE_INSTALL_PLUGINS_DIR)
    -endif
    -endif
    -
    -##
    -## INCLUDE PATHS
    -##
    -INCLUDE_PATHS += -I. \
    - -I$(GTK_TOP)/include \
    - -I$(GTK_TOP)/include/glib-2.0 \
    - -I$(GTK_TOP)/lib/glib-2.0/include \
    - -I$(LIBXML2_TOP)/include/libxml2 \
    - -I$(PURPLE_TOP) \
    - -I$(PURPLE_TOP)/win32 \
    - -I$(PIDGIN_TREE_TOP) \
    - $(VV_INCLUDE_PATHS)
    -
    -LIB_PATHS += -L$(GTK_TOP)/lib \
    - -L$(LIBXML2_TOP)/lib \
    - -L$(PURPLE_TOP) \
    - -L. \
    - $(VV_LIB_PATHS)
    -
    -##
    -## SOURCES, OBJECTS
    -##
    -ifeq "$(USE_VV)" "1"
    -VV_SRC = google/google_p2p.c
    -else
    -VV_SRC =
    -endif
    -
    -C_SRC = \
    - adhoccommands.c \
    - auth.c \
    - auth_cyrus.c \
    - auth_digest_md5.c \
    - auth_plain.c \
    - auth_scram.c \
    - buddy.c \
    - bosh.c \
    - caps.c \
    - chat.c \
    - data.c \
    - disco.c \
    - google/gmail.c \
    - google/google.c \
    - google/google_presence.c \
    - google/google_roster.c \
    - google/google_session.c \
    - google/jingleinfo.c \
    - google/relay.c \
    - gtalk.c \
    - ibb.c \
    - iq.c \
    - jabber.c \
    - jingle/jingle.c \
    - jingle/content.c \
    - jingle/iceudp.c \
    - jingle/rawudp.c \
    - jingle/rtp.c \
    - jingle/session.c \
    - jingle/transport.c \
    - jutil.c \
    - message.c \
    - oob.c \
    - parser.c \
    - pep.c \
    - ping.c \
    - presence.c \
    - roster.c \
    - si.c \
    - useravatar.c \
    - usermood.c \
    - usernick.c \
    - usertune.c \
    - xdata.c \
    - xmpp.c \
    - $(VV_SRC)
    -
    -OBJECTS = $(C_SRC:%.c=%.o)
    -
    -##
    -## LIBRARIES
    -##
    -LIBS = \
    - -lglib-2.0 \
    - -lgobject-2.0 \
    - $(VV_LIBS) \
    - -lxml2 \
    - -lws2_32 \
    - -lintl \
    - -lpurple
    -
    -ifeq ($(CYRUS_SASL), 1)
    -INCLUDE_PATHS += -I$(CYRUS_SASL_TOP)/include
    -LIB_PATHS += -L$(CYRUS_SASL_TOP)/lib
    -LIBS += -llibsasl2
    -endif
    -
    -include $(PIDGIN_COMMON_RULES)
    -
    -##
    -## TARGET DEFINITIONS
    -##
    -.PHONY: all install clean
    -
    -all: $(TARGET).dll
    -
    -install: all $(DLL_INSTALL_DIR)
    - cp $(TARGET).dll $(DLL_INSTALL_DIR)
    -
    -$(OBJECTS): $(PURPLE_CONFIG_H)
    -
    -$(TARGET).dll: $(PURPLE_DLL).a $(OBJECTS)
    - $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll
    -
    -##
    -## CLEAN RULES
    -##
    -clean:
    - rm -f $(OBJECTS) $(TARGET).dll
    -
    -include $(PIDGIN_COMMON_TARGETS)
    --- a/libpurple/protocols/jabber/jingle/rtp.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/protocols/jabber/jingle/rtp.c Thu Nov 23 22:30:26 2017 -0600
    @@ -819,6 +819,7 @@
    JingleTransport *transport;
    JabberBuddy *jb;
    JabberBuddyResource *jbr;
    + gboolean ret = FALSE;
    const gchar *transport_type;
    gchar *resource = NULL, *me = NULL, *sid = NULL;
    @@ -827,16 +828,15 @@
    jb = jabber_buddy_find(js, who, FALSE);
    if (!jb) {
    purple_debug_error("jingle-rtp", "Could not find Jabber buddy\n");
    - return FALSE;
    + goto out;
    }
    resource = jabber_get_resource(who);
    jbr = jabber_buddy_find_resource(jb, resource);
    - g_free(resource);
    if (!jbr) {
    purple_debug_error("jingle-rtp", "Could not find buddy's resource - %s\n", resource);
    - return FALSE;
    + goto out;
    }
    if (jabber_resource_has_capability(jbr, JINGLE_TRANSPORT_ICEUDP)) {
    @@ -848,7 +848,7 @@
    } else {
    purple_debug_error("jingle-rtp", "Resource doesn't support "
    "the same transport types\n");
    - return FALSE;
    + goto out;
    }
    /* set ourselves as initiator */
    @@ -856,7 +856,6 @@
    sid = jabber_get_next_id(js);
    session = jingle_session_create(js, sid, me, who, TRUE);
    - g_free(sid);
    if (type & PURPLE_MEDIA_AUDIO) {
    @@ -878,13 +877,17 @@
    g_object_notify_by_pspec(G_OBJECT(content), properties[PROP_MEDIA_TYPE]);
    }
    - g_free(me);
    -
    if (jingle_rtp_get_media(session) == NULL) {
    - return FALSE;
    + goto out;
    }
    - return TRUE;
    + ret = TRUE;
    +
    +out:
    + g_free(me);
    + g_free(resource);
    + g_free(sid);
    + return ret;
    }
    void
    --- a/libpurple/protocols/jabber/tests/.hgignore Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,10 +0,0 @@
    -syntax: regexp
    -^test_jabber_caps$
    -^test_jabber_digest_md5$
    -^test_jabber_jutil$
    -^test_jabber_scram$
    -
    -syntax: glob
    -*.log
    -*.trs
    -
    --- a/libpurple/protocols/jabber/tests/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,36 +0,0 @@
    -include $(top_srcdir)/glib-tap.mk
    -
    -COMMON_LIBS=\
    - $(top_builddir)/libpurple/libpurple.la \
    - $(top_builddir)/libpurple/protocols/jabber/libjabber.la \
    - $(GLIB_LIBS) \
    - $(GPLUGIN_LIBS) \
    - $(LIBXML_LIBS)
    -
    -test_programs=\
    - test_jabber_caps \
    - test_jabber_digest_md5 \
    - test_jabber_jutil \
    - test_jabber_scram
    -
    -test_jabber_caps_SOURCES=test_jabber_caps.c
    -test_jabber_caps_LDADD=$(COMMON_LIBS)
    -
    -test_jabber_digest_md5_SOURCES=test_jabber_digest_md5.c
    -test_jabber_digest_md5_LDADD=$(COMMON_LIBS)
    -
    -test_jabber_jutil_SOURCES=test_jabber_jutil.c
    -test_jabber_jutil_LDADD=$(COMMON_LIBS)
    -
    -test_jabber_scram_SOURCES=test_jabber_scram.c
    -test_jabber_scram_LDADD=$(COMMON_LIBS)
    -
    -AM_CPPFLAGS = \
    - -I$(top_srcdir)/libpurple \
    - -I$(top_builddir)/libpurple \
    - $(DEBUG_CFLAGS) \
    - $(GLIB_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(PLUGIN_CFLAGS) \
    - $(DBUS_CFLAGS) \
    - $(LIBXML_CFLAGS)
    --- a/libpurple/protocols/novell/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,55 +0,0 @@
    -EXTRA_DIST = \
    - Makefile.mingw
    -
    -pkgdir = @PURPLE_PLUGINDIR@
    -
    -NOVELLSOURCES = \
    - nmfield.h \
    - nmfield.c \
    - nmconn.h \
    - nmconn.c \
    - nmconference.h \
    - nmconference.c \
    - nmcontact.h \
    - nmcontact.c \
    - nmevent.h \
    - nmevent.c \
    - nmmessage.h \
    - nmmessage.c \
    - nmrequest.h \
    - nmrequest.c \
    - nmrtf.h \
    - nmrtf.c \
    - nmuser.h \
    - nmuser.c \
    - nmuserrecord.h \
    - nmuserrecord.c \
    - novell.h \
    - novell.c
    -
    -AM_CFLAGS = $(st)
    -
    -libnovell_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -
    -if STATIC_NOVELL
    -
    -st = -DPURPLE_STATIC_PRPL
    -noinst_LTLIBRARIES = libnovell.la
    -libnovell_la_SOURCES = $(NOVELLSOURCES)
    -libnovell_la_CFLAGS = $(AM_CFLAGS)
    -
    -else
    -
    -st =
    -pkg_LTLIBRARIES = libnovell.la
    -libnovell_la_SOURCES = $(NOVELLSOURCES)
    -libnovell_la_LIBADD = @PURPLE_LIBS@
    -
    -endif
    -
    -AM_CPPFLAGS = \
    - -I$(top_srcdir)/libpurple \
    - -I$(top_builddir)/libpurple \
    - $(DEBUG_CFLAGS) \
    - $(GLIB_CFLAGS) \
    - $(GPLUGIN_CFLAGS)
    --- a/libpurple/protocols/novell/Makefile.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,89 +0,0 @@
    -#
    -# Makefile.mingw
    -#
    -# Description: Makefile for win32 (mingw) version of libnovell
    -#
    -
    -PIDGIN_TREE_TOP := ../../..
    -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
    -
    -TARGET = libnovell
    -TYPE = PLUGIN
    -
    -# Static or Plugin...
    -ifeq ($(TYPE),STATIC)
    - DEFINES += -DSTATIC
    - DLL_INSTALL_DIR = $(PURPLE_INSTALL_DIR)
    -else
    -ifeq ($(TYPE),PLUGIN)
    - DLL_INSTALL_DIR = $(PURPLE_INSTALL_PLUGINS_DIR)
    -endif
    -endif
    -
    -##
    -## INCLUDE PATHS
    -##
    -INCLUDE_PATHS += -I. \
    - -I$(GTK_TOP)/include \
    - -I$(GTK_TOP)/include/glib-2.0 \
    - -I$(GTK_TOP)/lib/glib-2.0/include \
    - -I$(PURPLE_TOP) \
    - -I$(PURPLE_TOP)/win32 \
    - -I$(PIDGIN_TREE_TOP)
    -
    -LIB_PATHS += -L$(GTK_TOP)/lib \
    - -L$(PURPLE_TOP)
    -
    -##
    -## SOURCES, OBJECTS
    -##
    -C_SRC = \
    - nmfield.c \
    - nmconn.c \
    - nmconference.c \
    - nmcontact.c \
    - nmevent.c \
    - nmmessage.c \
    - nmrequest.c \
    - nmrtf.c \
    - nmuser.c \
    - nmuserrecord.c \
    - novell.c
    -
    -OBJECTS = $(C_SRC:%.c=%.o)
    -
    -##
    -## LIBRARIES
    -##
    -LIBS = \
    - -lglib-2.0 \
    - -lgobject-2.0 \
    - -lws2_32 \
    - -lintl \
    - -lpurple
    -
    -include $(PIDGIN_COMMON_RULES)
    -
    -##
    -## TARGET DEFINITIONS
    -##
    -.PHONY: all install clean
    -
    -all: $(TARGET).dll
    -
    -install: all $(DLL_INSTALL_DIR)
    - cp $(TARGET).dll $(DLL_INSTALL_DIR)
    -
    -$(OBJECTS): $(PURPLE_CONFIG_H)
    -
    -$(TARGET).dll: $(PURPLE_DLL).a $(OBJECTS)
    - $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll
    -
    -##
    -## CLEAN RULES
    -##
    -clean:
    - rm -f $(OBJECTS)
    - rm -f $(TARGET).dll
    -
    -include $(PIDGIN_COMMON_TARGETS)
    --- a/libpurple/protocols/null/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,26 +0,0 @@
    -EXTRA_DIST = \
    - Makefile.mingw \
    - README
    -
    -pkgdir = @PURPLE_PLUGINDIR@
    -
    -NULLSOURCES = \
    - nullprpl.h \
    - nullprpl.c
    -
    -AM_CFLAGS = $(st)
    -
    -libnull_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -
    -# nullprpl isn't built by default; when it is built, it's dynamically linked
    -st =
    -pkg_LTLIBRARIES = libnull.la
    -libnull_la_SOURCES = $(NULLSOURCES)
    -libnull_la_LIBADD = @PURPLE_LIBS@
    -
    -AM_CPPFLAGS = \
    - -I$(top_srcdir)/libpurple \
    - -I$(top_builddir)/libpurple \
    - $(GLIB_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(DEBUG_CFLAGS)
    --- a/libpurple/protocols/null/Makefile.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,80 +0,0 @@
    -#
    -# Makefile.mingw
    -#
    -# Description: Makefile for win32 (mingw) version of libnull
    -#
    -
    -PIDGIN_TREE_TOP := ../../..
    -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
    -
    -TARGET = libnull
    -TYPE = PLUGIN
    -
    -# Static or Plugin...
    -ifeq ($(TYPE),STATIC)
    - DEFINES += -DSTATIC
    - DLL_INSTALL_DIR = $(PURPLE_INSTALL_DIR)
    -else
    -ifeq ($(TYPE),PLUGIN)
    - DLL_INSTALL_DIR = $(PURPLE_INSTALL_PLUGINS_DIR)
    -endif
    -endif
    -
    -##
    -## INCLUDE PATHS
    -##
    -INCLUDE_PATHS += -I. \
    - -I$(GTK_TOP)/include \
    - -I$(GTK_TOP)/include/glib-2.0 \
    - -I$(GTK_TOP)/lib/glib-2.0/include \
    - -I$(PURPLE_TOP) \
    - -I$(PURPLE_TOP)/win32 \
    - -I$(PIDGIN_TREE_TOP)
    -
    -LIB_PATHS += -L$(GTK_TOP)/lib \
    - -L$(PURPLE_TOP)
    -
    -##
    -## SOURCES, OBJECTS
    -##
    -C_SRC = nullprpl.c
    -
    -OBJECTS = $(C_SRC:%.c=%.o)
    -
    -##
    -## LIBRARIES
    -##
    -LIBS = \
    - -lglib-2.0 \
    - -lgobject-2.0 \
    - -lintl \
    - -lws2_32 \
    - -lpurple
    -
    -include $(PIDGIN_COMMON_RULES)
    -
    -##
    -## TARGET DEFINITIONS
    -##
    -.PHONY: all install install_real clean
    -
    -all: $(TARGET).dll
    -
    -install_real: all $(DLL_INSTALL_DIR) $(PURPLE_INSTALL_DIR)
    - cp $(TARGET).dll $(DLL_INSTALL_DIR)
    -
    -install: all
    -
    -$(OBJECTS): $(PURPLE_CONFIG_H)
    -
    -$(TARGET).dll: $(PURPLE_DLL).a $(OBJECTS)
    - $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll
    -
    -##
    -## CLEAN RULES
    -##
    -clean:
    - rm -f $(OBJECTS)
    - rm -f $(TARGET).dll
    -
    -include $(PIDGIN_COMMON_TARGETS)
    --- a/libpurple/protocols/oscar/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,83 +0,0 @@
    -EXTRA_DIST = \
    - COPYING \
    - AUTHORS \
    - Makefile.mingw
    -
    -pkgdir = @PURPLE_PLUGINDIR@
    -
    -OSCARSOURCES = \
    - authorization.c \
    - aim.c \
    - aim.h \
    - bstream.c \
    - clientlogin.c \
    - kerberos.c \
    - encoding.c \
    - encoding.h \
    - family_admin.c \
    - family_alert.c \
    - family_auth.c \
    - family_bart.c \
    - family_bos.c \
    - family_buddy.c \
    - family_chat.c \
    - family_chatnav.c \
    - family_icq.c \
    - family_icbm.c \
    - family_locate.c \
    - family_oservice.c \
    - family_popup.c \
    - family_feedbag.c \
    - family_stats.c \
    - family_userlookup.c \
    - flap_connection.c \
    - icq.c \
    - icq.h \
    - misc.c \
    - msgcookie.c \
    - odc.c \
    - oft.c \
    - oscar.c \
    - oscar.h \
    - oscarcommon.h \
    - oscar_data.c \
    - peer.c \
    - peer.h \
    - peer_proxy.c \
    - rxhandlers.c \
    - snac.c \
    - snactypes.h \
    - tlv.c \
    - userinfo.c \
    - util.c \
    - visibility.c \
    - visibility.h
    -
    -AM_CFLAGS = $(st)
    -
    -liboscar_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -
    -if STATIC_OSCAR
    -
    -st = -DPURPLE_STATIC_PRPL
    -noinst_LTLIBRARIES = liboscar.la
    -liboscar_la_SOURCES = $(OSCARSOURCES)
    -liboscar_la_CFLAGS = $(AM_CFLAGS)
    -
    -else
    -
    -st =
    -pkg_LTLIBRARIES = liboscar.la
    -liboscar_la_SOURCES = $(OSCARSOURCES)
    -liboscar_la_LIBADD = @PURPLE_LIBS@
    -
    -endif
    -
    -AM_CPPFLAGS = \
    - -I$(top_srcdir)/libpurple \
    - -I$(top_builddir)/libpurple \
    - $(GLIB_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(DEBUG_CFLAGS)
    -
    -SUBDIRS=tests
    --- a/libpurple/protocols/oscar/Makefile.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,116 +0,0 @@
    -#
    -# Makefile.mingw
    -#
    -# Description: Makefile for win32 (mingw) version of liboscar
    -#
    -
    -PIDGIN_TREE_TOP := ../../..
    -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
    -
    -TARGET = liboscar
    -TYPE = PLUGIN
    -
    -# Static or Plugin...
    -ifeq ($(TYPE),STATIC)
    - DEFINES += -DSTATIC
    - DLL_INSTALL_DIR = $(PURPLE_INSTALL_DIR)
    -else
    - ifeq ($(TYPE),PLUGIN)
    - DLL_INSTALL_DIR = $(PURPLE_INSTALL_PLUGINS_DIR)
    - endif
    -endif
    -
    -##
    -## INCLUDE PATHS
    -##
    -INCLUDE_PATHS += -I. \
    - -I$(GTK_TOP)/include \
    - -I$(GTK_TOP)/include/glib-2.0 \
    - -I$(GTK_TOP)/lib/glib-2.0/include \
    - -I$(PURPLE_TOP) \
    - -I$(PURPLE_TOP)/win32 \
    - -I$(PIDGIN_TREE_TOP)
    -
    -LIB_PATHS += -L$(GTK_TOP)/lib \
    - -L$(PURPLE_TOP) \
    - -L.
    -
    -##
    -## SOURCES, OBJECTS
    -##
    -C_SRC = \
    - aim.c \
    - authorization.c \
    - bstream.c \
    - clientlogin.c \
    - encoding.c \
    - family_admin.c \
    - family_alert.c \
    - family_auth.c \
    - family_bart.c \
    - family_bos.c \
    - family_buddy.c \
    - family_chat.c \
    - family_chatnav.c \
    - family_feedbag.c \
    - family_icbm.c \
    - family_icq.c \
    - family_locate.c \
    - family_oservice.c \
    - family_popup.c \
    - family_stats.c \
    - family_userlookup.c \
    - flap_connection.c \
    - icq.c \
    - kerberos.c \
    - misc.c \
    - msgcookie.c \
    - odc.c \
    - oft.c \
    - oscar.c \
    - oscar_data.c \
    - peer.c \
    - peer_proxy.c \
    - rxhandlers.c \
    - snac.c \
    - tlv.c \
    - userinfo.c \
    - util.c \
    - visibility.c
    -
    -OBJECTS = $(C_SRC:%.c=%.o)
    -
    -##
    -## LIBRARIES
    -##
    -LIBS = \
    - -lglib-2.0 \
    - -lgobject-2.0 \
    - -lintl \
    - -lws2_32 \
    - -lpurple
    -
    -include $(PIDGIN_COMMON_RULES)
    -
    -##
    -## TARGET DEFINITIONS
    -##
    -.PHONY: all install clean
    -
    -all: $(TARGET).dll
    -
    -install: all $(DLL_INSTALL_DIR)
    - cp $(TARGET).dll $(DLL_INSTALL_DIR)
    -
    -$(OBJECTS): $(PURPLE_CONFIG_H)
    -
    -$(TARGET).dll: $(PURPLE_DLL).a $(OBJECTS)
    - $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll
    -
    -##
    -## CLEAN RULES
    -##
    -clean:
    - rm -f $(OBJECTS) $(TARGET).dll
    -
    -include $(PIDGIN_COMMON_TARGETS)
    --- a/libpurple/protocols/oscar/tests/.hgignore Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,7 +0,0 @@
    -syntax: regexp
    -^test_oscar_util$
    -
    -syntax: glob
    -*.log
    -*.trs
    -
    --- a/libpurple/protocols/oscar/tests/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,22 +0,0 @@
    -include $(top_srcdir)/glib-tap.mk
    -
    -COMMON_LIBS=\
    - $(top_builddir)/libpurple/libpurple.la \
    - $(top_builddir)/libpurple/protocols/oscar/liboscar.la \
    - $(GLIB_LIBS) \
    - $(GPLUGIN_LIBS)
    -
    -test_programs=\
    - test_oscar_util
    -
    -test_oscar_util_SOURCES=test_oscar_util.c
    -test_oscar_util_LDADD=$(COMMON_LIBS)
    -
    -AM_CPPFLAGS = \
    - -I$(top_srcdir)/libpurple \
    - -I$(top_builddir)/libpurple \
    - $(DEBUG_CFLAGS) \
    - $(GLIB_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(PLUGIN_CFLAGS) \
    - $(DBUS_CFLAGS)
    --- a/libpurple/protocols/sametime/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,38 +0,0 @@
    -EXTRA_DIST = \
    - Makefile.mingw
    -
    -pkgdir = @PURPLE_PLUGINDIR@
    -
    -noinst_HEADERS = sametime.h
    -
    -SAMETIMESOURCES = sametime.c
    -
    -AM_CFLAGS = \
    - $(st)
    -
    -if STATIC_SAMETIME
    -
    -st = -DPURPLE_STATIC_PRPL
    -noinst_LTLIBRARIES = libsametime.la
    -libsametime_la_CFLAGS = $(AM_CFLAGS)
    -
    -else
    -
    -st =
    -pkg_LTLIBRARIES = libsametime.la
    -
    -endif
    -
    -libsametime_la_SOURCES = $(SAMETIMESOURCES)
    -libsametime_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -libsametime_la_LIBADD = @PURPLE_LIBS@ $(MEANWHILE_LIBS)
    -
    -AM_CPPFLAGS = \
    - -I$(top_srcdir)/libpurple \
    - -I$(top_builddir)/libpurple \
    - $(DEBUG_CFLAGS) \
    - $(GLIB_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(MEANWHILE_CFLAGS) \
    - -DG_LOG_DOMAIN=\"sametime\"
    -
    --- a/libpurple/protocols/sametime/Makefile.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,84 +0,0 @@
    -#
    -# Makefile.mingw
    -#
    -# Description: Makefile for win32 (mingw) version of libsametime
    -#
    -
    -PIDGIN_TREE_TOP := ../../..
    -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
    -
    -TARGET = libsametime
    -TYPE = PLUGIN
    -
    -# Static or Plugin...
    -ifeq ($(TYPE),STATIC)
    - DEFINES += -DSTATIC
    - DLL_INSTALL_DIR = $(PURPLE_INSTALL_DIR)
    -else
    - ifeq ($(TYPE),PLUGIN)
    - DLL_INSTALL_DIR = $(PURPLE_INSTALL_PLUGINS_DIR)
    - endif
    -endif
    -
    -CFLAGS += -DG_LOG_DOMAIN=\"sametime\"
    -
    -##
    -## INCLUDE PATHS
    -##
    -INCLUDE_PATHS += -I. \
    - -I$(MEANWHILE_TOP)/include/meanwhile \
    - -I$(GTK_TOP)/include \
    - -I$(GTK_TOP)/include/glib-2.0 \
    - -I$(GTK_TOP)/lib/glib-2.0/include \
    - -I$(PURPLE_TOP) \
    - -I$(PURPLE_TOP)/win32 \
    - -I$(PIDGIN_TREE_TOP)
    -
    -LIB_PATHS += -L$(GTK_TOP)/lib \
    - -L$(MEANWHILE_TOP)/lib \
    - -L$(PURPLE_TOP)
    -
    -##
    -## SOURCES, OBJECTS
    -##
    -C_SRC = sametime.c
    -
    -OBJECTS = $(C_SRC:%.c=%.o)
    -
    -##
    -## LIBRARIES
    -##
    -LIBS = \
    - -lglib-2.0 \
    - -lgobject-2.0 \
    - -lintl \
    - -lws2_32 \
    - -lmeanwhile \
    - -lpurple
    -
    -include $(PIDGIN_COMMON_RULES)
    -
    -##
    -## TARGET DEFINITIONS
    -##
    -.PHONY: all install clean
    -
    -all: $(TARGET).dll
    -
    -install: all $(DLL_INSTALL_DIR) $(PURPLE_INSTALL_DIR)
    - cp $(TARGET).dll $(DLL_INSTALL_DIR)
    -
    -$(OBJECTS): $(PURPLE_CONFIG_H)
    -
    -$(TARGET).dll: $(PURPLE_DLL).a $(OBJECTS)
    - $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll
    -
    -##
    -## CLEAN RULES
    -##
    -
    -clean:
    - rm -f $(OBJECTS)
    - rm -f $(TARGET).dll
    -
    -include $(PIDGIN_COMMON_TARGETS)
    --- a/libpurple/protocols/silc/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,47 +0,0 @@
    -EXTRA_DIST = \
    - Makefile.mingw \
    - README \
    - TODO
    -
    -pkgdir = @PURPLE_PLUGINDIR@
    -
    -SILCSOURCES = \
    - buddy.c \
    - chat.c \
    - ft.c \
    - ops.c \
    - pk.c \
    - silc.c \
    - silcpurple.h \
    - util.c \
    - wb.c \
    - wb.h
    -
    -AM_CFLAGS = $(st)
    -
    -libsilcpurple_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -
    -if STATIC_SILC
    -
    -st = -DPURPLE_STATIC_PRPL $(SILC_CFLAGS)
    -noinst_LTLIBRARIES = libsilcpurple.la
    -libsilcpurple_la_SOURCES = $(SILCSOURCES)
    -libsilcpurple_la_CFLAGS = $(AM_CFLAGS)
    -
    -else
    -
    -st = $(SILC_CFLAGS)
    -pkg_LTLIBRARIES = libsilcpurple.la
    -libsilcpurple_la_SOURCES = $(SILCSOURCES)
    -
    -endif
    -
    -libsilcpurple_la_LIBADD = @PURPLE_LIBS@ $(SILC_LIBS)
    -
    -AM_CPPFLAGS = \
    - -I$(top_srcdir)/libpurple \
    - -I$(top_builddir)/libpurple \
    - $(DEBUG_CFLAGS) \
    - $(GLIB_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(SILC_CFLAGS)
    --- a/libpurple/protocols/silc/Makefile.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,91 +0,0 @@
    -#
    -# Makefile.mingw
    -#
    -# Description: Makefile for win32 (mingw) version of libsilc protocol plugin
    -#
    -
    -PIDGIN_TREE_TOP := ../../..
    -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
    -
    -DEFINES := $(subst -DWIN32_LEAN_AND_MEAN,,$(DEFINES))
    -
    -TARGET = libsilc
    -TYPE = PLUGIN
    -
    -# Static or Plugin...
    -ifeq ($(TYPE),STATIC)
    - DEFINES += -DSTATIC
    - DLL_INSTALL_DIR = $(PURPLE_INSTALL_DIR)
    -else
    -ifeq ($(TYPE),PLUGIN)
    - DLL_INSTALL_DIR = $(PURPLE_INSTALL_PLUGINS_DIR)
    -endif
    -endif
    -
    -##
    -## INCLUDE PATHS
    -##
    -INCLUDE_PATHS += -I. \
    - -I$(GTK_TOP)/include \
    - -I$(GTK_TOP)/include/glib-2.0 \
    - -I$(GTK_TOP)/lib/glib-2.0/include \
    - -I$(PURPLE_TOP) \
    - -I$(PURPLE_TOP)/win32 \
    - -I$(PIDGIN_TREE_TOP) \
    - -I$(SILC_TOOLKIT)/include
    -
    -LIB_PATHS += -L$(GTK_TOP)/lib \
    - -L$(PURPLE_TOP) \
    - -L$(SILC_TOOLKIT)/lib
    -
    -##
    -## SOURCES, OBJECTS
    -##
    -C_SRC = silc.c \
    - buddy.c \
    - chat.c \
    - ft.c \
    - ops.c \
    - pk.c \
    - util.c \
    - wb.c
    -
    -OBJECTS = $(C_SRC:%.c=%.o)
    -
    -##
    -## LIBRARIES
    -##
    -LIBS = \
    - -lglib-2.0 \
    - -lgobject-2.0 \
    - -lws2_32 \
    - -lintl \
    - -lpurple \
    - -lsilc \
    - -lsilcclient
    -
    -include $(PIDGIN_COMMON_RULES)
    -
    -##
    -## TARGET DEFINITIONS
    -##
    -.PHONY: all install clean
    -
    -all: $(TARGET).dll
    -
    -install: all $(DLL_INSTALL_DIR) $(PURPLE_INSTALL_DIR)
    - cp $(TARGET).dll $(DLL_INSTALL_DIR)
    -
    -$(OBJECTS): $(PURPLE_CONFIG_H)
    -
    -$(TARGET).dll: $(PURPLE_DLL).a $(OBJECTS)
    - $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -Wl,--image-base,0x74000000 -o $(TARGET).dll
    -
    -##
    -## CLEAN RULES
    -##
    -clean:
    - rm -f $(OBJECTS)
    - rm -f $(TARGET).dll
    -
    -include $(PIDGIN_COMMON_TARGETS)
    --- a/libpurple/protocols/simple/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,41 +0,0 @@
    -EXTRA_DIST = \
    - Makefile.mingw
    -
    -pkgdir = @PURPLE_PLUGINDIR@
    -
    -SIMPLESOURCES = \
    - ntlm.c \
    - ntlm.h \
    - simple.c \
    - simple.h \
    - sipmsg.c \
    - sipmsg.h
    -
    -AM_CFLAGS = $(st)
    -
    -libsimple_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -libsimple_la_LIBADD = $(NETTLE_LIBS)
    -
    -if STATIC_SIMPLE
    -
    -st = -DPURPLE_STATIC_PRPL
    -noinst_LTLIBRARIES = libsimple.la
    -libsimple_la_SOURCES = $(SIMPLESOURCES)
    -libsimple_la_CFLAGS = $(AM_CFLAGS)
    -
    -else
    -
    -st =
    -pkg_LTLIBRARIES = libsimple.la
    -libsimple_la_SOURCES = $(SIMPLESOURCES)
    -libsimple_la_LIBADD += @PURPLE_LIBS@
    -
    -endif
    -
    -AM_CPPFLAGS = \
    - -I$(top_srcdir)/libpurple \
    - -I$(top_builddir)/libpurple \
    - $(GLIB_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(DEBUG_CFLAGS) \
    - $(NETTLE_CFLAGS)
    --- a/libpurple/protocols/simple/Makefile.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,79 +0,0 @@
    -#
    -# Makefile.mingw
    -#
    -# Description: Makefile for win32 (mingw) version of libsimple
    -#
    -
    -PIDGIN_TREE_TOP := ../../..
    -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
    -
    -TARGET = libsimple
    -TYPE = PLUGIN
    -
    -# Static or Plugin...
    -ifeq ($(TYPE),STATIC)
    - DEFINES += -DSTATIC
    - DLL_INSTALL_DIR = $(PURPLE_INSTALL_DIR)
    -else
    -ifeq ($(TYPE),PLUGIN)
    - DLL_INSTALL_DIR = $(PURPLE_INSTALL_PLUGINS_DIR)
    -endif
    -endif
    -
    -##
    -## INCLUDE PATHS
    -##
    -INCLUDE_PATHS += -I. \
    - -I$(GTK_TOP)/include \
    - -I$(GTK_TOP)/include/glib-2.0 \
    - -I$(GTK_TOP)/lib/glib-2.0/include \
    - -I$(PURPLE_TOP) \
    - -I$(PURPLE_TOP)/win32 \
    - -I$(PIDGIN_TREE_TOP)
    -
    -LIB_PATHS += -L$(GTK_TOP)/lib \
    - -L$(PURPLE_TOP)
    -
    -##
    -## SOURCES, OBJECTS
    -##
    -C_SRC = simple.c \
    - sipmsg.c
    -
    -OBJECTS = $(C_SRC:%.c=%.o)
    -
    -##
    -## LIBRARIES
    -##
    -LIBS = \
    - -lglib-2.0 \
    - -lgobject-2.0 \
    - -lws2_32 \
    - -lintl \
    - -lpurple
    -
    -include $(PIDGIN_COMMON_RULES)
    -
    -##
    -## TARGET DEFINITIONS
    -##
    -.PHONY: all install clean
    -
    -all: $(TARGET).dll
    -
    -install: all $(DLL_INSTALL_DIR)
    - cp $(TARGET).dll $(DLL_INSTALL_DIR)
    -
    -$(OBJECTS): $(PURPLE_CONFIG_H)
    -
    -$(TARGET).dll: $(PURPLE_DLL).a $(OBJECTS)
    - $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll
    -
    -##
    -## CLEAN RULES
    -##
    -clean:
    - rm -f $(OBJECTS)
    - rm -f $(TARGET).dll
    -
    -include $(PIDGIN_COMMON_TARGETS)
    --- a/libpurple/protocols/zephyr/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,110 +0,0 @@
    -pkgdir = @PURPLE_PLUGINDIR@
    -
    -ZEPHYRSOURCES = \
    - ZAsyncLocate.c \
    - ZCkAuth.c \
    - ZCkIfNot.c \
    - ZClosePort.c \
    - ZCmpUID.c \
    - ZCmpUIDP.c \
    - ZFlsLocs.c \
    - ZFlsSubs.c \
    - ZFmtAuth.c \
    - ZFmtList.c \
    - ZFmtNotice.c \
    - ZFmtRaw.c \
    - ZFmtRawLst.c \
    - ZFmtSmRLst.c \
    - ZFmtSmRaw.c \
    - ZFreeNot.c \
    - ZGetLocs.c \
    - ZGetSender.c \
    - ZGetSubs.c \
    - ZGetWGPort.c \
    - ZIfNotice.c \
    - ZInit.c \
    - ZLocations.c \
    - ZMakeAscii.c \
    - ZMkAuth.c \
    - ZNewLocU.c \
    - ZOpenPort.c \
    - ZParseNot.c \
    - ZPeekIfNot.c \
    - ZPeekNot.c \
    - ZPeekPkt.c \
    - ZPending.c \
    - ZReadAscii.c \
    - ZRecvNot.c \
    - ZRecvPkt.c \
    - ZRetSubs.c \
    - ZSendList.c \
    - ZSendNot.c \
    - ZSendPkt.c \
    - ZSendRLst.c \
    - ZSendRaw.c \
    - ZSetDest.c \
    - ZSetFD.c \
    - ZSetSrv.c \
    - ZSubs.c \
    - ZVariables.c \
    - ZWait4Not.c \
    - ZhmStat.c \
    - Zinternal.c \
    - com_err.h \
    - error_message.c \
    - error_table.h \
    - et_name.c \
    - init_et.c \
    - internal.h \
    - mit-copyright.h \
    - mit-sipb-copyright.h \
    - sysdep.h \
    - zephyr_err.c \
    - zephyr_err.h \
    - zephyr_internal.h \
    - zephyr.c \
    - zephyr.h
    -
    -ZEPHYRSOURCESEXT = zephyr.c zephyr.h
    -
    -AM_CFLAGS = $(st)
    -
    -ZEPHYRLIBS = $(KRB4_LDFLAGS) $(KRB4_LIBS)
    -
    -ZEPHYRLIBSEXT = $(ZEPHYR_LDFLAGS) $(ZEPHYR_LIBS)
    -
    -libzephyr_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -
    -if STATIC_ZEPHYR
    -
    -st = -DPURPLE_STATIC_PRPL -Dlint
    -noinst_LTLIBRARIES = libzephyr.la
    -libzephyr_la_SOURCES = $(ZEPHYRSOURCES)
    -libzephyr_la_CFLAGS = $(AM_CFLAGS)
    -libzephyr_la_LIBADD = @PURPLE_LIBS@ $(ZEPHYRLIBS)
    -
    -else
    -
    -st = -Dlint
    -pkg_LTLIBRARIES = libzephyr.la
    -
    -if EXTERNAL_LIBZEPHYR
    -libzephyr_la_SOURCES = $(ZEPHYRSOURCESEXT)
    -libzephyr_la_LIBADD = @PURPLE_LIBS@ $(ZEPHYRLIBSEXT)
    -else
    -libzephyr_la_SOURCES = $(ZEPHYRSOURCES)
    -libzephyr_la_LIBADD = @PURPLE_LIBS@ $(ZEPHYRLIBS)
    -endif
    -
    -
    -endif
    -
    -AM_CPPFLAGS = \
    - -I$(top_srcdir) \
    - -I$(top_srcdir)/libpurple \
    - -I$(top_builddir)/libpurple \
    - -I$(top_srcdir)/libpurple/protocols \
    - $(GLIB_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(KRB4_CFLAGS) \
    - $(DEBUG_CFLAGS)
    --- a/libpurple/protocols/zephyr/Makefile.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,150 +0,0 @@
    -#
    -# Makefile.mingw
    -#
    -# Description: Makefile for win32 (mingw) version of libzephyr
    -#
    -
    -PIDGIN_TREE_TOP := ../../..
    -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
    -
    -TARGET = libzephyr
    -KRB4_TOP := $(WIN32_DEV_TOP)/kfw-2.6.3-final.fixed
    -USE_KRB4 := false
    -DEFINES += -DWIN32 -DKRB5_SYSTYPES__
    -TYPE = PLUGIN
    -
    -ifeq ($(USE_KRB4),true)
    - DEFINES += -DZEPHYR_USES_KERBEROS
    -endif
    -
    -# Static or Plugin...
    -ifeq ($(TYPE),STATIC)
    - DEFINES += -DSTATIC
    - DLL_INSTALL_DIR = $(PURPLE_INSTALL_DIR)
    -else
    -ifeq ($(TYPE),PLUGIN)
    - DLL_INSTALL_DIR = $(PURPLE_INSTALL_PLUGINS_DIR)
    -endif
    -endif
    -
    -##
    -## INCLUDE PATHS
    -##
    -INCLUDE_PATHS += -I$(ZEPHYR_ROOT) \
    - -I$(GTK_TOP)/include \
    - -I$(GTK_TOP)/include/glib-2.0 \
    - -I$(GTK_TOP)/lib/glib-2.0/include \
    - -I$(PURPLE_TOP) \
    - -I$(PURPLE_TOP)/win32 \
    - -I$(PIDGIN_TREE_TOP)
    -
    -ifeq ($(USE_KRB4), true)
    - INCLUDE_PATHS += -I$(KRB4_TOP)/inc/krb4
    -endif
    -
    -LIB_PATHS += -L$(GTK_TOP)/lib \
    - -L$(PURPLE_TOP)
    -
    -ifeq ($(USE_KRB4), true)
    - LIB_PATHS+=-L$(KRB4_TOP)/lib/i386
    -endif
    -
    -##
    -## SOURCES, OBJECTS
    -##
    -C_SRC = ZAsyncLocate.c \
    - ZCkAuth.c \
    - ZCkIfNot.c \
    - ZClosePort.c \
    - ZCmpUID.c \
    - ZCmpUIDP.c \
    - ZFlsLocs.c \
    - ZFlsSubs.c \
    - ZFmtAuth.c \
    - ZFmtList.c \
    - ZFmtNotice.c \
    - ZFmtRaw.c \
    - ZFmtRawLst.c \
    - ZFmtSmRLst.c \
    - ZFmtSmRaw.c \
    - ZFreeNot.c \
    - ZGetLocs.c \
    - ZGetSender.c \
    - ZGetSubs.c \
    - ZGetWGPort.c \
    - ZIfNotice.c \
    - ZInit.c \
    - ZLocations.c \
    - ZMakeAscii.c \
    - ZMkAuth.c \
    - ZNewLocU.c \
    - ZOpenPort.c \
    - ZParseNot.c \
    - ZPeekIfNot.c \
    - ZPeekNot.c \
    - ZPeekPkt.c \
    - ZPending.c \
    - ZReadAscii.c \
    - ZRecvNot.c \
    - ZRecvPkt.c \
    - ZRetSubs.c \
    - ZSendList.c \
    - ZSendNot.c \
    - ZSendPkt.c \
    - ZSendRLst.c \
    - ZSendRaw.c \
    - ZSetDest.c \
    - ZSetFD.c \
    - ZSetSrv.c \
    - ZSubs.c \
    - ZVariables.c \
    - ZWait4Not.c \
    - ZhmStat.c \
    - Zinternal.c \
    - error_message.c \
    - et_name.c \
    - init_et.c \
    - zephyr_err.c \
    - zephyr.c
    -
    -OBJECTS = $(C_SRC:%.c=%.o)
    -
    -##
    -## LIBRARIES
    -##
    -LIBS = \
    - -lglib-2.0 \
    - -lgobject-2.0 \
    - -lws2_32 \
    - -lintl \
    - -lpurple
    -
    -ifeq ($(USE_KRB4),true)
    - LIBS+= -lkrbv4w32
    -endif
    -
    -include $(PIDGIN_COMMON_RULES)
    -
    -##
    -## TARGET DEFINITIONS
    -##
    -.PHONY: all install clean
    -
    -all: $(TARGET).dll
    -
    -install: all $(DLL_INSTALL_DIR)
    - cp $(TARGET).dll $(DLL_INSTALL_DIR)
    -
    -$(OBJECTS): $(PURPLE_CONFIG_H)
    -
    -$(TARGET).dll: $(PURPLE_DLL).a $(OBJECTS)
    - $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -Wl,--enable-stdcall-fixup -o $(TARGET).dll
    -
    -##
    -## CLEAN RULES
    -##
    -clean:
    - rm -f $(OBJECTS)
    - rm -f $(TARGET).dll
    -
    -include $(PIDGIN_COMMON_TARGETS)
    --- a/libpurple/request-datasheet.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/request-datasheet.h Thu Nov 23 22:30:26 2017 -0600
    @@ -129,7 +129,7 @@
    *
    * You shouldn't modify datasheet's data while iterating through it.
    *
    - * Returns: (transfer none): The list of records.
    + * Returns: (element-type PurpleRequestDatasheetRecord) (transfer none): The list of records.
    */
    const GList *
    purple_request_datasheet_get_records(PurpleRequestDatasheet *sheet);
    @@ -153,7 +153,7 @@
    *
    * Returns the list of actions in a datasheet.
    *
    - * Returns: (transfer none): The list of actions.
    + * Returns: (element-type PurpleRequestDatasheetAction) (transfer none): The list of actions.
    */
    const GList *
    purple_request_datasheet_get_actions(PurpleRequestDatasheet *sheet);
    --- a/libpurple/request.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/request.h Thu Nov 23 22:30:26 2017 -0600
    @@ -133,7 +133,7 @@
    PURPLE_REQUEST_ICON_ERROR
    } PurpleRequestIconType;
    -typedef void (*PurpleRequestCancelCb)(gpointer);
    +typedef void (*PurpleRequestCancelCb)(gpointer data);
    /**
    * PurpleRequestUiOps:
    @@ -202,7 +202,7 @@
    void (*_purple_reserved4)(void);
    };
    -typedef void (*PurpleRequestInputCb)(void *, const char *);
    +typedef void (*PurpleRequestInputCb)(void *data, const char *value);
    typedef gboolean (*PurpleRequestFieldValidator)(PurpleRequestField *field,
    gchar **errmsg, gpointer user_data);
    @@ -216,12 +216,12 @@
    * argument is the <literal>user_data</literal> parameter; the second is the
    * index in the list of actions of the one chosen.
    */
    -typedef void (*PurpleRequestActionCb)(void *, int);
    +typedef void (*PurpleRequestActionCb)(void *data, int action);
    -typedef void (*PurpleRequestChoiceCb)(void *, gpointer);
    -typedef void (*PurpleRequestFieldsCb)(void *, PurpleRequestFields *fields);
    -typedef void (*PurpleRequestFileCb)(void *, const char *filename);
    -typedef void (*PurpleRequestHelpCb)(gpointer);
    +typedef void (*PurpleRequestChoiceCb)(void *data, gpointer value);
    +typedef void (*PurpleRequestFieldsCb)(void *data, PurpleRequestFields *fields);
    +typedef void (*PurpleRequestFileCb)(void *data, const char *filename);
    +typedef void (*PurpleRequestHelpCb)(gpointer data);
    G_BEGIN_DECLS
    @@ -543,7 +543,7 @@
    *
    * Returns a list of all groups in a field list.
    *
    - * Returns: (transfer none): A list of groups.
    + * Returns: (element-type PurpleRequestFieldGroup) (transfer none): A list of groups.
    */
    GList *purple_request_fields_get_groups(const PurpleRequestFields *fields);
    @@ -588,7 +588,7 @@
    *
    * Returns a list of all required fields.
    *
    - * Returns: (transfer none): The list of required fields.
    + * Returns: (element-type PurpleRequestField) (transfer none): The list of required fields.
    */
    const GList *purple_request_fields_get_required(
    const PurpleRequestFields *fields);
    @@ -599,7 +599,7 @@
    *
    * Returns a list of all validated fields.
    *
    - * Returns: (transfer none): The list of validated fields.
    + * Returns: (element-type PurpleRequestField) (transfer none): The list of validated fields.
    */
    const GList *purple_request_fields_get_validatable(
    const PurpleRequestFields *fields);
    @@ -610,8 +610,8 @@
    *
    * Returns a list of all fields with sensitivity callback added.
    *
    - * Returns: (transfer none): The list of fields with automatic sensitivity
    - * callback.
    + * Returns: (element-type PurpleRequestField) (transfer none): The list of
    + * fields with automatic sensitivity callback.
    */
    const GList *
    purple_request_fields_get_autosensitive(const PurpleRequestFields *fields);
    @@ -816,7 +816,7 @@
    *
    * Returns a list of all fields in a group.
    *
    - * Returns: (transfer none): The list of fields in the group.
    + * Returns: (element-type PurpleRequestField) (transfer none): The list of fields in the group.
    */
    GList *purple_request_field_group_get_fields(
    const PurpleRequestFieldGroup *group);
    @@ -1521,7 +1521,7 @@
    /**
    * purple_request_field_list_set_selected:
    * @field: The field.
    - * @items: The list of selected items, which is not modified or freed.
    + * @items: (element-type utf8) (transfer none): The list of selected items.
    *
    * Sets a list of selected items in a list field.
    */
    @@ -1549,7 +1549,7 @@
    * To retrieve the data for each item, use
    * purple_request_field_list_get_data().
    *
    - * Returns: (transfer none): The list of selected items.
    + * Returns: (element-type utf8) (transfer none): The list of selected items.
    */
    GList *purple_request_field_list_get_selected(
    const PurpleRequestField *field);
    @@ -1560,7 +1560,7 @@
    *
    * Returns a list of items in a list field.
    *
    - * Returns: (transfer none): The list of items.
    + * Returns: (element-type utf8) (transfer none): The list of items.
    */
    GList *purple_request_field_list_get_items(const PurpleRequestField *field);
    @@ -1572,7 +1572,7 @@
    *
    * The icons will correspond with the items, in order.
    *
    - * Returns: (transfer none): The list of icons or %NULL (i.e. the empty #GList)
    + * Returns: (element-type utf8) (transfer none): The list of icons or %NULL (i.e. the empty #GList)
    * if no items have icons.
    */
    GList *purple_request_field_list_get_icons(const PurpleRequestField *field);
    @@ -1841,7 +1841,7 @@
    /**
    * purple_request_field_email_validator:
    * @field: The field.
    - * @errmsg: (Optional) destination for error message.
    + * @errmsg: (out) (optional): destination for error message.
    * @user_data: Ignored.
    *
    * Validates a field which should contain an email address.
    --- a/libpurple/roomlist.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/roomlist.h Thu Nov 23 22:30:26 2017 -0600
    @@ -193,8 +193,8 @@
    /**
    * purple_roomlist_set_fields:
    * @list: The room list.
    - * @fields: A GList of PurpleRoomlistField's. UI's are encouraged
    - * to default to displaying them in the order given.
    + * @fields: (element-type PurpleRoomlistField) (transfer full): UI's are
    + * encouraged to default to displaying these fields in the order given.
    *
    * Set the different field types and their names for this protocol.
    *
    @@ -280,7 +280,7 @@
    *
    * Get the list of fields for a roomlist.
    *
    - * Returns: (transfer none): A list of fields
    + * Returns: (element-type PurpleRoomlistField) (transfer none): A list of fields
    */
    GList *purple_roomlist_get_fields(PurpleRoomlist *roomlist);
    @@ -424,7 +424,7 @@
    *
    * Get the list of fields for a room.
    *
    - * Returns: (transfer none): A list of fields
    + * Returns: (element-type PurpleRoomlistField) (transfer none): A list of fields
    */
    GList * purple_roomlist_room_get_fields(PurpleRoomlistRoom *room);
    --- a/libpurple/savedstatuses.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/savedstatuses.h Thu Nov 23 22:30:26 2017 -0600
    @@ -184,7 +184,7 @@
    *
    * Returns all saved statuses.
    *
    - * Returns: (transfer none): A list of saved statuses.
    + * Returns: (element-type PurpleSavedStatus) (transfer none): A list of saved statuses.
    */
    GList *purple_savedstatuses_get_all(void);
    @@ -199,10 +199,8 @@
    * how many times it has been used. Transient statuses without
    * messages are not included in the list.
    *
    - * Returns: A linked list containing at most how_many
    - * PurpleSavedStatuses. This list should be
    - * g_list_free'd by the caller (but the
    - * PurpleSavedStatuses must not be free'd).
    + * Returns: (element-type PurpleSavedStatus) (transfer container): A list containing
    + * at most how_many saved statuses.
    */
    GList *purple_savedstatuses_get_popular(unsigned int how_many);
    --- a/libpurple/smiley-list.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/smiley-list.h Thu Nov 23 22:30:26 2017 -0600
    @@ -156,8 +156,7 @@
    *
    * Returns the list of smileys with unique image file paths.
    *
    - * Returns: (transfer container): the #GList of unique smileys. Use #g_list_free
    - * when done using it.
    + * Returns: (element-type PurpleSmiley) (transfer container): the list of unique smileys.
    */
    GList *purple_smiley_list_get_unique(PurpleSmileyList *list_);
    @@ -167,8 +166,7 @@
    *
    * Returns the list of all smileys added to the @list_.
    *
    - * Returns: (transfer container): the #GList of smileys. Use #g_list_free
    - * when done using it.
    + * Returns: (element-type PurpleSmiley) (transfer container): the list of smileys.
    */
    GList *purple_smiley_list_get_all(PurpleSmileyList *list_);
    --- a/libpurple/smiley-parser.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/smiley-parser.h Thu Nov 23 22:30:26 2017 -0600
    @@ -112,8 +112,7 @@
    * text. However, distinct smileys may share common image file (thus, their
    * paths will be the same).
    *
    - * Returns: (transfer container): the #GList of found smileys. Use #g_list_free
    - * when no longer need it.
    + * Returns: (element-type PurpleSmiley) (transfer container): the list of found smileys.
    */
    GList *
    purple_smiley_parser_find(PurpleSmileyList *smileys, const gchar *message,
    --- a/libpurple/sslconn.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/sslconn.h Thu Nov 23 22:30:26 2017 -0600
    @@ -50,10 +50,10 @@
    typedef struct _PurpleSslConnection PurpleSslConnection;
    -typedef void (*PurpleSslInputFunction)(gpointer, PurpleSslConnection *,
    - PurpleInputCondition);
    -typedef void (*PurpleSslErrorFunction)(PurpleSslConnection *, PurpleSslErrorType,
    - gpointer);
    +typedef void (*PurpleSslInputFunction)(gpointer data, PurpleSslConnection *connection,
    + PurpleInputCondition cond);
    +typedef void (*PurpleSslErrorFunction)(PurpleSslConnection *connection, PurpleSslErrorType err,
    + gpointer data);
    /**
    * PurpleSslConnection:
    @@ -238,8 +238,9 @@
    *
    * Obtains the peer's presented certificates
    *
    - * Returns: The peer certificate chain, in the order of certificate, issuer,
    - * issuer's issuer, etc. %NULL if no certificates have been provided,
    + * Returns: (element-type GTlsCertificate): The peer certificate chain, in the
    + * order of certificate, issuer, issuer's issuer, etc. %NULL if no
    + * certificates have been provided.
    */
    GList * purple_ssl_get_peer_certificates(PurpleSslConnection *gsc);
    --- a/libpurple/status.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/status.h Thu Nov 23 22:30:26 2017 -0600
    @@ -408,13 +408,14 @@
    *
    * Returns a list of all attributes in a status type.
    *
    - * Returns: (transfer none): The list of attributes.
    + * Returns: (element-type PurpleStatusAttribute) (transfer none): The list of attributes.
    */
    GList *purple_status_type_get_attrs(const PurpleStatusType *status_type);
    /**
    * purple_status_type_find_with_id:
    - * @status_types: A list of status types. Often account->status_types.
    + * @status_types: (element-type PurpleStatus) (transfer none): A list of status
    + * types. Often account->status_types.
    * @id: The unique ID of the status type you wish to find.
    *
    * Find the PurpleStatusType with the given id.
    --- a/libpurple/stun.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/stun.h Thu Nov 23 22:30:26 2017 -0600
    @@ -88,7 +88,7 @@
    time_t lookup_time;
    };
    -typedef void (*PurpleStunCallback) (PurpleStunNatDiscovery *);
    +typedef void (*PurpleStunCallback) (PurpleStunNatDiscovery *discovery);
    G_BEGIN_DECLS
    --- a/libpurple/tag.sh Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,56 +0,0 @@
    -#!/bin/bash
    -# Script to silence win32 and perl build by displaying a neat one-line notice
    -# instead of full command contents when executing compilers.
    -#
    -# Written by Tomek Wasilczyk <tomkiewicz@cpw.pidgin.im>, licensed under GNU GPL
    -
    -tag=$1
    -found=0
    -object=""
    -file_1=""
    -file_2=""
    -is_final=0
    -for arg in "$@"
    -do
    - if [ "$found" == 1 ]; then
    - object="$arg"
    - break
    - fi
    - if [ "$arg" == "-o" ]; then
    - found=1
    - fi
    - if [ "$tag" == "auto" ] && [ "$arg" == "-shared" ]; then
    - tag="CCLD"
    - fi
    - ext_1=${arg#${arg%??}}
    - if [ "${ext_1}" == ".c" ]; then
    - file_1="$arg"
    - fi
    - ext_2=${arg#${arg%???}}
    - if [ "${ext_2}" == ".xs" ]; then
    - file_2="$arg"
    - fi
    - ext_3=${arg#${arg%????}}
    - if [ "${ext_3}" == ".3pm" ]; then
    - file_2="$arg"
    - fi
    -done
    -
    -if [ "$tag" == "auto" ]; then
    - tag="CC"
    -fi
    -
    -if [ "$object" == "" ] && [ "${file_1}" != "" ]; then
    - object="${file_1}"
    -fi
    -if [ "$object" == "" ] && [ "${file_2}" != "" ]; then
    - object="${file_2}"
    -fi
    -
    -shift 1
    -if [ "$object" == "" ]; then
    - echo "$@" >&2
    -else
    - echo -e " $tag\t$object" >&2
    -fi
    -"$@"
    --- a/libpurple/tests.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/tests.h Thu Nov 23 22:30:26 2017 -0600
    @@ -30,8 +30,8 @@
    const gchar *output;
    } PurpleTestStringData;
    -typedef const gchar *(*PurpleTestStringFunc)(const gchar *);
    -typedef gchar *(*PurpleTestStringFreeFunc)(const gchar *);
    +typedef const gchar *(*PurpleTestStringFunc)(const gchar *str);
    +typedef gchar *(*PurpleTestStringFreeFunc)(const gchar *str);
    static inline void
    purple_test_string_compare(PurpleTestStringFunc func,
    --- a/libpurple/tests/.hgignore Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,16 +0,0 @@
    -syntax: regexp
    -^test_md[45]$
    -^test_sha(1|256)$
    -^test_des3?$
    -^test_hmac$
    -^test_image$
    -^test_smiley$
    -^test_smiley_list$
    -^test_trie$
    -^test_util$
    -^test_xmlnode$
    -
    -syntax: glob
    -*.log
    -*.trs
    -
    --- a/libpurple/tests/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,49 +0,0 @@
    -include $(top_srcdir)/glib-tap.mk
    -
    -COMMON_LIBS=\
    - $(top_builddir)/libpurple/libpurple.la \
    - $(GLIB_LIBS) \
    - $(GPLUGIN_LIBS)
    -
    -test_programs=\
    - test_image \
    - test_protocol_xfer \
    - test_smiley \
    - test_smiley_list \
    - test_trie \
    - test_util \
    - test_xmlnode
    -
    -test_image_SOURCES=test_image.c
    -test_image_LDADD=$(COMMON_LIBS)
    -
    -test_protocol_xfer_SOURCES=test_protocol_xfer.c
    -test_protocol_xfer_LDADD=$(COMMON_LIBS)
    -
    -test_smiley_SOURCES=test_smiley.c
    -test_smiley_LDADD=$(COMMON_LIBS)
    -
    -test_smiley_list_SOURCES=test_smiley_list.c
    -test_smiley_list_LDADD=$(COMMON_LIBS)
    -
    -test_trie_SOURCES=test_trie.c
    -test_trie_LDADD=$(COMMON_LIBS)
    -
    -test_util_SOURCES=test_util.c
    -test_util_LDADD=$(COMMON_LIBS)
    -
    -test_xmlnode_SOURCES=test_xmlnode.c
    -test_xmlnode_LDADD=$(COMMON_LIBS)
    -
    -AM_CPPFLAGS = \
    - -I$(top_srcdir)/libpurple \
    - -I$(top_builddir)/libpurple \
    - -DTEST_DATA_DIR=\"$(srcdir)/data\" \
    - $(DEBUG_CFLAGS) \
    - $(GLIB_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(PLUGIN_CFLAGS) \
    - $(DBUS_CFLAGS)
    -
    -EXTRA_DIST += \
    - data/test-image.png
    --- a/libpurple/tests/test_util.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/tests/test_util.c Thu Nov 23 22:30:26 2017 -0600
    @@ -523,6 +523,30 @@
    }
    /******************************************************************************
    + * URI Escaping
    + *****************************************************************************/
    +static void
    +test_uri_escape_for_open(void) {
    + /* make sure shell stuff is escaped... */
    + gchar *result = purple_uri_escape_for_open("https://$(xterm)");
    + g_assert_cmpstr("https://%24%28xterm%29", ==, result);
    + g_free(result);
    +
    + result = purple_uri_escape_for_open("https://`xterm`");
    + g_assert_cmpstr("https://%60xterm%60", ==, result);
    + g_free(result);
    +
    + result = purple_uri_escape_for_open("https://$((25 + 13))");
    + g_assert_cmpstr("https://%24%28%2825%20+%2013%29%29", ==, result);
    + g_free(result);
    +
    + /* ...but keep brackets so that ipv6 links can be opened. */
    + result = purple_uri_escape_for_open("https://[123:4567:89a::::]");
    + g_assert_cmpstr("https://[123:4567:89a::::]", ==, result);
    + g_free(result);
    +}
    +
    +/******************************************************************************
    * MANE
    *****************************************************************************/
    gint
    @@ -570,5 +594,8 @@
    g_test_add_func("/util/test_strdup_withhtml",
    test_util_strdup_withhtml);
    + g_test_add_func("/util/test_uri_escape_for_open",
    + test_uri_escape_for_open);
    +
    return g_test_run();
    }
    --- a/libpurple/theme-loader.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/theme-loader.h Thu Nov 23 22:30:26 2017 -0600
    @@ -58,8 +58,8 @@
    {
    GObjectClass parent_class;
    - PurpleTheme *(*purple_theme_loader_build)(const gchar*);
    - gboolean (*probe_directory)(const gchar *);
    + PurpleTheme *(*purple_theme_loader_build)(const gchar *dir);
    + gboolean (*probe_directory)(const gchar *dir);
    /*< private >*/
    void (*purple_reserved1)(void);
    --- a/libpurple/theme-manager.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/theme-manager.h Thu Nov 23 22:30:26 2017 -0600
    @@ -34,7 +34,7 @@
    #include "theme.h"
    #include "theme-loader.h"
    -typedef void (*PurpleThemeFunc) (PurpleTheme *);
    +typedef void (*PurpleThemeFunc) (PurpleTheme *theme);
    typedef struct _PurpleThemeManager PurpleThemeManager;
    typedef struct _PurpleThemeManagerClass PurpleThemeManagerClass;
    --- a/libpurple/util.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/util.c Thu Nov 23 22:30:26 2017 -0600
    @@ -1472,7 +1472,7 @@
    pln = "\302\256"; /* or use g_unichar_to_utf8(0xae); */
    else if(IS_ENTITY("&apos;"))
    pln = "\'";
    - else if(text[1] == '#' && g_ascii_isxdigit(text[2])) {
    + else if(text[1] == '#' && (g_ascii_isxdigit(text[2]) || text[2] == 'x')) {
    static char buf[7];
    const char *start = text + 2;
    char *end;
    @@ -4271,6 +4271,17 @@
    return result;
    }
    +char *
    +purple_uri_escape_for_open(const char *unescaped)
    +{
    + /* Replace some special characters like $ with their percent-encoded value.
    + * This shouldn't be necessary because we shell-escape the entire arg before
    + * exec'ing the browser, however, we had a report that a URL containing
    + * $(xterm) was causing xterm to start on his system. This is obviously a
    + * bug on his system, but it's pretty easy for us to protect against it. */
    + return g_uri_escape_string(unescaped, "[]:;/%#,+?=&@", FALSE);
    +}
    +
    /**************************************************************************
    * UTF8 String Functions
    **************************************************************************/
    --- a/libpurple/util.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/util.h Thu Nov 23 22:30:26 2017 -0600
    @@ -78,8 +78,8 @@
    * @callback: The function to be called when the action is used on
    * the selected item.
    * @data: Additional data to be passed to the callback.
    - * @children: A GList of PurpleMenuActions to be added as a submenu
    - * of the action.
    + * @children: (element-type PurpleMenuAction) (transfer full): Menu actions to
    + * be added as a submenu of this action.
    *
    * Creates a new PurpleMenuAction.
    *
    @@ -132,7 +132,7 @@
    *
    * Returns the children of the PurpleMenuAction.
    *
    - * Returns: The GList of children.
    + * Returns: (element-type PurpleMenuAction) (transfer none): The menu children.
    */
    GList* purple_menu_action_get_children(const PurpleMenuAction *act);
    @@ -166,7 +166,7 @@
    /**
    * purple_menu_action_set_children:
    * @act: The menu action.
    - * @children: The PurpleMenuAtion children
    + * @children: (element-type PurpleMenuAction) (transfer full): The menu children
    *
    * Set the children of the PurpleMenuAction.
    */
    @@ -1309,8 +1309,8 @@
    * This function extracts a list of URIs from the a "text/uri-list"
    * string. It was "borrowed" from gnome_uri_list_extract_uris
    *
    - * Returns: A GList containing strings allocated with g_malloc
    - * that have been splitted from uri-list.
    + * Returns: (element-type utf8): A GList containing strings allocated with
    + * g_malloc that have been split from uri-list.
    */
    GList *purple_uri_list_extract_uris(const gchar *uri_list);
    @@ -1322,13 +1322,24 @@
    * "text/uri-list" string. It was "borrowed" from
    * gnome_uri_list_extract_filenames
    *
    - * Returns: A GList containing strings allocated with g_malloc that
    - * contain the filenames in the uri-list. Note that unlike
    - * purple_uri_list_extract_uris() function, this will discard
    - * any non-file uri from the result value.
    + * Returns: (element-type utf8): A GList containing strings allocated with
    + * g_malloc that contain the filenames in the uri-list. Note that
    + * unlike the purple_uri_list_extract_uris() function, this will
    + * discard any non-file uri from the result value.
    */
    GList *purple_uri_list_extract_filenames(const gchar *uri_list);
    +/**
    + * This function escapes any characters that might be interpreted by the shell
    + * when executing a program to open a URI on some systems.
    + *
    + * @param unescaped The unescaped URI.
    + *
    + * @return A newly allocated string with any shell metacharacters replaced with
    + * their escaped equivalents.
    + */
    +char *purple_uri_escape_for_open(const char *unescaped);
    +
    /**************************************************************************
    * UTF8 String Functions
    **************************************************************************/
    --- a/libpurple/win32/global.mak Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,154 +0,0 @@
    -#
    -# global.mak
    -#
    -# This file should be included by all Makefile.mingw files for project
    -# wide definitions (after correctly defining PIDGIN_TREE_TOP).
    -#
    -
    -#include optional $(PIDGIN_TREE_TOP)/local.mak to allow overriding of any definitions
    --include $(PIDGIN_TREE_TOP)/local.mak
    -
    -# TODO: we should do parsing like for PURPLE_VERSION, if we won't drop
    -# Makefile.mingw files before 3.0.0 release
    -PURPLE_MAJOR_VERSION := 3
    -PURPLE_MINOR_VERSION := 0
    -PURPLE_MICRO_VERSION := 0
    -PURPLE_API_VERSION := 20
    -
    -# Locations of our various dependencies
    -WIN32_DEV_TOP ?= $(PIDGIN_TREE_TOP)/../win32-dev
    -ENCHANT_TOP ?= $(WIN32_DEV_TOP)/enchant-1.6
    -GNUTLS_TOP ?= $(WIN32_DEV_TOP)/gnutls-3.1
    -GTK_TOP ?= $(WIN32_DEV_TOP)/gtk2-2.24
    -GTK_BIN ?= $(GTK_TOP)/bin
    -JSON_GLIB_TOP ?= $(WIN32_DEV_TOP)/json-glib-0.14
    -LIBXML2_TOP ?= $(WIN32_DEV_TOP)/libxml2-2.9.2_daa1
    -MEANWHILE_TOP ?= $(WIN32_DEV_TOP)/meanwhile-1.0.2_daa3
    -NSS_TOP ?= $(WIN32_DEV_TOP)/nss-3.24-nspr-4.12
    -SILC_TOOLKIT ?= $(WIN32_DEV_TOP)/silc-toolkit-1.1.12
    -GSTREAMER_TOP ?= $(WIN32_DEV_TOP)/gstreamer-0.10.13
    -GCC_SSP_TOP ?= $(shell dirname $(shell which $(CC)))
    -CYRUS_SASL_TOP ?= $(WIN32_DEV_TOP)/cyrus-sasl-2.1
    -WEBKITGTK_TOP ?= $(WIN32_DEV_TOP)/libwebkitgtk-1.10
    -LIBSOUP_TOP ?= $(WIN32_DEV_TOP)/libsoup-2.42
    -GETTEXT_TOP ?= $(WIN32_DEV_TOP)/gettext-0.18
    -INTLTOOL_TOP ?= $(WIN32_DEV_TOP)/intltool-0.50
    -LIBGADU_TOP ?= $(WIN32_DEV_TOP)/libgadu-1.12
    -
    -# Where we installing this stuff to?
    -PIDGIN_INSTALL_DIR := $(PIDGIN_TREE_TOP)/win32-install-dir
    -PURPLE_INSTALL_DIR := $(PIDGIN_TREE_TOP)/win32-install-dir
    -PIDGIN_INSTALL_PLUGINS_DIR := $(PIDGIN_INSTALL_DIR)/plugins
    -PURPLE_INSTALL_PLUGINS_DIR := $(PURPLE_INSTALL_DIR)/plugins
    -PURPLE_INSTALL_PO_DIR := $(PURPLE_INSTALL_DIR)/locale
    -
    -# Important (enough) locations in our source code
    -PURPLE_TOP := $(PIDGIN_TREE_TOP)/libpurple
    -PURPLE_PLUGINS_TOP := $(PURPLE_TOP)/plugins
    -PIDGIN_TOP := $(PIDGIN_TREE_TOP)/pidgin
    -PIDGIN_PIXMAPS_TOP := $(PIDGIN_TOP)/pixmaps
    -PIDGIN_PLUGINS_TOP := $(PIDGIN_TOP)/plugins
    -PURPLE_PO_TOP := $(PIDGIN_TREE_TOP)/po
    -PURPLE_PROTOS_TOP := $(PURPLE_TOP)/protocols
    -
    -# Locations of important (in-tree) build targets
    -PIDGIN_CONFIG_H := $(PIDGIN_TREE_TOP)/config.h
    -PURPLE_CONFIG_H := $(PIDGIN_TREE_TOP)/config.h
    -PIDGIN_REVISION_H := $(PIDGIN_TREE_TOP)/package_revision.h
    -PIDGIN_REVISION_RAW_TXT := $(PIDGIN_TREE_TOP)/package_revision_raw.txt
    -PURPLE_PURPLE_H := $(PURPLE_TOP)/purple.h
    -PURPLE_VERSION_H := $(PURPLE_TOP)/version.h
    -PURPLE_DLL := $(PURPLE_TOP)/libpurple.dll
    -PIDGIN_DLL := $(PIDGIN_TOP)/pidgin.dll
    -PIDGIN_EXE := $(PIDGIN_TOP)/pidgin.exe
    -PIDGIN_PORTABLE_EXE := $(PIDGIN_TOP)/pidgin-portable.exe
    -
    -GCCWARNINGS ?= -Waggregate-return -Wcast-align -Wdeclaration-after-statement -Werror-implicit-function-declaration -Wextra -Wno-sign-compare -Wno-unused-parameter -Winit-self -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wundef
    -
    -CC_HARDENING_OPTIONS ?= -Wstack-protector -fwrapv -fno-strict-overflow -Wno-missing-field-initializers -Wformat-security -fstack-protector-all --param ssp-buffer-size=1
    -LD_HARDENING_OPTIONS ?= -Wl,--dynamicbase -Wl,--nxcompat
    -
    -TAG := @$(PURPLE_TOP)/tag.sh
    -
    -# parse the version number from the configure.ac file if it is newer
    -#m4_define([purple_major_version], [2])
    -#m4_define([purple_minor_version], [0])
    -#m4_define([purple_micro_version], [0])
    -#m4_define([purple_version_suffix], [devel])
    -PIDGIN_VERSION := $(shell \
    - if [ ! $(PIDGIN_TREE_TOP)/VERSION -nt $(PIDGIN_TREE_TOP)/configure.ac ]; then \
    - awk 'BEGIN {FS="[\\(\\)\\[\\]]"} /^m4_define..purple_(major|minor)_version/ {printf("%s.",$$5);} /^m4_define..purple_micro_version/ {printf("%s",$$5);} /^m4_define..purple_version_suffix/ {printf("%s",$$5); exit}' \
    - $(PIDGIN_TREE_TOP)/configure.ac > $(PIDGIN_TREE_TOP)/VERSION; \
    - fi; \
    - cat $(PIDGIN_TREE_TOP)/VERSION \
    -)
    -PURPLE_VERSION := $(PIDGIN_VERSION)
    -ifdef EXTRAVERSION
    -DISPLAY_VERSION := $(PIDGIN_VERSION)-$(EXTRAVERSION)
    -else
    -DISPLAY_VERSION := $(PIDGIN_VERSION)
    -endif
    -
    -CYRUS_SASL ?= 1
    -
    -ifeq ($(CYRUS_SASL), 1)
    -DEFINES += -DHAVE_CYRUS_SASL
    -endif
    -
    -DEFINES += -DHAVE_CONFIG_H -DWIN32_LEAN_AND_MEAN -DWINVER=0x0501 -D_WIN32_WINNT=0x501
    -
    -CFLAGS += -O2 -Wall $(GCCWARNINGS) $(CC_HARDENING_OPTIONS) -pipe -mms-bitfields -g
    -
    -# If not specified, dlls are built with the default base address of 0x10000000.
    -# When loaded into a process address space a dll will be rebased if its base
    -# address colides with the base address of an existing dll. To avoid rebasing
    -# we do the following. Rebasing can slow down the load time of dlls and it
    -# also renders debug info useless.
    -DLL_LD_FLAGS += -Wl,--enable-auto-image-base -Wl,--enable-auto-import $(LD_HARDENING_OPTIONS) -lssp
    -
    -# Build programs
    -ifeq "$(origin CC)" "default"
    - CC := gcc.exe
    -endif
    -# comment out the next line to make output more verbose
    -CC := $(TAG) "auto" $(CC)
    -
    -GMSGFMT ?= $(GETTEXT_TOP)/bin/msgfmt
    -MAKENSIS ?= makensis.exe
    -PERL ?= perl
    -WINDRES ?= windres
    -STRIP ?= strip
    -INTLTOOL_MERGE ?= $(INTLTOOL_TOP)/bin/intltool-merge
    -MONO_SIGNCODE ?= signcode
    -GPG_SIGN ?= gpg
    -GLIB_GENMARSHAL ?= $(GTK_BIN)/glib-genmarshal
    -GLIB_MKENUMS ?= $(GTK_BIN)/glib-mkenums
    -
    -PIDGIN_COMMON_RULES := $(PURPLE_TOP)/win32/rules.mak
    -PIDGIN_COMMON_TARGETS := $(PURPLE_TOP)/win32/targets.mak
    -MINGW_MAKEFILE := Makefile.mingw
    -MAKE_at := @
    -
    -USE_VV ?= 1
    -
    -ifeq "$(USE_VV)" "1"
    -VV_LIBS := \
    - -lgstreamer-0.10 \
    - -lgstvideo-0.10 \
    - -lgstinterfaces-0.10 \
    - -lfarstream-0.1
    -VV_INCLUDE_PATHS := \
    - -I$(GSTREAMER_TOP)/include/gstreamer-0.10 \
    - -I$(GSTREAMER_TOP)/include/farstream-0.1 \
    - -I$(LIBXML2_TOP)/include/libxml2
    -VV_LIB_PATHS := \
    - -L$(GSTREAMER_TOP)/lib
    -DEFINES += -DUSE_GSTREAMER -DUSE_VV
    -else
    -VV_LIBS :=
    -VV_INCLUDE_PATHS :=
    -VV_LIB_PATHS :=
    -endif
    -
    -INSTALL_PIXMAPS ?= 1
    -INSTALL_SSL_CERTIFICATES ?= 1
    --- a/libpurple/win32/libc_interface.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/libpurple/win32/libc_interface.c Thu Nov 23 22:30:26 2017 -0600
    @@ -33,6 +33,7 @@
    #include <glib.h>
    #include "debug.h"
    #include "libc_internal.h"
    +#include "util.h"
    #include <glib/gstdio.h>
    #include "util.h"
    --- a/libpurple/win32/rules.mak Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,17 +0,0 @@
    -# Rules on how to make object files from various sources
    -
    -%.o: %.c
    - $(CC) $(CFLAGS) $(DEFINES) $(INCLUDE_PATHS) -o $@ -c $<
    -
    -%.o: %.rc
    - @echo -e " GEN\t$@"
    - @$(WINDRES) -I$(PURPLE_TOP) -i $< -o $@
    -
    -%.desktop: %.desktop.in $(wildcard $(PIDGIN_TREE_TOP)/po/*.po)
    - LC_ALL=C $(PERL) $(INTLTOOL_MERGE) -d -u -c $(PIDGIN_TREE_TOP)/po/.intltool-merge-cache $(PIDGIN_TREE_TOP)/po $< $@
    -
    -%.html.h: %.html
    - @echo -e " GEN\t$@"
    - @echo "static const char $*_html[] = {" > $@
    - @sed -e 's/^[ ]\+//g' -e 's/[ ]\+/ /g' $< | xxd -i | sed -e 's/\(0x[0-9a-f][0-9a-f]\)$$/\1, 0x00/' >> $@
    - @echo "};" >> $@
    --- a/libpurple/win32/targets.mak Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,55 +0,0 @@
    -#
    -# targets.mak
    -#
    -# This file should be included at the end of all Makefile.mingw
    -# files for better handling of cross directory dependencies
    -#
    -
    -$(PIDGIN_CONFIG_H): $(PIDGIN_CONFIG_H).mingw $(PIDGIN_TREE_TOP)/configure.ac
    - @echo -e " GEN\t$@"
    - @sed -e 's/@VERSION@/$(PIDGIN_VERSION)/; s/@DISPLAY_VERSION@/$(DISPLAY_VERSION)/' $@.mingw > $@
    -
    -$(PURPLE_PURPLE_H): $(PURPLE_PURPLE_H).in
    - @echo -e " GEN\t$@"
    - @sed -e 's/@PLUGINS_DEFINE@/#define PURPLE_PLUGINS 1/' $@.in > $@
    -
    -$(PURPLE_VERSION_H): $(PURPLE_VERSION_H).in $(PIDGIN_TREE_TOP)/configure.ac
    - @echo -e " GEN\t$@"
    - @awk 'BEGIN {FS="[\\(\\)\\[\\]]"} \
    - /^m4_define..purple_major_version/ {system("sed -e s/@PURPLE_MAJOR_VERSION@/"$$5"/ $@.in > $@");} \
    - /^m4_define..purple_minor_version/ {system("sed -e s/@PURPLE_MINOR_VERSION@/"$$5"/ $@ > $@.tmp && mv $@.tmp $@");} \
    - /^m4_define..purple_micro_version/ {system("sed -e s/@PURPLE_MICRO_VERSION@/"$$5"/ $@ > $@.tmp && mv $@.tmp $@"); exit}' $(PIDGIN_TREE_TOP)/configure.ac
    -
    -$(PIDGIN_REVISION_RAW_TXT):
    - @echo -e " GEN\t$@"
    - @(hg --cwd $(PIDGIN_TREE_TOP) log -r . -T '{node}') 2>/dev/null >$@ \
    - || rm -f $@
    -
    -$(PIDGIN_REVISION_H): $(PIDGIN_REVISION_RAW_TXT)
    - @echo -e " GEN\t$@"
    - @if [ -f $< ]; then \
    - sed 's/^\(.\{1,\}\)$$/#define REVISION "\1"/' $< > $@; \
    - fi
    - @[ -f $@ ] || echo "#define REVISION \"unknown\"" > $@
    -
    -$(PURPLE_DLL) $(PURPLE_DLL).a: $(PURPLE_VERSION_H)
    - $(MAKE) -C $(PURPLE_TOP) -f $(MINGW_MAKEFILE) libpurple.dll
    -
    -$(PIDGIN_DLL) $(PIDGIN_DLL).a:
    - $(MAKE_at) $(MAKE) -C $(PIDGIN_TOP) -f $(MINGW_MAKEFILE) pidgin.dll
    -
    -$(PIDGIN_EXE):
    - $(MAKE) -C $(PIDGIN_TOP) -f $(MINGW_MAKEFILE) pidgin.exe
    -
    -# Installation Directories
    -$(PIDGIN_INSTALL_DIR):
    - mkdir -p $(PIDGIN_INSTALL_DIR)
    -
    -$(PIDGIN_INSTALL_PLUGINS_DIR):
    - mkdir -p $(PIDGIN_INSTALL_PLUGINS_DIR)
    -
    -$(PURPLE_INSTALL_PO_DIR):
    - mkdir -p $(PURPLE_INSTALL_PO_DIR)
    -
    -#$(PURPLE_INSTALL_PLUGINS_DIR):
    -# mkdir -p $(PURPLE_INSTALL_PLUGINS_DIR)
    --- a/m4macros/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,6 +0,0 @@
    -installed_m4=purple.m4
    -
    -EXTRA_DIST=$(installed_m4) as-ac-expand.m4
    -
    -m4datadir=$(datadir)/aclocal
    -m4data_DATA=$(installed_m4)
    --- a/m4macros/as-ac-expand.m4 Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,49 +0,0 @@
    -dnl as-ac-expand.m4 0.2.0 -*- autoconf -*-
    -dnl autostars m4 macro for expanding directories using configure's prefix
    -
    -dnl (C) 2003, 2004, 2005 Thomas Vander Stichele <thomas at apestaart dot org>
    -
    -dnl Copying and distribution of this file, with or without modification,
    -dnl are permitted in any medium without royalty provided the copyright
    -dnl notice and this notice are preserved.
    -
    -dnl AS_AC_EXPAND(VAR, CONFIGURE_VAR)
    -
    -dnl example:
    -dnl AS_AC_EXPAND(SYSCONFDIR, $sysconfdir)
    -dnl will set SYSCONFDIR to /usr/local/etc if prefix=/usr/local
    -
    -AC_DEFUN([AS_AC_EXPAND],
    -[
    - EXP_VAR=[$1]
    - FROM_VAR=[$2]
    -
    - dnl first expand prefix and exec_prefix if necessary
    - prefix_save=$prefix
    - exec_prefix_save=$exec_prefix
    -
    - dnl if no prefix given, then use /usr/local, the default prefix
    - if test "x$prefix" = "xNONE"; then
    - prefix="$ac_default_prefix"
    - fi
    - dnl if no exec_prefix given, then use prefix
    - if test "x$exec_prefix" = "xNONE"; then
    - exec_prefix=$prefix
    - fi
    -
    - full_var="$FROM_VAR"
    - dnl loop until it doesn't change anymore
    - while true; do
    - new_full_var="`eval echo $full_var`"
    - if test "x$new_full_var" = "x$full_var"; then break; fi
    - full_var=$new_full_var
    - done
    -
    - dnl clean up
    - full_var=$new_full_var
    - AC_SUBST([$1], "$full_var")
    -
    - dnl restore prefix and exec_prefix
    - prefix=$prefix_save
    - exec_prefix=$exec_prefix_save
    -])
    --- a/m4macros/glibtests.m4 Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,28 +0,0 @@
    -dnl GLIB_TESTS
    -dnl
    -
    -AC_DEFUN([GLIB_TESTS],
    -[
    - AC_ARG_ENABLE(installed-tests,
    - AS_HELP_STRING([--enable-installed-tests],
    - [Enable installation of some test cases]),
    - [case ${enableval} in
    - yes) ENABLE_INSTALLED_TESTS="1" ;;
    - no) ENABLE_INSTALLED_TESTS="" ;;
    - *) AC_MSG_ERROR([bad value ${enableval} for --enable-installed-tests]) ;;
    - esac])
    - AM_CONDITIONAL([ENABLE_INSTALLED_TESTS], test "$ENABLE_INSTALLED_TESTS" = "1")
    - AC_ARG_ENABLE(always-build-tests,
    - AS_HELP_STRING([--enable-always-build-tests],
    - [Enable always building tests during 'make all']),
    - [case ${enableval} in
    - yes) ENABLE_ALWAYS_BUILD_TESTS="1" ;;
    - no) ENABLE_ALWAYS_BUILD_TESTS="" ;;
    - *) AC_MSG_ERROR([bad value ${enableval} for --enable-always-build-tests]) ;;
    - esac])
    - AM_CONDITIONAL([ENABLE_ALWAYS_BUILD_TESTS], test "$ENABLE_ALWAYS_BUILD_TESTS" = "1")
    - if test "$ENABLE_INSTALLED_TESTS" = "1"; then
    - AC_SUBST(installed_test_metadir, [${datadir}/installed-tests/]AC_PACKAGE_NAME)
    - AC_SUBST(installed_testdir, [${libexecdir}/installed-tests/]AC_PACKAGE_NAME)
    - fi
    -])
    --- a/m4macros/introspection.m4 Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,96 +0,0 @@
    -dnl -*- mode: autoconf -*-
    -dnl Copyright 2009 Johan Dahlin
    -dnl
    -dnl This file is free software; the author(s) gives unlimited
    -dnl permission to copy and/or distribute it, with or without
    -dnl modifications, as long as this notice is preserved.
    -dnl
    -
    -# serial 1
    -
    -m4_define([_GOBJECT_INTROSPECTION_CHECK_INTERNAL],
    -[
    - AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first
    - AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first
    - AC_BEFORE([LT_INIT],[$0])dnl setup libtool first
    -
    - dnl enable/disable introspection
    - m4_if([$2], [require],
    - [dnl
    - enable_introspection=yes
    - ],[dnl
    - AC_ARG_ENABLE(introspection,
    - AS_HELP_STRING([--enable-introspection[=@<:@no/auto/yes@:>@]],
    - [Enable introspection for this build]),,
    - [enable_introspection=auto])
    - ])dnl
    -
    - AC_MSG_CHECKING([for gobject-introspection])
    -
    - dnl presence/version checking
    - AS_CASE([$enable_introspection],
    - [no], [dnl
    - found_introspection="no (disabled, use --enable-introspection to enable)"
    - ],dnl
    - [yes],[dnl
    - PKG_CHECK_EXISTS([gobject-introspection-1.0],,
    - AC_MSG_ERROR([gobject-introspection-1.0 is not installed]))
    - PKG_CHECK_EXISTS([gobject-introspection-1.0 >= $1],
    - found_introspection=yes,
    - AC_MSG_ERROR([You need to have gobject-introspection >= $1 installed to build AC_PACKAGE_NAME]))
    - ],dnl
    - [auto],[dnl
    - PKG_CHECK_EXISTS([gobject-introspection-1.0 >= $1], found_introspection=yes, found_introspection=no)
    - dnl Canonicalize enable_introspection
    - enable_introspection=$found_introspection
    - ],dnl
    - [dnl
    - AC_MSG_ERROR([invalid argument passed to --enable-introspection, should be one of @<:@no/auto/yes@:>@])
    - ])dnl
    -
    - AC_MSG_RESULT([$found_introspection])
    -
    - INTROSPECTION_SCANNER=
    - INTROSPECTION_COMPILER=
    - INTROSPECTION_GENERATE=
    - INTROSPECTION_GIRDIR=
    - INTROSPECTION_TYPELIBDIR=
    - if test "x$found_introspection" = "xyes"; then
    - INTROSPECTION_SCANNER=`$PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0`
    - INTROSPECTION_COMPILER=`$PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0`
    - INTROSPECTION_GENERATE=`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0`
    - INTROSPECTION_GIRDIR=`$PKG_CONFIG --variable=girdir gobject-introspection-1.0`
    - INTROSPECTION_TYPELIBDIR="$($PKG_CONFIG --variable=typelibdir gobject-introspection-1.0)"
    - INTROSPECTION_CFLAGS=`$PKG_CONFIG --cflags gobject-introspection-1.0`
    - INTROSPECTION_LIBS=`$PKG_CONFIG --libs gobject-introspection-1.0`
    - INTROSPECTION_MAKEFILE=`$PKG_CONFIG --variable=datadir gobject-introspection-1.0`/gobject-introspection-1.0/Makefile.introspection
    - fi
    - AC_SUBST(INTROSPECTION_SCANNER)
    - AC_SUBST(INTROSPECTION_COMPILER)
    - AC_SUBST(INTROSPECTION_GENERATE)
    - AC_SUBST(INTROSPECTION_GIRDIR)
    - AC_SUBST(INTROSPECTION_TYPELIBDIR)
    - AC_SUBST(INTROSPECTION_CFLAGS)
    - AC_SUBST(INTROSPECTION_LIBS)
    - AC_SUBST(INTROSPECTION_MAKEFILE)
    -
    - AM_CONDITIONAL(HAVE_INTROSPECTION, test "x$found_introspection" = "xyes")
    -])
    -
    -
    -dnl Usage:
    -dnl GOBJECT_INTROSPECTION_CHECK([minimum-g-i-version])
    -
    -AC_DEFUN([GOBJECT_INTROSPECTION_CHECK],
    -[
    - _GOBJECT_INTROSPECTION_CHECK_INTERNAL([$1])
    -])
    -
    -dnl Usage:
    -dnl GOBJECT_INTROSPECTION_REQUIRE([minimum-g-i-version])
    -
    -
    -AC_DEFUN([GOBJECT_INTROSPECTION_REQUIRE],
    -[
    - _GOBJECT_INTROSPECTION_CHECK_INTERNAL([$1], [require])
    -])
    --- a/m4macros/purple.m4 Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,102 +0,0 @@
    -dnl ###########################################################################
    -dnl # Configure paths for libpurple
    -dnl # Gary Kramlich 2005
    -dnl #
    -dnl # Based off of glib-2.0.m4 by Owen Taylor
    -dnl ###########################################################################
    -
    -dnl ###########################################################################
    -dnl # AM_PATH_PURPLE([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
    -dnl #
    -dnl # Test for purple and define PURPLE_CFLAGS, PURPLE_LIBS, PURPLE_DATADIR, and
    -dnl # PURPLE_LIBDIR
    -dnl ###########################################################################
    -AC_DEFUN([AM_PATH_PURPLE],
    -[dnl
    - AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
    -
    - no_purple=""
    -
    - if test x"$PKG_CONFIG" != x"no" ; then
    - if $PKG_CONFIG --atleast-pkgconfig-version 0.7 ; then
    - :
    - else
    - echo "*** pkg-config is too old; version 0.7 or newer is required."
    - no_purple="yes"
    - PKG_CONFIG="no"
    - fi
    - else
    - no_purple="yes"
    - fi
    -
    - min_version=ifelse([$1], ,2.0.0,$1)
    - found_version=""
    -
    - AC_MSG_CHECKING(for purple - version >= $min_version)
    -
    - if test x"$no_purple" = x"" ; then
    - PURPLE_DATADIR=`$PKG_CONFIG --variable=datadir purple`
    - PURPLE_LIBDIR=`$PKG_CONFIG --variable=libdir purple`
    -
    - PURPLE_CFLAGS=`$PKG_CONFIG --cflags purple`
    - PURPLE_LIBS=`$PKG_CONFIG --libs purple`
    -
    - purple_version=`$PKG_CONFIG --modversion purple`
    - purple_major_version=`echo $purple_version | cut -d. -f 1`
    - purple_minor_version=`echo $purple_version | cut -d. -f 2`
    -
    - dnl # stash the micro version in a temp variable. Then stash
    - dnl # the numeric for it in purple_micro_version and anything
    - dnl # else in purple_extra_version.
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f 3`
    - purple_micro_version=`echo $purple_micro_version_temp | sed 's/[[^0-9]]//g'`
    - purple_extra_version=`echo $purple_micro_version_temp | sed 's/[[0-9]]//g'`
    -
    - dnl # get the major, minor, and macro that the user gave us
    - min_major_version=`echo $min_version | cut -d. -f 1`
    - min_minor_version=`echo $min_version | cut -d. -f 2`
    - min_micro_version=`echo $min_version | cut -d. -f 3`
    -
    - dnl # check the users version against the version from pkg-config
    - if test $purple_major_version -eq $min_major_version -a \
    - $purple_minor_version -ge $min_minor_version -a \
    - $purple_micro_version -ge $min_micro_version
    - then
    - :
    - else
    - no_purple="yes"
    - found_version="$purple_major_version.$purple_minor_version.$purple_micro_version$purple_extra_version"
    - fi
    -
    - dnl # Do we want a compile test here?
    - fi
    -
    - if test x"$no_purple" = x"" ; then
    - AC_MSG_RESULT(yes (version $purple_major_version.$purple_minor_version.$purple_micro_version$purple_extra_version))
    - ifelse([$2], , :, [$2])
    - else
    - AC_MSG_RESULT(no)
    - if test x"$PKG_CONFIG" = x"no" ; then
    - echo "*** A new enough version of pkg-config was not found."
    - echo "*** See http://www.freedesktop.org/software/pkgconfig/"
    - fi
    -
    - if test x"found_version" != x"" ; then
    - echo "*** A new enough version of purple was not found."
    - echo "*** You have version $found_version"
    - echo "*** See https://pidgin.im/"
    - fi
    -
    - PURPLE_CFLAGS=""
    - PURPLE_LIBS=""
    - PURPLE_DATADIR=""
    - PURPLE_LIBDIR=""
    -
    - ifelse([$3], , :, [$3])
    - fi
    -
    - AC_SUBST(PURPLE_CFLAGS)
    - AC_SUBST(PURPLE_LIBS)
    - AC_SUBST(PURPLE_DATADIR)
    - AC_SUBST(PURPLE_LIBDIR)
    -])
    --- a/meson.build Thu Oct 05 21:24:11 2017 -0500
    +++ b/meson.build Thu Nov 23 22:30:26 2017 -0600
    @@ -70,7 +70,6 @@
    add_project_arguments('-DHAVE_CONFIG_H=1', language : 'c')
    conf = configuration_data()
    man_conf = configuration_data()
    -pkg_conf = configuration_data()
    version_conf = configuration_data()
    conf.set_quoted('PACKAGE', meson.project_name())
    @@ -107,17 +106,8 @@
    man_conf.set('VERSION', purple_display_version)
    man_conf.set('prefix', get_option('prefix'))
    -# This is used for pkg-config files. This probably can be removed and the
    -# builtin generator used instead once we drop the Autotools build.
    -pkg_conf.set('VERSION', purple_display_version)
    -pkg_conf.set('PURPLE_MAJOR_VERSION', purple_major_version)
    -pkg_conf.set('prefix', get_option('prefix'))
    -pkg_conf.set('exec_prefix', '${prefix}')
    -pkg_conf.set('libdir', join_paths('${exec_prefix}', get_option('libdir')))
    -pkg_conf.set('includedir', join_paths('${prefix}', get_option('includedir')))
    -pkg_conf.set('datarootdir', join_paths('${prefix}', get_option('datadir')))
    -pkg_conf.set('datadir', '${datarootdir}')
    -pkg_conf.set('sysconfdir', join_paths('${prefix}', get_option('sysconfdir')))
    +# Used for pkg-config files.
    +pkgconfig = import('pkgconfig')
    sedpath = find_program('sed')
    @@ -1002,6 +992,8 @@
    dependency('messaging-menu', version : '>= 12.10')
    ]
    conf.set('USES_MM_CHAT_SECTION', 'X-MessagingMenu-UsesChatSection=true')
    +else
    + conf.set('USES_MM_CHAT_SECTION', '')
    endif
    #######################################################################
    @@ -1117,11 +1109,12 @@
    if get_option('plugins')
    gplugin = dependency('gplugin', version : '>= 0.0.17')
    # GPLUGIN_REQ sets pkg-config requirements in the .pc file
    - pkg_conf.set('GPLUGIN_REQ', ', gplugin')
    + GPLUGIN_REQ = ['gplugin']
    enable_introspection = dependency('gobject-introspection-1.0',
    version : '>= 1.30.0', required : false).found()
    else
    gplugin = []
    + GPLUGIN_REQ = []
    enable_introspection = false
    endif
    --- a/mkmesonconf.py Thu Oct 05 21:24:11 2017 -0500
    +++ b/mkmesonconf.py Thu Nov 23 22:30:26 2017 -0600
    @@ -30,6 +30,7 @@
    import html
    import json
    import os
    +import shlex
    import subprocess
    import sys
    @@ -40,6 +41,8 @@
    print('Meson is too old; '
    'it does not set MESONINTROSPECT for postconf scripts.')
    sys.exit(1)
    +else:
    + introspect = shlex.split(introspect)
    try:
    build_root = os.environ['MESON_BUILD_ROOT']
    @@ -56,7 +59,7 @@
    return repr(obj)
    -conf = subprocess.check_output([introspect, '--buildoptions', build_root],
    +conf = subprocess.check_output(introspect + ['--buildoptions', build_root],
    universal_newlines=True)
    conf = json.loads(conf)
    --- a/pidgin/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,310 +0,0 @@
    -EXTRA_DIST = \
    - gtk3compat.h \
    - gtkdebug.html \
    - pidgin.gresource.xml \
    - Makefile.mingw \
    - data/im.pidgin.Pidgin.appdata.xml.in \
    - data/im.pidgin.Pidgin.desktop.in \
    - data/pidgin-3.pc.in \
    - data/pidgin-3-uninstalled.pc.in \
    - win32/MinimizeToTray.h \
    - win32/MinimizeToTray.c \
    - win32/pidgin_dll_rc.rc.in \
    - win32/pidgin_exe_rc.rc.in \
    - win32/prepare-workspace.sh \
    - win32/gtkdocklet-win32.c \
    - win32/gtkwin32dep.c \
    - win32/gtkwin32dep.h \
    - win32/resource.h \
    - win32/untar.c \
    - win32/untar.h \
    - win32/winpidgin.c \
    - win32/nsis/generate_gtk_zip.sh \
    - win32/nsis/pixmaps/pidgin-header.bmp \
    - win32/nsis/pixmaps/pidgin-intro.bmp \
    - win32/nsis/pixmaps/pidgin-install.ico \
    - win32/nsis/available.lst \
    - win32/nsis/pidgin-installer.nsi \
    - win32/nsis/pidgin-plugin.nsh \
    - win32/nsis/create_nsis_translations.pl \
    - win32/nsis/nsis_translations.desktop.in
    -
    -if ENABLE_GTK
    -
    -SUBDIRS = . pixmaps plugins themes
    -
    -# XXX: should this be lib_, or noinst_?
    -lib_LTLIBRARIES = libpidgin.la
    -bin_PROGRAMS = pidgin
    -
    -libpidgin_la_SOURCES = \
    - pidginstock.c \
    - gtkaccount.c \
    - gtkblist.c \
    - gtkblist-theme.c \
    - gtkblist-theme-loader.c \
    - gtkcellrendererexpander.c \
    - gtkcertmgr.c \
    - gtkconn.c \
    - gtkconv.c \
    - gtkconv-theme.c \
    - gtkconv-theme-loader.c \
    - gtkdebug.c \
    - gtkdialogs.c \
    - gtkdnd-hints.c \
    - gtkdocklet.c \
    - gtkicon-theme.c \
    - gtkicon-theme-loader.c \
    - gtkidle.c \
    - gtklog.c \
    - gtkmedia.c \
    - gtkmenutray.c \
    - gtknotify.c \
    - gtkplugin.c \
    - gtkpluginpref.c \
    - gtkpounce.c \
    - gtkprefs.c \
    - gtkprivacy.c \
    - gtkrequest.c \
    - gtkroomlist.c \
    - gtksavedstatuses.c \
    - gtkscrollbook.c \
    - gtksmiley-manager.c \
    - gtksmiley-theme.c \
    - gtksound.c \
    - gtkstatus-icon-theme.c \
    - gtkstatusbox.c \
    - gtkutils.c \
    - gtkwebview.c \
    - gtkwebviewtoolbar.c \
    - gtkwhiteboard.c \
    - gtkxfer.c \
    - libpidgin.c \
    - minidialog.c \
    - pidgin.gresource.c \
    - pidgintooltip.c
    -
    -libpidgin_la_headers = \
    - gtkaccount.h \
    - gtkblist.h \
    - gtkblist-theme.h \
    - gtkblist-theme-loader.h \
    - gtkcellrendererexpander.h \
    - gtkcertmgr.h \
    - gtkconn.h \
    - gtkconv.h \
    - gtkconvwin.h \
    - gtkconv-theme.h \
    - gtkconv-theme-loader.h \
    - gtkdebug.h \
    - gtkdialogs.h \
    - gtkdnd-hints.h \
    - gtkdocklet.h \
    - gtkicon-theme.h \
    - gtkicon-theme-loader.h \
    - gtkidle.h \
    - gtklog.h \
    - gtkmedia.h \
    - gtkmenutray.h \
    - gtknickcolors.h \
    - gtknotify.h \
    - gtkplugin.h \
    - gtkpluginpref.h \
    - gtkprefs.h \
    - gtkprivacy.h \
    - gtkpounce.h \
    - gtkrequest.h \
    - gtkroomlist.h \
    - gtksavedstatuses.h \
    - gtkscrollbook.h \
    - gtksmiley-manager.h \
    - gtksmiley-theme.h \
    - gtksound.h \
    - gtkstatus-icon-theme.h \
    - gtkstatusbox.h \
    - pidginstock.h \
    - gtkutils.h \
    - gtkwebview.h \
    - gtkwebviewtoolbar.h \
    - gtkwhiteboard.h \
    - gtkxfer.h \
    - minidialog.h \
    - pidgintooltip.h \
    - pidgin.h
    -
    -pidgin_SOURCES = \
    - pidgin.c
    -
    -noinst_HEADERS= gtkinternal.h
    -
    -if IS_WIN32
    -libpidgin_la_SOURCES += \
    - win32/gtkwin32dep.c \
    - win32/untar.c
    -
    -# Files that looks like obsolete (were used in Pidgin2):
    -# win32/gtkdocklet-win32.c
    -# win32/MinimizeToTray.c
    -# win32/MinimizeToTray.h
    -
    -pidgin_SOURCES += \
    - win32/winpidgin.c \
    - win32/pidgin_exe_rc.rc
    -
    -libpidgin_la_headers += \
    - win32/gtkwin32dep.h \
    - win32/resource.h \
    - win32/untar.h
    -
    -.rc.o: %.rc
    - $(AM_V_GEN)$(WINDRES) -I $(srcdir)/win32 -I $(srcdir) -i $< -o $@
    -
    -LIBPIDGIN_WIN32RES = win32/pidgin_dll_rc.o
    -LIBPIDGIN_WIN32RES_LDFLAGS = -Wl,$(LIBPIDGIN_WIN32RES)
    -endif
    -
    -libpidginincludedir=$(includedir)/pidgin
    -libpidgininclude_HEADERS = \
    - $(libpidgin_la_headers)
    -
    -libpidgin_la_builtheaders = pidgin.gresource.h
    -libpidgin_la_builtsources = pidgin.gresource.c
    -
    -BUILT_SOURCES = $(libpidgin_la_builtheaders) $(libpidgin_la_builtsources)
    -
    -CLEANFILES = pidgin.gresource.h pidgin.gresource.c
    -
    -%.gresource.h: %.gresource.xml
    - $(AM_V_GEN)$(GLIB_COMPILE_RESOURCES) --generate-header --target $@ --c-name $* --sourcedir $(srcdir) $<
    -
    -%.gresource.c: %.gresource.xml
    - $(AM_V_GEN)$(GLIB_COMPILE_RESOURCES) --generate-source --target $@ --c-name $* --sourcedir $(srcdir) $<
    -
    -pidgin.gresource.c: gtkdebug.html
    -pidgin.gresource.h: gtkdebug.html
    -gtkdebug.c: pidgin.gresource.h
    -
    -libpidgin_la_DEPENDENCIES = @LIBOBJS@ $(LIBPIDGIN_WIN32RES)
    -libpidgin_la_LDFLAGS = -export-dynamic -no-undefined \
    - -version-info $(PURPLE_LT_VERSION_INFO) $(LIBPIDGIN_WIN32RES_LDFLAGS)
    -libpidgin_la_LIBADD = \
    - @LIBOBJS@ \
    - $(ENCHANT_LIBS) \
    - $(GLIB_LIBS) \
    - $(GPLUGIN_LIBS) \
    - $(GCR_LIBS) \
    - $(DBUS_LIBS) \
    - $(GSTREAMER_LIBS) \
    - $(GSTVIDEO_LIBS) \
    - $(GSTINTERFACES_LIBS) \
    - $(INTLLIBS) \
    - $(LIBXML_LIBS) \
    - $(WEBKIT_LIBS) \
    - $(GTK_LIBS) \
    - $(X11_LIBS) \
    - $(INTROSPECTION_LIBS) \
    - $(top_builddir)/libpurple/libpurple.la
    -
    -pidgin_DEPENDENCIES = $(builddir)/libpidgin.la
    -pidgin_LDFLAGS = -export-dynamic
    -pidgin_LDADD = $(builddir)/libpidgin.la $(libpidgin_la_LIBADD)
    -
    -if IS_WIN32
    -libpidgin_la_LIBADD += -lwinmm
    -pidgin_LDFLAGS += -mwindows
    -endif
    -
    -AM_CPPFLAGS = \
    - -I$(top_builddir)/libpurple \
    - -I$(top_srcdir)/libpurple/ \
    - -I$(top_builddir) \
    - -I$(top_srcdir) \
    - $(ENCHANT_CFLAGS) \
    - $(GLIB_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(GCR_CFLAGS) \
    - $(GSTREAMER_CFLAGS) \
    - $(GSTVIDEO_CFLAGS) \
    - $(GSTINTERFACES_CFLAGS) \
    - $(DEBUG_CFLAGS) \
    - $(GTK_CFLAGS) \
    - $(X11_CFLAGS) \
    - $(DBUS_CFLAGS) \
    - $(LIBXML_CFLAGS) \
    - $(WEBKIT_CFLAGS) \
    - $(INTROSPECTION_CFLAGS)
    -
    -pkgconfigdir = $(libdir)/pkgconfig
    -pkgconfig_DATA = data/pidgin-3.pc
    -
    -if INSTALL_I18N
    -DESKTOP_FILE=data/im.pidgin.Pidgin.desktop
    -
    -appsdir = $(datadir)/applications
    -apps_in_files = data/im.pidgin.Pidgin.desktop.in
    -apps_DATA = $(apps_in_files:.desktop.in=.desktop)
    -
    -# silenced INTLTOOL_DESKTOP_RULE
    -%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po)
    - $(AM_V_GEN) LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ > /dev/null
    -
    -appdatadir = $(datarootdir)/metainfo
    -appdata_DATA = $(appdata_in_files:.xml.in=.xml)
    -appdata_in_files = data/im.pidgin.Pidgin.appdata.xml.in
    -
    -@INTLTOOL_XML_RULE@
    -
    -endif # INSTALL_I18N
    -
    -CLEANFILES += $(appdata_DATA)
    -DISTCLEANFILES = $(DESKTOP_FILE)
    -
    --include $(INTROSPECTION_MAKEFILE)
    -INTROSPECTION_GIRS =
    -INTROSPECTION_SCANNER_ARGS = --warn-all --add-include-path=$(top_builddir)/libpurple --add-include-path=$(prefix)/share/gir-1.0 --pkg=purple-$(PURPLE_MAJOR_VERSION) --pkg-export=pidgin-$(PURPLE_MAJOR_VERSION)
    -INTROSPECTION_COMPILER_ARGS = --includedir=$(top_builddir)/libpurple --includedir=$(prefix)/share/gir-1.0
    -
    -if HAVE_INTROSPECTION
    -introspection_sources = $(libpidgininclude_HEADERS)
    -
    -Pidgin-$(PURPLE_MAJOR_VERSION).$(PURPLE_MINOR_VERSION).gir: $(builddir)/libpidgin.la
    -Pidgin_3_0_gir_INCLUDES = GObject-2.0 Gtk-3.0 Purple-$(PURPLE_MAJOR_VERSION).$(PURPLE_MINOR_VERSION)
    -Pidgin_3_0_gir_CFLAGS = \
    - $(INCLUDES) \
    - -DDATADIR=\"$(datadir)\" \
    - -DLIBDIR=\"$(libdir)/pidgin/\" \
    - -DLOCALEDIR=\"$(datadir)/locale\" \
    - -DSYSCONFDIR=\"$(sysconfdir)\" \
    - -I$(top_builddir)/libpurple \
    - -I$(top_srcdir)/libpurple/ \
    - -I$(top_builddir) \
    - -I$(top_srcdir) \
    - $(GLIB_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(GCR_CFLAGS) \
    - $(GSTREAMER_CFLAGS) \
    - $(GSTVIDEO_CFLAGS) \
    - $(GSTINTERFACES_CFLAGS) \
    - $(GTK_CFLAGS) \
    - $(X11_CFLAGS) \
    - $(DBUS_CFLAGS) \
    - $(GTKSPELL_CFLAGS) \
    - $(LIBXML_CFLAGS) \
    - $(WEBKIT_CFLAGS) \
    - $(INTROSPECTION_CFLAGS)
    -
    -Pidgin_3_0_gir_LIBS = $(builddir)/libpidgin.la
    -Pidgin_3_0_gir_FILES = $(introspection_sources)
    -INTROSPECTION_GIRS += Pidgin-$(PURPLE_MAJOR_VERSION).$(PURPLE_MINOR_VERSION).gir
    -INTROSPECTION_SCANNER_ENV = PKG_CONFIG_PATH=$(top_builddir)/libpurple/data/
    -
    -girdir = $(prefix)/share/gir-1.0 $(INTROSPECTION_GIRDIR)
    -gir_DATA = $(INTROSPECTION_GIRS)
    -
    -typelibdir = $(prefix)/share/gir-1.0 $(INTROSPECTION_TYPELIBDIR)
    -typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib)
    -
    -CLEANFILES += $(gir_DATA) $(typelib_DATA)
    -endif
    -
    -endif # ENABLE_GTK
    --- a/pidgin/Makefile.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,198 +0,0 @@
    -#
    -# Makefile.mingw
    -#
    -# Description: Makefile for win32 (mingw) version of Pidgin
    -#
    -
    -PIDGIN_TREE_TOP := ..
    -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
    -
    -DEFINES := $(subst -DWIN32_LEAN_AND_MEAN,,$(DEFINES))
    -
    -##
    -## VARIABLE DEFINITIONS
    -##
    -EXE_TARGET := pidgin
    -PIDGIN_TARGET := pidgin
    -EXE_NAME := $(EXE_TARGET).exe
    -
    -WINAPP := -mwindows
    -
    -LDFLAGS := $(WINAPP) $(LD_HARDENING_OPTIONS) -Wl,--enable-auto-import -lssp
    -
    -##
    -## INCLUDE PATHS
    -##
    -PURPLE_INCLUDE_PATHS = \
    - -I$(PURPLE_TOP) \
    - -I$(PURPLE_TOP)/win32 \
    - -I$(PIDGIN_TREE_TOP) \
    - -I$(GTK_TOP)/include \
    - -I$(GTK_TOP)/include/glib-2.0 \
    - -I$(GTK_TOP)/lib/glib-2.0/include
    -
    -INCLUDE_PATHS += \
    - $(PURPLE_INCLUDE_PATHS) \
    - -I$(PIDGIN_TOP) \
    - -I$(PIDGIN_TOP)/win32 \
    - $(VV_INCLUDE_PATHS) \
    - -I$(GTK_TOP)/include/gtk-2.0 \
    - -I$(GTK_TOP)/include/pango-1.0 \
    - -I$(GTK_TOP)/include/atk-1.0 \
    - -I$(GTK_TOP)/include/cairo \
    - -I$(GTK_TOP)/include/gdk-pixbuf-2.0 \
    - -I$(GTK_TOP)/lib/gtk-2.0/include \
    - -I$(LIBSOUP_TOP)/include/libsoup-2.4 \
    - -I$(LIBGADU_TOP)/include \
    - -I$(WEBKITGTK_TOP)/include/webkitgtk-1.0
    -
    -LIB_PATHS += -L$(GTK_TOP)/lib \
    - -L$(WEBKITGTK_TOP)/lib \
    - -L$(LIBGADU_TOP)/lib \
    - -L$(PURPLE_TOP) \
    - -L$(PIDGIN_TOP) \
    - $(VV_LIB_PATHS)
    -
    -##
    -## SOURCES, OBJECTS
    -##
    -PIDGIN_C_SRC = \
    - gtkaccount.c \
    - gtkblist-theme-loader.c \
    - gtkblist-theme.c \
    - gtkblist.c \
    - gtkcellrendererexpander.c \
    - gtkcertmgr.c \
    - gtkconn.c \
    - gtkconv.c \
    - gtkconv-theme.c \
    - gtkconv-theme-loader.c \
    - gtkdebug.c \
    - gtkdialogs.c \
    - gtkdnd-hints.c \
    - gtkdocklet.c \
    - gtkicon-theme-loader.c \
    - gtkicon-theme.c \
    - gtkidle.c \
    - gtklog.c \
    - gtkmedia.c \
    - gtkmenutray.c \
    - gtknotify.c \
    - gtkplugin.c \
    - gtkpluginpref.c \
    - gtkpounce.c \
    - gtkprefs.c \
    - gtkprivacy.c \
    - gtkrequest.c \
    - gtkroomlist.c \
    - gtksavedstatuses.c \
    - gtkscrollbook.c \
    - gtksmiley-manager.c \
    - gtksmiley-theme.c \
    - gtksound.c \
    - gtkstatus-icon-theme.c \
    - gtkstatusbox.c \
    - gtkutils.c \
    - gtkwebview.c \
    - gtkwebviewtoolbar.c \
    - gtkwhiteboard.c \
    - gtkxfer.c \
    - libpidgin.c \
    - minidialog.c \
    - pidgin.c \
    - pidginstock.c \
    - pidgintooltip.c \
    - win32/gtkwin32dep.c \
    - win32/untar.c
    -
    -PIDGIN_RC_SRC = win32/pidgin_dll_rc.rc
    -PIDGIN_OBJECTS = $(PIDGIN_C_SRC:%.c=%.o) $(PIDGIN_RC_SRC:%.rc=%.o)
    -
    -EXE_RC_SRC = win32/pidgin_exe_rc.rc
    -EXE_C_SRC = win32/winpidgin.c
    -EXE_OBJECTS = $(EXE_C_SRC:%.c=%.o) $(EXE_RC_SRC:%.rc=%.o)
    -
    -##
    -## LIBRARIES
    -##
    -
    -PIDGIN_LIBS = \
    - -lintl \
    - -lglib-2.0 \
    - -lgobject-2.0 \
    - -lgthread-2.0 \
    - -lpurple \
    - -lz \
    - -lgtk-win32-2.0 \
    - -latk-1.0 \
    - -lcairo \
    - -lpango-1.0 \
    - -lgdk-win32-2.0 \
    - -lgdk_pixbuf-2.0 \
    - -lgdi32 \
    - -lgadu \
    - -lwinmm \
    - $(VV_LIBS) \
    - -lwebkitgtk-1.0
    -
    -include $(PIDGIN_COMMON_RULES)
    -
    -##
    -## TARGET DEFINITIONS
    -##
    -.PHONY: all install install_shallow clean
    -
    -all: $(EXE_TARGET).exe $(PIDGIN_TARGET).dll
    - $(MAKE_at) $(MAKE) -C $(PIDGIN_PLUGINS_TOP) -f $(MINGW_MAKEFILE)
    -
    -gtkdialogs.c: $(PIDGIN_REVISION_H)
    -
    -win32/pidgin_exe_rc.rc: win32/pidgin_exe_rc.rc.in $(PIDGIN_TREE_TOP)/VERSION
    - @echo -e " GEN\t$@"
    - @sed -e 's/@PURPLE_VERSION@/$(PIDGIN_VERSION)/g' \
    - -e 's/@PURPLE_MAJOR_VERSION@/$(PURPLE_MAJOR_VERSION)/g' \
    - -e 's/@PURPLE_MINOR_VERSION@/$(PURPLE_MINOR_VERSION)/g' \
    - -e 's/@PURPLE_MICRO_VERSION@/$(PURPLE_MICRO_VERSION)/g' \
    - -e 's/@PURPLE_API_VERSION@/$(PURPLE_API_VERSION)/g' \
    - $@.in > $@
    -
    -install_shallow: $(PIDGIN_INSTALL_DIR) $(EXE_TARGET).exe $(PIDGIN_TARGET).dll
    - cp $(EXE_TARGET).exe $(PIDGIN_TARGET).dll $(PIDGIN_INSTALL_DIR)
    - mkdir -p "$(PIDGIN_INSTALL_DIR)/theme"
    - cp -r themes/* "$(PIDGIN_INSTALL_DIR)/theme/"
    - chmod -R 777 "$(PIDGIN_INSTALL_DIR)/theme/"
    -
    -install: install_shallow all
    - $(MAKE_at) $(MAKE) -C $(PIDGIN_PLUGINS_TOP) -f $(MINGW_MAKEFILE) install
    - $(MAKE_at) $(MAKE) -C $(PIDGIN_PIXMAPS_TOP) -f $(MINGW_MAKEFILE) install
    -
    -win32/pidgin_dll_rc.rc: win32/pidgin_dll_rc.rc.in $(PIDGIN_TREE_TOP)/VERSION
    - @echo -e " GEN\t$@"
    - @sed -e 's/@PURPLE_VERSION@/$(PIDGIN_VERSION)/g' \
    - -e 's/@PURPLE_MAJOR_VERSION@/$(PURPLE_MAJOR_VERSION)/g' \
    - -e 's/@PURPLE_MINOR_VERSION@/$(PURPLE_MINOR_VERSION)/g' \
    - -e 's/@PURPLE_MICRO_VERSION@/$(PURPLE_MICRO_VERSION)/g' \
    - -e 's/@PURPLE_API_VERSION@/$(PURPLE_API_VERSION)/g' \
    - $@.in > $@
    -
    -$(EXE_OBJECTS) $(PIDGIN_OBJECTS): $(PIDGIN_CONFIG_H)
    -
    -gtkdebug.c: gtkdebug.html.h
    -
    -$(PIDGIN_TARGET).dll $(PIDGIN_TARGET).dll.a: $(PURPLE_DLL).a $(PIDGIN_OBJECTS)
    - $(CC) -shared $(PIDGIN_OBJECTS) $(LIB_PATHS) $(PIDGIN_LIBS) $(DLL_LD_FLAGS) -Wl,--output-def,$(PIDGIN_TARGET).def,--out-implib,$(PIDGIN_TARGET).dll.a -o $(PIDGIN_TARGET).dll
    -
    -$(EXE_TARGET).exe: $(PIDGIN_CONFIG_H) $(PIDGIN_DLL).a $(EXE_OBJECTS) $(PIDGIN_TARGET).dll
    - $(CC) $(EXE_OBJECTS) $(LDFLAGS) -o $(EXE_TARGET).exe
    -
    -##
    -## CLEAN RULES
    -##
    -clean:
    - $(MAKE_at) $(MAKE) -C $(PIDGIN_PLUGINS_TOP) -f $(MINGW_MAKEFILE) clean
    - $(MAKE_at) $(MAKE) -C $(PIDGIN_PIXMAPS_TOP) -f $(MINGW_MAKEFILE) clean
    - rm -f $(PIDGIN_OBJECTS) $(PIDGIN_RC_SRC) $(EXE_OBJECTS) $(EXE_RC_SRC)
    - rm -f $(PIDGIN_TARGET).dll $(PIDGIN_TARGET).dll.a $(PIDGIN_TARGET).def
    - rm -f $(EXE_TARGET).exe
    -
    -include $(PIDGIN_COMMON_TARGETS)
    --- /dev/null Thu Jan 01 00:00:00 1970 +0000
    +++ b/pidgin/about.html Thu Nov 23 22:30:26 2017 -0600
    @@ -0,0 +1,22 @@
    +<h2>Pidgin</h2>
    +
    +<p>Pidgin is a messaging client based on libpurple which is capable of connecting to multiple messaging services at once. Pidgin is written in C using GTK+. Pidgin is released, and may be modified and redistributed, under the terms of the GPL version 2 (or later). A copy of the GPL is distributed with Pidgin. Pidgin is copyrighted by its contributors, a list of whom is also distributed with Pidgin. There is no warranty for Pidgin.</p>
    +
    +<h3>Helpful Resources</h3>
    +
    +<ul>
    +<li><a href="https://pidgin.im">Website</a></li>
    +<li><a href="https://developer.pidgin.im/wiki/FAQ">Frequently Asked Questions</a></li>
    +<li>IRC Channel: #pidgin on irc.freenode.net</li>
    +<li>XMPP MUC: devel@conference.pidgin.im</li>
    +</ul>
    +
    +<p><strong>Help for Oracle Employees</strong> is available from your normal internal helpdesk or IT department. The Pidgin developer and user communities cannot assist you in the configuration or use of Pidgin within Oracle, as we know nothing of Oracle's infrastructure.</p>
    +
    +<p><strong>Help from other Pidgin users</strong> is available by e-mailing <a href="mailto:support@pidgin.im">support@pidgin.im</a>.</p>
    +
    +<p>This is a <strong>public</strong> mailing list with a <strong>public</strong> <a href="https://pidgin.im/pipermail/support/">archive</a>.</p>
    +
    +<p>We can't help with third-party protocols or plugins, but you may be able to find support via the <a href="https://developer.pidgin.im/wiki/ThirdPartyPlugins">ThirdPartyPlugins WIKI Page</a>.</p>
    +
    +<p>The list's primary language is English. You are welcome to post in another language, but the responses may be less helpful.</p>
    --- /dev/null Thu Jan 01 00:00:00 1970 +0000
    +++ b/pidgin/about.md Thu Nov 23 22:30:26 2017 -0600
    @@ -0,0 +1,20 @@
    +## Pidgin
    +
    +Pidgin is a messaging client based on libpurple which is capable of connecting to multiple messaging services at once. Pidgin is written in C using GTK+. Pidgin is released, and may be modified and redistributed, under the terms of the GPL version 2 (or later). A copy of the GPL is distributed with Pidgin. Pidgin is copyrighted by its contributors, a list of whom is also distributed with Pidgin. There is no warranty for Pidgin.
    +
    +### Helpful Resources
    +
    + * [Website](https://pidgin.im)
    + * [Frequently Asked Questions](https://developer.pidgin.im/wiki/FAQ)
    + * IRC Channel: #pidgin on irc.freenode.net
    + * XMPP MUC: devel@conference.pidgin.im
    +
    +**Help for Oracle Employees** is available from your normal internal helpdesk or IT department. The Pidgin developer and user communities cannot assist you in the configuration or use of Pidgin within Oracle, as we know nothing of Oracle's infrastructure.
    +
    +**Help from other Pidgin users** is available by e-mailing [support@pidgin.im](mailto:support@pidgin.im).
    +
    +This is a **public** mailing list with a **public** [archive](https://pidgin.im/pipermail/support/).
    +
    +We can't help with third-party protocols or plugins, but you may be able to find support via the [ThirdPartyPlugins WIKI Page](https://developer.pidgin.im/wiki/ThirdPartyPlugins).
    +
    +The list's primary language is English. You are welcome to post in another language, but the responses may be less helpful.
    --- /dev/null Thu Jan 01 00:00:00 1970 +0000
    +++ b/pidgin/about.ui Thu Nov 23 22:30:26 2017 -0600
    @@ -0,0 +1,279 @@
    +<?xml version="1.0" encoding="UTF-8"?>
    +<!-- Generated with glade 3.20.0 -->
    +<interface>
    + <requires lib="gtk+" version="3.10"/>
    + <object class="GtkTreeStore" id="build_info_store">
    + <columns>
    + <!-- column-name title -->
    + <column type="gchararray"/>
    + <!-- column-name value -->
    + <column type="gchararray"/>
    + </columns>
    + </object>
    + <object class="GtkTreeStore" id="developers_store">
    + <columns>
    + <!-- column-name markup -->
    + <column type="gchararray"/>
    + <!-- column-name align -->
    + <column type="gfloat"/>
    + </columns>
    + </object>
    + <object class="GtkTreeStore" id="translators_store">
    + <columns>
    + <!-- column-name markup -->
    + <column type="gchararray"/>
    + <!-- column-name align -->
    + <column type="gfloat"/>
    + </columns>
    + </object>
    + <template class="PidginAboutDialog" parent="GtkDialog">
    + <property name="can_focus">False</property>
    + <property name="border_width">5</property>
    + <property name="resizable">False</property>
    + <property name="window_position">center</property>
    + <property name="type_hint">dialog</property>
    + <child internal-child="vbox">
    + <object class="GtkBox">
    + <property name="can_focus">False</property>
    + <property name="orientation">vertical</property>
    + <property name="spacing">2</property>
    + <child internal-child="action_area">
    + <object class="GtkButtonBox">
    + <property name="can_focus">False</property>
    + <property name="layout_style">spread</property>
    + <child>
    + <object class="GtkStackSwitcher" id="switcher">
    + <property name="visible">True</property>
    + <property name="can_focus">False</property>
    + <property name="stack">stack</property>
    + </object>
    + <packing>
    + <property name="expand">True</property>
    + <property name="fill">True</property>
    + <property name="position">0</property>
    + </packing>
    + </child>
    + <child>
    + <object class="GtkButton" id="close_button">
    + <property name="label" translatable="yes">Close</property>
    + <property name="visible">True</property>
    + <property name="can_focus">True</property>
    + <property name="receives_default">True</property>
    + </object>
    + <packing>
    + <property name="expand">True</property>
    + <property name="fill">True</property>
    + <property name="position">1</property>
    + </packing>
    + </child>
    + </object>
    + <packing>
    + <property name="expand">False</property>
    + <property name="fill">False</property>
    + <property name="position">0</property>
    + </packing>
    + </child>
    + <child>
    + <object class="GtkBox">
    + <property name="visible">True</property>
    + <property name="can_focus">False</property>
    + <property name="border_width">12</property>
    + <property name="orientation">vertical</property>
    + <property name="spacing">5</property>
    + <child>
    + <object class="GtkEventBox" id="event-box">
    + <property name="visible">True</property>
    + <property name="can_focus">False</property>
    + <property name="above_child">True</property>
    + <child>
    + <object class="GtkImage" id="logo">
    + <property name="visible">True</property>
    + <property name="can_focus">False</property>
    + <property name="resource">/im/pidgin/Pidgin/logo.png</property>
    + <property name="icon_size">6</property>
    + </object>
    + </child>
    + </object>
    + <packing>
    + <property name="expand">True</property>
    + <property name="fill">True</property>
    + <property name="position">0</property>
    + </packing>
    + </child>
    + <child>
    + <object class="GtkLabel" id="application_name">
    + <property name="visible">True</property>
    + <property name="can_focus">False</property>
    + <property name="label" translatable="yes">Pidgin</property>
    + <property name="justify">center</property>
    + <property name="selectable">True</property>
    + <attributes>
    + <attribute name="weight" value="bold"/>
    + </attributes>
    + </object>
    + <packing>
    + <property name="expand">False</property>
    + <property name="fill">True</property>
    + <property name="position">1</property>
    + </packing>
    + </child>
    + <child>
    + <object class="GtkStack" id="stack">
    + <property name="width_request">400</property>
    + <property name="height_request">150</property>
    + <property name="visible">True</property>
    + <property name="can_focus">False</property>
    + <property name="margin_bottom">2</property>
    + <property name="transition_type">slide-up</property>
    + <child>
    + <object class="GtkScrolledWindow" id="main_scrolled_window">
    + <property name="visible">True</property>
    + <property name="can_focus">True</property>
    + <property name="hscrollbar_policy">never</property>
    + <property name="shadow_type">in</property>
    + <child>
    + <placeholder/>
    + </child>
    + </object>
    + <packing>
    + <property name="name">main</property>
    + <property name="title" translatable="yes">General</property>
    + </packing>
    + </child>
    + <child>
    + <object class="GtkScrolledWindow" id="developers_page">
    + <property name="visible">True</property>
    + <property name="can_focus">True</property>
    + <property name="hscrollbar_policy">never</property>
    + <property name="shadow_type">in</property>
    + <child>
    + <object class="GtkTreeView" id="developers_treeview">
    + <property name="visible">True</property>
    + <property name="can_focus">True</property>
    + <property name="model">developers_store</property>
    + <property name="headers_visible">False</property>
    + <property name="show_expanders">False</property>
    + <child internal-child="selection">
    + <object class="GtkTreeSelection"/>
    + </child>
    + <child>
    + <object class="GtkTreeViewColumn" id="developers_column">
    + <property name="resizable">True</property>
    + <property name="sizing">autosize</property>
    + <child>
    + <object class="GtkCellRendererText" id="developers_cell_renderer"/>
    + <attributes>
    + <attribute name="xalign">1</attribute>
    + <attribute name="markup">0</attribute>
    + </attributes>
    + </child>
    + </object>
    + </child>
    + </object>
    + </child>
    + </object>
    + <packing>
    + <property name="name">developers</property>
    + <property name="title" translatable="yes">Developers</property>
    + <property name="position">1</property>
    + </packing>
    + </child>
    + <child>
    + <object class="GtkScrolledWindow" id="translators_page">
    + <property name="visible">True</property>
    + <property name="can_focus">True</property>
    + <property name="shadow_type">in</property>
    + <child>
    + <object class="GtkTreeView" id="translators_treeview">
    + <property name="visible">True</property>
    + <property name="can_focus">True</property>
    + <property name="model">translators_store</property>
    + <property name="headers_visible">False</property>
    + <property name="show_expanders">False</property>
    + <child internal-child="selection">
    + <object class="GtkTreeSelection"/>
    + </child>
    + <child>
    + <object class="GtkTreeViewColumn" id="translators_column">
    + <child>
    + <object class="GtkCellRendererText" id="translators_cell_renderer"/>
    + <attributes>
    + <attribute name="xalign">1</attribute>
    + <attribute name="markup">0</attribute>
    + </attributes>
    + </child>
    + </object>
    + </child>
    + </object>
    + </child>
    + </object>
    + <packing>
    + <property name="name">translators</property>
    + <property name="title" translatable="yes">Translators</property>
    + <property name="position">2</property>
    + </packing>
    + </child>
    + <child>
    + <object class="GtkScrolledWindow" id="build_info_page">
    + <property name="visible">True</property>
    + <property name="can_focus">True</property>
    + <property name="hscrollbar_policy">never</property>
    + <property name="shadow_type">in</property>
    + <child>
    + <object class="GtkTreeView" id="build_info_treeview">
    + <property name="visible">True</property>
    + <property name="can_focus">True</property>
    + <property name="model">build_info_store</property>
    + <property name="headers_visible">False</property>
    + <property name="show_expanders">False</property>
    + <child internal-child="selection">
    + <object class="GtkTreeSelection"/>
    + </child>
    + <child>
    + <object class="GtkTreeViewColumn">
    + <child>
    + <object class="GtkCellRendererText"/>
    + <attributes>
    + <attribute name="markup">0</attribute>
    + </attributes>
    + </child>
    + </object>
    + </child>
    + <child>
    + <object class="GtkTreeViewColumn">
    + <child>
    + <object class="GtkCellRendererText"/>
    + <attributes>
    + <attribute name="sensitive">10</attribute>
    + <attribute name="markup">1</attribute>
    + </attributes>
    + </child>
    + </object>
    + </child>
    + </object>
    + </child>
    + </object>
    + <packing>
    + <property name="name">build-info</property>
    + <property name="title" translatable="yes">Build Information</property>
    + <property name="position">3</property>
    + </packing>
    + </child>
    + </object>
    + <packing>
    + <property name="expand">True</property>
    + <property name="fill">True</property>
    + <property name="position">2</property>
    + </packing>
    + </child>
    + </object>
    + <packing>
    + <property name="expand">True</property>
    + <property name="fill">True</property>
    + <property name="position">1</property>
    + </packing>
    + </child>
    + </object>
    + </child>
    + </template>
    +</interface>
    --- /dev/null Thu Jan 01 00:00:00 1970 +0000
    +++ b/pidgin/credits.json Thu Nov 23 22:30:26 2017 -0600
    @@ -0,0 +1,736 @@
    +{
    + "developers": [{
    + "title": "Developers",
    + "people": [
    + "Daniel 'datallah' Atallah",
    + "Ethan 'Paco-Paco' Blanton",
    + "Gary 'grim' Kramlich",
    + "Richard 'rlaager' Laager",
    + "Etan 'deryni' Reisner",
    + "Michael 'Maiku' Ruprecht",
    + "Elliott 'QuLogic' Sales de Andrade",
    + "Kevin 'SimGuy' Stange",
    + "Tomasz Wasilczyk",
    +
    + "Paul 'darkrain42' Aurich (Retired)",
    + "John 'rekkanoryo' Bailey (Retired)",
    + "Herman Bloggs (Retired)",
    + "Thomas Butter (Retired)",
    + "Ka-Hing Cheung (Retired)",
    + "Sadrul Habib Chowdhury (Retired)",
    + "Mark 'KingAnt' Doliner (Retired)",
    + "Jim Duchek (Retired)",
    + "Sean Egan (Retired)",
    + "Rob Flynn (Retired)",
    + "Adam Fritzler (Retired)",
    + "Christian 'ChipX86' Hammond (Retired)",
    + "Casey Harkins (Retired)",
    + "Ivan Komarov (Retired)",
    + "Syd Logan (Retired)",
    + "Marcus 'malu' Lundblad (Retired)",
    + "Sulabh 'sulabh_m' Mahajan (Retired)",
    + "Richard 'wabs' Nelson (Retired)",
    + "Christopher 'siege' O'Brien (Retired)",
    + "Bartosz Oler (Retired)",
    + "Tim 'marv' Rigenbach (Retired)",
    + "Luke 'LSchiere' Schierer (Retired)",
    + "Megan 'Cae' Schneider (Retired)",
    + "Evan Schoenberg (Retired)",
    + "Jim Seymour (Retired)",
    + "Mark Spencer (Retired)",
    + "Will 'resiak' Thompson (Retired)",
    + "Stu 'nosnilmot' Tomlinson (Retired)",
    + "Jorge 'Masca' Villaseñor (Retired)",
    + "Nathan 'faceprint' Walp (Retired)",
    + "Eric Warmenhoven (Retired)"
    + ]
    + }, {
    + "title": "Crazy Patch Writers",
    + "people": [
    + "Jakub 'haakon' Adam",
    + "Eion Robb",
    +
    + "Felipe 'shx' Contreras (Retired)",
    + "Decklin Foster (Retired)",
    + "Krzysztof Klinikowski (Retired)",
    + "Peter 'Bleeter' Lawler (Retired)",
    + "Robert 'Robot101' McQueen (Retired)",
    + "Benjamin Miller (Retired)",
    + "Dennis 'EvilDennisR' Ristuccia (Retired)",
    + "Peter 'Fmoo' Ruibal (Retired)",
    + "Gabriel 'Nix' Schulhof (Retired)",
    + "Ankit Vani (Retired)"
    + ]
    + }, {
    + "title": "Artists",
    + "people": [
    + "Hylke Bons"
    + ]
    + }, {
    + "title": "Google Summer of Code 2015",
    + "people": [
    + "Abel Serrano Juste",
    + "Igor Gajowiak",
    + "James Geboski",
    + "Koosha Khajehmoogahi",
    + "Michael McConville",
    + "Nakul Gulati"
    + ]
    + }, {
    + "title": "Google Summer of Code 2013",
    + "people": [
    + "Ashish Gupta",
    + "Bhaskar Kandiyal",
    + "Phil Hannent",
    + "Ankit Vani"
    + ]
    + }, {
    + "title": "Google Summer of Code 2012",
    + "people": [
    + "Michael Zangl",
    + "Nikhil Bafna",
    + "Sanket Agarwal",
    + "Tomasz Wasilczyk"
    + ]
    + }, {
    + "title": "Google Summer of Code 2010",
    + "people": [
    + "Ivan Komarov",
    + "Adam Fowler",
    + "Gilles Bedel",
    + "Jorge Villaseñor Salinas"
    + ]
    + }, {
    + "title": "Google Summer of Code 2009",
    + "people": [
    + "Felix Kerekes",
    + "Wade Fagen",
    + "Sulabh Mahajan",
    + "Eric Polino",
    + "Gregor Dick",
    + "Jan Kaluza",
    + "Arnold Noronha"
    + ]
    + }, {
    + "title": "Google Summer of Code 2008",
    + "people": [
    + "Mark Schneider",
    + "Justin Rodriguez",
    + "Vivien Bernet-Rollande",
    + "Sulabh Mahajan",
    + "Mike Ruprecht",
    + "Tobias Markmann"
    + ]
    + }, {
    + "title": "Google Summer of Code 2007",
    + "people": [
    + "Eion Coffey",
    + "Jeffery Connelly",
    + "Michael Shkutkov",
    + "William Ehlhardt",
    + "Eric Polino",
    + "Prekshu Ajmera",
    + "Carlos Silva",
    + "Will Thompson"
    + ]
    + }, {
    + "title": "Google Summer of Code 2006",
    + "people": [
    + "Sadrul Habib Chowdhury",
    + "Ma Yuan",
    + "Geoffrey Foster",
    + "Brian Chu",
    + "Mark Huetsch",
    + "Aaron Sheldon"
    + ]
    + }, {
    + "title": "Google Summer of Code 2005",
    + "people": [
    + "Adam Warrington",
    + "Bartosz Oler",
    + "Christian Muise",
    + "Jonathan Clark",
    + "Juanjo Molinero Horno",
    + "Piotr Zielinski",
    + "Thomas Butter"
    + ]
    + }],
    + "languages": [{
    + "title": "Afrikaans (af)",
    + "people": [
    + "Samuel Murray",
    + "Friedel Wolff"
    + ]
    + }, {
    + "title": "Amharic (am)",
    + "people": [
    + "Daniel Yacob (Retired)"
    + ]
    + }, {
    + "title": "Arabic (ar)",
    + "people": [
    + "Khaled Hosny",
    + "Mohamed Magdy (Retired)"
    + ]
    + }, {
    + "title": "Assamese (as)",
    + "people": [
    + "Amitakhya Phukan"
    + ]
    + }, {
    + "title": "Asturian (ast)",
    + "people": [
    + "Llumex03"
    + ]
    + }, {
    + "title": "Belarusian Latin (be@latin)",
    + "people": [
    + "Ihar Hrachyshka"
    + ]
    + }, {
    + "title": "Bulgarian (bg)",
    + "people": [
    + "Vladimira Girginova",
    + "Vladimir (Kaladan) Petkov",
    + "Hristo Todorov (Retired)"
    + ]
    + }, {
    + "title": "Bengali (bn)",
    + "people": [
    + "Jamil Ahmed",
    + "Israt Jahan",
    + "Samia Nimatullah",
    + "Indranil Das Gupta (Retired)",
    + "Tisa Nafisa (Retired)"
    + ]
    + }, {
    + "title": "Bengali-India (bn_IN)",
    + "people": [
    + "Runa Bhattacharjee"
    + ]
    + }, {
    + "title": "Breton (br)",
    + "people": [
    + "Gwenn Meynier"
    + ]
    + }, {
    + "title": "Bodo (brx)",
    + "people": [
    + "Chandrakant Dhutadmal"
    + ]
    + }, {
    + "title": "Bosnian (bs)",
    + "people": [
    + "Lejla Hadzialic"
    + ]
    + }, {
    + "title": "Catalan (ca)",
    + "people": [
    + "Josep Puigdemont",
    + "JM Pérez Cáncer (Retired)",
    + "Robert Millan (Retired)"
    + ]
    + }, {
    + "title": "Valencian-Catalan (ca@valencia)",
    + "people": [
    + "Toni Hermoso",
    + "Josep Puigdemont"
    + ]
    + }, {
    + "title": "Czech (cs)",
    + "people": [
    + "David Vachulka",
    + "Honza Král (Retired)",
    + "Miloslav Trmac (Retired)"
    + ]
    + }, {
    + "title": "Danish (da)",
    + "people": [
    + "Nicky Thomassen",
    + "Peter Bach (Retired)",
    + "Morten Brix Pedersen (Retired)"
    + ]
    + }, {
    + "title": "German (de)",
    + "people": [
    + "Björn Voigt",
    + "Daniel Seifert (Retired)",
    + "Karsten Weiss (Retired)",
    + "Jochen Kemnade (Retired)"
    + ]
    + }, {
    + "title": "Dzongkha (dz)",
    + "people": [
    + "Norbu",
    + "Jurmey Rabgay",
    + "Wangmo Sherpa"
    + ]
    + }, {
    + "title": "Greek (el)",
    + "people": [
    + "Katsaloulis Panayotis",
    + "Panos Bouklis"
    + ]
    + }, {
    + "title": "Australian English (en_AU)",
    + "people": [
    + "Michael Findlay",
    + "Peter Lawler (Retired)"
    + ]
    + }, {
    + "title": "British English (en_GB)",
    + "people": [
    + "Phil Hannent",
    + "Luke Ross (Retired)"
    + ]
    + }, {
    + "title": "Canadian English (en_CA)",
    + "people": [
    + "Adam Weinberger"
    + ]
    + }, {
    + "title": "Esperanto (eo)",
    + "people": [
    + "Stéphane Fillod"
    + ]
    + }, {
    + "title": "Spanish (es)",
    + "people": [
    + "Javier Fernández-Sanguino Peña",
    + "JM Pérez Cáncer (Retired)",
    + "Nicolás Lichtmaier (Retired)",
    + "Amaya Rodrigo (Retired)",
    + "Alejandro G Villar (Retired)"
    + ]
    + }, {
    + "title": "Argentine Spanish (es_AR)",
    + "people": [
    + "KNTRO"
    + ]
    + }, {
    + "title": "Estonian (et)",
    + "people": [
    + "Ivar Smolin"
    + ]
    + }, {
    + "title": "Basque (eu)",
    + "people": [
    + "Mikel Pascual Aldabaldetreku",
    + "Iñaki Larrañaga Murgoitio (Retired)",
    + "Hizkuntza Politikarako Sailburuordetza (Retired)"
    + ]
    + }, {
    + "title": "Persian (fa)",
    + "people": [
    + "Elnaz Sarbar",
    + "Roozbeh Pournader",
    + "Meelad Zakaria"
    + ]
    + }, {
    + "title": "Finnish (fi)",
    + "people": [
    + "Timo Jyrinki",
    + "Arto Alakulju (Retired)",
    + "Tero Kuusela (Retired)"
    + ]
    + }, {
    + "title": "French (fr)",
    + "people": [
    + "Sébastien François (Retired)",
    + "Loïc Jeannin (Retired)",
    + "Stéphane Pontier (Retired)",
    + "Stéphane Wirtel (Retired)",
    + "Éric Boumaour (Retired)"
    + ]
    + }, {
    + "title": "Irish (ga)",
    + "people": [
    + "Aaron Kearns",
    + "Kevin Scannell"
    + ]
    + }, {
    + "title": "Galician (gl)",
    + "people": [
    + "Mar Castro",
    + "Frco. Javier Rial",
    + "Ignacio Casal Quinteiro (Retired)"
    + ]
    + }, {
    + "title": "Gujarati (gu)",
    + "people": [
    + "Ankit Patel",
    + "Gujarati Language Team"
    + ]
    + }, {
    + "title": "Hebrew (he)",
    + "people": [
    + "Shalom Craimer",
    + "Pavel Bibergal (Retired)"
    + ]
    + }, {
    + "title": "Hindi (hi)",
    + "people": [
    + "Sangeeta Kumari",
    + "Rajesh Ranjan",
    + "Ravishankar Shrivastava (Retired)"
    + ]
    + }, {
    + "title": "Croatian (hr)",
    + "people": [
    + "Sabina Drempetić"
    + ]
    + }, {
    + "title": "Hungarian (hu)",
    + "people": [
    + "Kelemen Gábor",
    + "Zoltan Sutto (Retired)"
    + ]
    + }, {
    + "title": "Armenian (hy)",
    + "people": [
    + "David Avsharyan (Retired)"
    + ]
    + }, {
    + "title": "Indonesian (id)",
    + "people": [
    + "Rai S. Regawa"
    + ]
    + }, {
    + "title": "Italian (it)",
    + "people": [
    + "Claudio Satriano",
    + "Salvatore di Maggio (Retired)"
    + ]
    + }, {
    + "title": "Japanese (ja)",
    + "people": [
    + "Takayuki Kusano",
    + "Takashi Aihana (Retired)",
    + "Ryosuke Kutsuna (Retired)",
    + "Junichi Uekawa (Retired)",
    + "Taku Yasui (Retired)"
    + ]
    + }, {
    + "title": "Georgian (ka)",
    + "people": [
    + "Ubuntu Georgian Translators",
    + "Temuri Doghonadze (Retired)"
    + ]
    + }, {
    + "title": "Kazakh (kk)",
    + "people": [
    + "Baurzhan Muftakhidinov"
    + ]
    + }, {
    + "title": "Khmer (km)",
    + "people": [
    + "Khoem Sokhem"
    + ]
    + }, {
    + "title": "Kannada (kn)",
    + "people": [
    + "Kannada Translation team"
    + ]
    + }, {
    + "title": "Korean (ko)",
    + "people": [
    + "Sushizang",
    + "Sang-hyun S (Retired)",
    + "A Ho-seok Lee (Retired)",
    + "Kyeong-uk Son (Retired)"
    + ]
    + }, {
    + "title": "Kashmiri (kas)",
    + "people": [
    + "Chandrakant Dhutadmal"
    + ]
    + }, {
    + "title": "Kurdish (ku)",
    + "people": [
    + "Amed Ç. Jiyan",
    + "Erdal Ronahi",
    + "Rizoyê Xerzî"
    + ]
    + }, {
    + "title": "Kurdish (Sorani) (ku_IQ)",
    + "people": [
    + "Haval A. Ahmed"
    + ]
    + }, {
    + "title": "Laotian (lo)",
    + "people": [
    + "Anousak Souphavah (Retired)"
    + ]
    + }, {
    + "title": "Lithuanian (lt)",
    + "people": [
    + "Algimantas Margevičius",
    + "Laurynas Biveinis (Retired)",
    + "Gediminas Čičinskas (Retired)",
    + "Andrius Štikonas (Retired)"
    + ]
    + }, {
    + "title": "Latvian (lv)",
    + "people": [
    + "Rudolfs Mazurs",
    + "Ingmārs Dīriņš"
    + ]
    + }, {
    + "title": "Maithili (mai)",
    + "people": [
    + "Sangeeta Kumari",
    + "Rajesh Ranjan"
    + ]
    + }, {
    + "title": "Meadow Mari (mhr)",
    + "people": [
    + "David Preece"
    + ]
    + }, {
    + "title": "Macedonian (mk)",
    + "people": [
    + "Arangel Angov",
    + "Ivana Kirkovska",
    + "Jovan Naumovski",
    + "Tomislav Markovski (Retired)"
    + ]
    + }, {
    + "title": "Malayalam (ml)",
    + "people": [
    + "Ani Peter"
    + ]
    + }, {
    + "title": "Mongolian (mn)",
    + "people": [
    + "gooyo"
    + ]
    + }, {
    + "title": "Marathi (mr)",
    + "people": [
    + "Sandeep Shedmake"
    + ]
    + }, {
    + "title": "Malay (ms_MY)",
    + "people": [
    + "abuyop",
    + "Muhammad Najmi bin Ahmad Zabidi (Retired)"
    + ]
    + }, {
    + "title": "Burmese (my_MM)",
    + "people": [
    + "Thura Hlaing"
    + ]
    + }, {
    + "title": "Bokmål Norwegian (nb)",
    + "people": [
    + "Allan Nordhøy",
    + "Hans Fredrik Nordhaug (Retired)",
    + "Hallvard Glad (Retired)",
    + "Petter Johan Olsen (Retired)",
    + "Espen Stefansen (Retired)"
    + ]
    + }, {
    + "title": "Nepali (ne)",
    + "people": [
    + "Saroj Dhakal",
    + "Shyam Krishna Bal (Retired)"
    + ]
    + }, {
    + "title": "Dutch, Flemish (nl)",
    + "people": [
    + "Gideon van Melle",
    + "Vincent van Adrighem (Retired)"
    + ]
    + }, {
    + "title": "Norwegian Nynorsk (nn)",
    + "people": [
    + "Yngve Spjeld Landro"
    + ]
    + }, {
    + "title": "Occitan (oc)",
    + "people": [
    + "Cédric Valmary",
    + "Yannig Marchegay (Retired)"
    + ]
    + }, {
    + "title": "Oriya (or)",
    + "people": [
    + "Manoj Kumar Giri"
    + ]
    + }, {
    + "title": "Punjabi (pa)",
    + "people": [
    + "Amanpreet Singh Alam"
    + ]
    + }, {
    + "title": "Polish (pl)",
    + "people": [
    + "Piotr Drąg",
    + "Krzysztof Foltman (Retired)",
    + "Paweł Godlewski (Retired)",
    + "Piotr Makowski (Retired)",
    + "Emil Nowak (Retired)",
    + "Przemysław Sułek (Retired)"
    + ]
    + }, {
    + "title": "Portuguese (pt)",
    + "people": [
    + "Paulo Ribeiro",
    + "Duarte Henriques (Retired)"
    + ]
    + }, {
    + "title": "Portuguese-Brazil (pt_BR)",
    + "people": [
    + "Renato Silva",
    + "Maurício de Lemos Rodrigues Collares Neto (Retired)",
    + "Rodrigo Luiz Marques Flores (Retired)"
    + ]
    + }, {
    + "title": "Pashto (ps)",
    + "people": [
    + "Kashif Masood"
    + ]
    + }, {
    + "title": "Romanian (ro)",
    + "people": [
    + "Mișu Moldovan",
    + "Andrei Popescu"
    + ]
    + }, {
    + "title": "Russian (ru)",
    + "people": [
    + "Антон Самохвалов",
    + "Dmitry Beloglazov (Retired)",
    + "Alexandre Prokoudine (Retired)",
    + "Sergey Volozhanin (Retired)"
    + ]
    + }, {
    + "title": "Sindhi (sd)",
    + "people": [
    + "Chandrakant Dhutadmal"
    + ]
    + }, {
    + "title": "Slovak (sk)",
    + "people": [
    + "Jozef Káčer",
    + "loptosko",
    + "Daniel Režný (Retired)",
    + "Richard Golier (Retired)",
    + "helix84 (Retired)"
    + ]
    + }, {
    + "title": "Slovenian (sl)",
    + "people": [
    + "Martin Srebotnjak",
    + "Matjaz Horvat (Retired)"
    + ]
    + }, {
    + "title": "Albanian (sq)",
    + "people": [
    + "Besnik Bleta"
    + ]
    + }, {
    + "title": "Serbian (sr)",
    + "people": [
    + "Miloš Popović",
    + "Danilo Šegan (Retired)",
    + "Aleksandar Urosevic (Retired)"
    + ]
    + }, {
    + "title": "Serbian Latin (sr@latin)",
    + "people": [
    + "Miloš Popović"
    + ]
    + }, {
    + "title": "Sinhala (si)",
    + "people": [
    + "Yajith Ajantha Dayarathna",
    + "Danishka Navin"
    + ]
    + }, {
    + "title": "Swedish (sv)",
    + "people": [
    + "Josef Andersson",
    + "Peter Hjalmarsson (Retired)",
    + "Tore Lundqvist (Retired)",
    + "Christian Rose (Retired)"
    + ]
    + }, {
    + "title": "Swahili (sw)",
    + "people": [
    + "Paul Msegeya"
    + ]
    + }, {
    + "title": "Tamil (ta)",
    + "people": [
    + "I. Felix",
    + "Viveka Nathan K"
    + ]
    + }, {
    + "title": "Telugu (te)",
    + "people": [
    + "Krishnababu Krottapalli",
    + "Mr. Subbaramaih (Retired)"
    + ]
    + }, {
    + "title": "Thai (th)",
    + "people": [
    + "Isriya Paireepairit"
    + ]
    + }, {
    + "title": "Turkish (tr)",
    + "people": [
    + "Serdar Soytetir (Retired)",
    + "Ahmet Alp Balkan (Retired)"
    + ]
    + }, {
    + "title": "Tatar (tt)",
    + "people": [
    + "ILDAR Valeev"
    + ]
    + }, {
    + "title": "Ukranian (uk)",
    + "people": [
    + "Oleksandr Kovalenko"
    + ]
    + }, {
    + "title": "Urdu (ur)",
    + "people": [
    + "RKVS Raman"
    + ]
    + }, {
    + "title": "Uzbek (uz)",
    + "people": [
    + "Akmal Khushvakov"
    + ]
    + }, {
    + "title": "Vietnamese (vi)",
    + "people": [
    + "Nguyễn Vũ Hưng",
    + "T.M.Thanh and the Gnome-Vi Team (Retired)"
    + ]
    + }, {
    + "title": "Simplified Chinese (zh_CN)",
    + "people": [
    + "Aron Xu",
    + "Hashao (Retired)",
    + "Rocky S. Lee (Retired)",
    + "Funda Wang (Retired)"
    + ]
    + }, {
    + "title": "Hong Kong Chinese (zh_HK)",
    + "people": [
    + "Abel Cheung",
    + "Ambrose C. Li",
    + "Paladin R. Liu"
    + ]
    + }, {
    + "title": "Traditional Chinese (zh_TW)",
    + "people": [
    + "Ambrose C. Li",
    + "Paladin R. Liu",
    + "Hashao (Retired)",
    + "Rocky S. Lee (Retired)"
    + ]
    + }]
    +}
    --- a/pidgin/data/pidgin-3-uninstalled.pc.in Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,21 +0,0 @@
    -prefix=@prefix@
    -exec_prefix=@exec_prefix@
    -libdir=@libdir@
    -includedir=@includedir@
    -datarootdir=@datarootdir@
    -datadir=@datadir@
    -sysconfdir=@sysconfdir@
    -
    -abs_srcdir=@abs_srcdir@
    -abs_builddir=@abs_builddir@
    -
    -abs_top_srcdir=@abs_top_srcdir@
    -abs_top_builddir=@abs_top_builddir@
    -
    -plugindir=${libdir}/pidgin
    -
    -Name: Pidgin
    -Description: Pidgin is a GTK3-based instant messenger application.
    -Version: @VERSION@
    -Requires: gtk+-3.0 webkitgtk-3.0 purple-3
    -Cflags: -I${abs_top_srcdir}
    --- a/pidgin/data/pidgin-3.pc.in Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,16 +0,0 @@
    -prefix=@prefix@
    -exec_prefix=@exec_prefix@
    -libdir=@libdir@
    -includedir=@includedir@/pidgin
    -datarootdir=@datarootdir@
    -datadir=@datadir@
    -sysconfdir=@sysconfdir@
    -
    -plugindir=${libdir}/pidgin
    -
    -Name: Pidgin
    -Description: Pidgin is a GTK3-based instant messenger application.
    -Version: @VERSION@
    -Requires: gtk+-3.0 webkitgtk-3.0 purple-3
    -Cflags: -I${includedir}
    -Libs: -L${libdir} -lpidgin
    --- a/pidgin/gtk3compat.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtk3compat.h Thu Nov 23 22:30:26 2017 -0600
    @@ -33,6 +33,16 @@
    #include <gtk/gtk.h>
    +#if !GTK_CHECK_VERSION(3,22,0)
    +
    +static inline void
    +gtk_menu_popup_at_pointer(GtkMenu *menu, const GdkEvent *trigger_event)
    +{
    + const GdkEventButton *event = (const GdkEventButton *)trigger_event;
    + gtk_menu_popup(menu, NULL, NULL, NULL, NULL,
    + event ? event->button : 0, gdk_event_get_time(event));
    +}
    +
    #if !GTK_CHECK_VERSION(3,16,0)
    static inline void
    @@ -49,5 +59,7 @@
    #endif /* 3.16.0 */
    +#endif /* 3.22.0 */
    +
    #endif /* _PIDGINGTK3COMPAT_H_ */
    --- a/pidgin/gtkaccount.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtkaccount.c Thu Nov 23 22:30:26 2017 -0600
    @@ -2248,7 +2248,7 @@
    gtk_tree_path_free(path);
    gtk_tree_model_get(GTK_TREE_MODEL(dialog->model), &iter, COLUMN_DATA, &account, -1);
    - if ((account != NULL) && (event->button == 1) &&
    + if ((account != NULL) && (event->button == GDK_BUTTON_PRIMARY) &&
    (event->type == GDK_2BUTTON_PRESS))
    {
    pidgin_account_dialog_show(PIDGIN_MODIFY_ACCOUNT_DIALOG, account);
    --- a/pidgin/gtkblist.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtkblist.c Thu Nov 23 22:30:26 2017 -0600
    @@ -55,10 +55,12 @@
    #include "gtkstatusbox.h"
    #include "gtkscrollbook.h"
    #include "gtksmiley-manager.h"
    +#include "gtkstyle.h"
    #include "gtkblist-theme.h"
    #include "gtkblist-theme-loader.h"
    #include "gtkutils.h"
    #include "pidgin/minidialog.h"
    +#include "pidgin/pidginabout.h"
    #include "pidgin/pidgintooltip.h"
    #include <gdk/gdkkeysyms.h>
    @@ -1868,11 +1870,7 @@
    }
    static gboolean
    -pidgin_blist_show_context_menu(PurpleBlistNode *node,
    - GtkMenuPositionFunc func,
    - GtkWidget *tv,
    - guint button,
    - guint32 time)
    +pidgin_blist_show_context_menu(GtkWidget *tv, PurpleBlistNode *node, GdkEvent *event)
    {
    struct _pidgin_blist_node *gtknode = purple_blist_node_get_ui_data(node);
    GtkWidget *menu = NULL;
    @@ -1915,7 +1913,13 @@
    /* Now display the menu */
    if (menu != NULL) {
    gtk_widget_show_all(menu);
    - gtk_menu_popup(GTK_MENU(menu), NULL, NULL, func, tv, button, time);
    + if (event != NULL) {
    + /* Pointer event */
    + gtk_menu_popup_at_pointer(GTK_MENU(menu), event);
    + } else {
    + /* Keyboard event */
    + pidgin_menu_popup_at_treeview_selection(menu, tv);
    + }
    handled = TRUE;
    }
    @@ -1941,11 +1945,11 @@
    gtknode = purple_blist_node_get_ui_data(node);
    /* Right click draws a context menu */
    - if ((event->button == 3) && (event->type == GDK_BUTTON_PRESS)) {
    - handled = pidgin_blist_show_context_menu(node, NULL, tv, 3, event->time);
    + if (gdk_event_triggers_context_menu((GdkEvent *)event)) {
    + handled = pidgin_blist_show_context_menu(tv, node, (GdkEvent *)event);
    /* CTRL+middle click expands or collapse a contact */
    - } else if ((event->button == 2) && (event->type == GDK_BUTTON_PRESS) &&
    + } else if ((event->button == GDK_BUTTON_MIDDLE) && (event->type == GDK_BUTTON_PRESS) &&
    (event->state & GDK_CONTROL_MASK) && (PURPLE_IS_CONTACT(node))) {
    if (gtknode->contact_expanded)
    pidgin_blist_collapse_contact_cb(NULL, node);
    @@ -1954,7 +1958,7 @@
    handled = TRUE;
    /* Double middle click gets info */
    - } else if ((event->button == 2) && (event->type == GDK_2BUTTON_PRESS) &&
    + } else if ((event->button == GDK_BUTTON_MIDDLE) && (event->type == GDK_2BUTTON_PRESS) &&
    ((PURPLE_IS_CONTACT(node)) || (PURPLE_IS_BUDDY(node)))) {
    PurpleBuddy *b;
    if(PURPLE_IS_CONTACT(node))
    @@ -2005,7 +2009,7 @@
    gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &node, -1);
    /* Shift+F10 draws a context menu */
    - handled = pidgin_blist_show_context_menu(node, pidgin_treeview_popup_menu_position_func, tv, 0, GDK_CURRENT_TIME);
    + handled = pidgin_blist_show_context_menu(tv, node, NULL);
    return handled;
    }
    @@ -3604,6 +3608,15 @@
    /***************************************************
    * Crap *
    ***************************************************/
    +static void
    +_pidgin_about_cb(GtkAction *action, GtkWidget *window) {
    + GtkWidget *about = pidgin_about_dialog_new();
    +
    + gtk_window_set_transient_for(GTK_WINDOW(about), GTK_WINDOW(window));
    +
    + gtk_widget_show_all(about);
    +}
    +
    /* TODO: fill out tooltips... */
    static const GtkActionEntry blist_menu_entries[] = {
    /* NOTE: Do not set any accelerator to Control+O. It is mapped by
    @@ -3641,12 +3654,9 @@
    /* Help */
    { "HelpMenu", NULL, N_("_Help"), NULL, NULL, NULL },
    { "OnlineHelp", GTK_STOCK_HELP, N_("Online _Help"), "F1", NULL, gtk_blist_show_onlinehelp_cb },
    - { "BuildInformation", NULL, N_("_Build Information"), NULL, NULL, pidgin_dialogs_buildinfo },
    { "DebugWindow", NULL, N_("_Debug Window"), NULL, NULL, toggle_debug },
    - { "DeveloperInformation", NULL, N_("De_veloper Information"), NULL, NULL, pidgin_dialogs_developers },
    { "PluginInformation", NULL, N_("_Plugin Information"), NULL, NULL, pidgin_dialogs_plugins_info },
    - { "TranslatorInformation", NULL, N_("_Translator Information"), NULL, NULL, pidgin_dialogs_translators },
    - { "About", GTK_STOCK_ABOUT, N_("_About"), NULL, NULL, pidgin_dialogs_about },
    + { "About", GTK_STOCK_ABOUT, N_("_About"), NULL, NULL, _pidgin_about_cb },
    };
    /* Toggle items */
    @@ -3708,11 +3718,8 @@
    "<menu action='HelpMenu'>"
    "<menuitem action='OnlineHelp'/>"
    "<separator/>"
    - "<menuitem action='BuildInformation'/>"
    "<menuitem action='DebugWindow'/>"
    - "<menuitem action='DeveloperInformation'/>"
    "<menuitem action='PluginInformation'/>"
    - "<menuitem action='TranslatorInformation'/>"
    "<separator/>"
    "<menuitem action='About'/>"
    "</menu>"
    @@ -4245,7 +4252,7 @@
    gchar *
    pidgin_blist_get_name_markup(PurpleBuddy *b, gboolean selected, gboolean aliased)
    {
    - const char *name, *name_color, *name_font, *status_color, *status_font;
    + const char *name, *name_color, *name_font, *status_color, *status_font, *dim_grey;
    char *text = NULL;
    PurpleProtocol *protocol = NULL;
    PurpleContact *contact;
    @@ -4348,13 +4355,15 @@
    theme = pidgin_blist_get_theme();
    name_color = NULL;
    + dim_grey = pidgin_style_is_dark(NULL) ? "light slate grey" : "dim grey";
    +
    if (theme) {
    if (purple_presence_is_idle(presence)) {
    namefont = statusfont = pidgin_blist_theme_get_idle_text_info(theme);
    - name_color = "dim grey";
    + name_color = dim_grey;
    } else if (!purple_presence_is_online(presence)) {
    namefont = pidgin_blist_theme_get_offline_text_info(theme);
    - name_color = "dim grey";
    + name_color = dim_grey;
    statusfont = pidgin_blist_theme_get_status_text_info(theme);
    } else if (purple_presence_is_available(presence)) {
    namefont = pidgin_blist_theme_get_online_text_info(theme);
    @@ -4368,14 +4377,14 @@
    && (purple_presence_is_idle(presence)
    || !purple_presence_is_online(presence)))
    {
    - name_color = "dim grey";
    + name_color = dim_grey;
    }
    }
    name_color = theme_font_get_color_default(namefont, name_color);
    name_font = theme_font_get_face_default(namefont, "");
    - status_color = theme_font_get_color_default(statusfont, "dim grey");
    + status_color = theme_font_get_color_default(statusfont, dim_grey);
    status_font = theme_font_get_face_default(statusfont, "");
    if (aliased && selected) {
    @@ -4587,7 +4596,7 @@
    }
    static void
    -unseen_conv_menu(void)
    +unseen_conv_menu(GdkEvent *event)
    {
    static GtkWidget *menu = NULL;
    GList *convs = NULL;
    @@ -4618,8 +4627,7 @@
    pidgin_conversations_fill_menu(menu, convs);
    g_list_free(convs);
    gtk_widget_show_all(menu);
    - gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 3,
    - gtk_get_current_event_time());
    + gtk_menu_popup_at_pointer(GTK_MENU(menu), event);
    }
    static gboolean
    @@ -4627,21 +4635,20 @@
    {
    GList *convs;
    - switch (event->button) {
    - case 1:
    - convs = pidgin_conversations_get_unseen_ims(PIDGIN_UNSEEN_TEXT, FALSE, 1);
    -
    - if(!convs)
    - convs = pidgin_conversations_get_unseen_chats(PIDGIN_UNSEEN_NICK, FALSE, 1);
    - if (convs) {
    - pidgin_conv_present_conversation((PurpleConversation*)convs->data);
    - g_list_free(convs);
    - }
    - break;
    - case 3:
    - unseen_conv_menu();
    - break;
    - }
    + if (event->button == GDK_BUTTON_PRIMARY) {
    + convs = pidgin_conversations_get_unseen_ims(PIDGIN_UNSEEN_TEXT, FALSE, 1);
    + if(!convs)
    + convs = pidgin_conversations_get_unseen_chats(PIDGIN_UNSEEN_NICK, FALSE, 1);
    +
    + if (convs) {
    + pidgin_conv_present_conversation((PurpleConversation*)convs->data);
    + g_list_free(convs);
    + }
    +
    + } else if (gdk_event_triggers_context_menu((GdkEvent *)event)) {
    + unseen_conv_menu((GdkEvent *)event);
    + }
    +
    return TRUE;
    }
    @@ -6550,7 +6557,7 @@
    textcolor = pidgin_theme_font_get_color_describe(pair);
    else
    /* If no theme them default to making idle buddy names grey */
    - textcolor = "dim grey";
    + textcolor = pidgin_style_is_dark(NULL) ? "light slate grey" : "dim grey";
    if (textcolor) {
    idle = g_strdup_printf("<span color='%s' font_desc='%s'>%d:%02d</span>",
    @@ -7490,7 +7497,7 @@
    if(gtknode->recent_signonoff_timer > 0)
    g_source_remove(gtknode->recent_signonoff_timer);
    -
    +
    g_object_ref(buddy);
    gtknode->recent_signonoff_timer = g_timeout_add_seconds(10,
    (GSourceFunc)buddy_signonoff_timeout_cb, buddy);
    --- a/pidgin/gtkblist.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtkblist.h Thu Nov 23 22:30:26 2017 -0600
    @@ -241,7 +241,7 @@
    * This may be an existing pixbuf that has been given an additional ref,
    * so it shouldn't be modified.
    *
    - * Returns: A GdkPixbuf for the emblem to show, or NULL
    + * Returns: (transfer full): A GdkPixbuf for the emblem to show, or NULL
    */
    GdkPixbuf *
    pidgin_blist_get_emblem(PurpleBlistNode *node);
    @@ -250,6 +250,8 @@
    * pidgin_blist_get_status_icon:
    *
    * Useful for the buddy ticker
    + *
    + * Returns: (transfer full): A #GdkPixbuf of status icon.
    */
    GdkPixbuf *pidgin_blist_get_status_icon(PurpleBlistNode *node,
    PidginStatusIconSize size);
    @@ -317,7 +319,7 @@
    *
    * Gets Pidgin's current buddy list theme
    *
    - * Returns: the current theme
    + * Returns: (transfer none): the current theme
    */
    PidginBlistTheme *pidgin_blist_get_theme(void);
    @@ -332,7 +334,7 @@
    *
    * Gets the current list of sort methods.
    *
    - * Returns: A GSlist of sort methods
    + * Returns: (transfer none) (element-type PidginBlistSortMethod): A GSlist of sort methods
    */
    GList *pidgin_blist_get_sort_methods(void);
    @@ -348,7 +350,7 @@
    * pidgin_blist_sort_method_reg:
    * @id: The unique ID of the sorting method
    * @name: The method's name.
    - * @func: A pointer to the function.
    + * @func: (scope call): A pointer to the function.
    *
    * Registers a buddy list sorting method.
    */
    --- a/pidgin/gtkconv-theme.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtkconv-theme.h Thu Nov 23 22:30:26 2017 -0600
    @@ -179,7 +179,7 @@
    *
    * Get a list of available variants for a conversation theme.
    *
    - * Returns: The list of variants. This GList and the string data are owned by
    + * Returns: (element-type utf8): The list of variants. This GList and the string data are owned by
    * the theme and should not be freed by the caller.
    */
    const GList *pidgin_conversation_theme_get_variants(PidginConvTheme *theme);
    @@ -210,7 +210,7 @@
    *
    * Get (and reference) the array of nick colors
    *
    - * Returns: Pointer to GArray of nick colors, or NULL if no colors in theme
    + * Returns: (transfer container) (element-type GdkRGBA): Pointer to GArray of nick colors, or NULL if no colors in theme
    */
    GArray *pidgin_conversation_theme_get_nick_colors(PidginConvTheme *theme);
    --- a/pidgin/gtkconv.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtkconv.c Thu Nov 23 22:30:26 2017 -0600
    @@ -61,6 +61,7 @@
    #include "gtkpounce.h"
    #include "gtkprefs.h"
    #include "gtkprivacy.h"
    +#include "gtkstyle.h"
    #include "gtkutils.h"
    #include "gtkwebview.h"
    #include "pidginstock.h"
    @@ -1798,9 +1799,7 @@
    gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &who, -1);
    menu = create_chat_menu (PURPLE_CHAT_CONVERSATION(conv), who, gc);
    - gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
    - pidgin_treeview_popup_menu_position_func, widget,
    - 0, GDK_CURRENT_TIME);
    + pidgin_menu_popup_at_treeview_selection(menu, widget);
    g_free(who);
    return TRUE;
    @@ -1852,19 +1851,18 @@
    goto handled;
    }
    - if (event->button == 1 && event->type == GDK_2BUTTON_PRESS) {
    + if (event->button == GDK_BUTTON_PRIMARY && event->type == GDK_2BUTTON_PRESS) {
    chat_do_im(gtkconv, who);
    - } else if (event->button == 2 && event->type == GDK_BUTTON_PRESS) {
    + } else if (event->button == GDK_BUTTON_MIDDLE && event->type == GDK_BUTTON_PRESS) {
    /* Move to user's anchor */
    WebKitDOMNode *node = get_mark_for_user(gtkconv, who);
    if (node != NULL)
    webkit_dom_element_scroll_into_view(WEBKIT_DOM_ELEMENT(node), TRUE);
    - } else if (event->button == 3 && event->type == GDK_BUTTON_PRESS) {
    + } else if (gdk_event_triggers_context_menu((GdkEvent *)event)) {
    GtkWidget *menu = create_chat_menu (PURPLE_CHAT_CONVERSATION(conv), who, gc);
    - gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL,
    - event->button, event->time);
    + gtk_menu_popup_at_pointer(GTK_MENU(menu), (GdkEvent *)event);
    }
    handled:
    @@ -2291,7 +2289,7 @@
    static gboolean
    entry_stop_rclick_cb(GtkWidget *widget, GdkEventButton *event, gpointer data)
    {
    - if (event->button == 3 && event->type == GDK_BUTTON_PRESS) {
    + if (event->button == GDK_BUTTON_SECONDARY && event->type == GDK_BUTTON_PRESS) {
    /* Right single click */
    g_signal_stop_emission_by_name(G_OBJECT(widget), "button_press_event");
    @@ -2964,12 +2962,12 @@
    PurpleConversation *conv;
    PurpleBuddy *buddy;
    - if (e->button == 1 && e->type == GDK_BUTTON_PRESS) {
    + if (e->button == GDK_BUTTON_PRIMARY && e->type == GDK_BUTTON_PRESS) {
    change_size_cb(NULL, gtkconv);
    return TRUE;
    }
    - if (e->button != 3 || e->type != GDK_BUTTON_PRESS) {
    + if (!gdk_event_triggers_context_menu((GdkEvent *)e)) {
    return FALSE;
    }
    @@ -3017,7 +3015,7 @@
    }
    }
    - gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, e->button, e->time);
    + gtk_menu_popup_at_pointer(GTK_MENU(menu), (GdkEvent *)e);
    return TRUE;
    }
    @@ -5885,7 +5883,7 @@
    * So if Stu accidentally aims high and middle clicks on the pane-handle,
    * it causes a conversation tab to close. Let's stop that from happening.
    */
    - if (e->button == 2 && e->type == GDK_BUTTON_PRESS)
    + if (e->button == GDK_BUTTON_MIDDLE && e->type == GDK_BUTTON_PRESS)
    return TRUE;
    return FALSE;
    }
    @@ -6248,17 +6246,17 @@
    }
    }
    - if (btn_event->button == 1 && event->type == GDK_2BUTTON_PRESS) {
    + if (btn_event->button == GDK_BUTTON_PRIMARY && event->type == GDK_2BUTTON_PRESS) {
    chat_do_im(PIDGIN_CONVERSATION(conv), buddyname);
    g_free(name);
    return TRUE;
    - } else if (btn_event->button == 2 && event->type == GDK_2BUTTON_PRESS) {
    + } else if (btn_event->button == GDK_BUTTON_MIDDLE && event->type == GDK_2BUTTON_PRESS) {
    chat_do_info(PIDGIN_CONVERSATION(conv), buddyname);
    g_free(name);
    return TRUE;
    - } else if (btn_event->button == 3 && event->type == GDK_BUTTON_PRESS) {
    + } else if (gdk_event_triggers_context_menu(event)) {
    GtkTextIter start, end;
    /* we shouldn't display the popup
    @@ -6270,12 +6268,8 @@
    PurpleConnection *gc =
    purple_conversation_get_connection(conv);
    -
    menu = create_chat_menu(conv, buddyname, gc);
    - gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
    - NULL, GTK_WIDGET(imhtml),
    - btn_event->button,
    - btn_event->time);
    + gtk_menu_popup_at_pointer(GTK_MENU(menu), event);
    g_free(name);
    @@ -8955,6 +8949,57 @@
    e2ee_stock = NULL;
    }
    +/* Invalidate the first tab color set */
    +static gboolean tab_color_fuse = TRUE;
    +
    +static void
    +pidgin_conversations_set_tab_colors(void)
    +{
    + /* Set default tab colors */
    + GString *str = g_string_new(NULL);
    + GtkSettings *settings = gtk_settings_get_default();
    + GtkStyle *parent = gtk_rc_get_style_by_paths(settings, "tab-container.tab-label*", NULL, G_TYPE_NONE), *now;
    + struct {
    + const char *stylename;
    + const char *labelname;
    + const char *color;
    + } styles[] = {
    + {"pidgin_tab_label_typing_default", "tab-label-typing", "#4e9a06"},
    + {"pidgin_tab_label_typed_default", "tab-label-typed", "#c4a000"},
    + {"pidgin_tab_label_attention_default", "tab-label-attention", "#006aff"},
    + {"pidgin_tab_label_unreadchat_default", "tab-label-unreadchat", "#cc0000"},
    + {"pidgin_tab_label_event_default", "tab-label-event", "#888a85"},
    + {NULL, NULL, NULL}
    + };
    + int iter;
    +
    + if(tab_color_fuse) {
    + tab_color_fuse = FALSE;
    + return;
    + }
    +
    + for (iter = 0; styles[iter].stylename; iter++) {
    + now = gtk_rc_get_style_by_paths(settings, styles[iter].labelname, NULL, G_TYPE_NONE);
    + if (parent == now ||
    + (parent && now && parent->rc_style == now->rc_style)) {
    + GdkColor color;
    + gdk_color_parse(styles[iter].color, &color);
    + pidgin_style_adjust_contrast(gtk_widget_get_default_style(), &color);
    +
    + g_string_append_printf(str, "style \"%s\" {\n"
    + "fg[ACTIVE] = \"%s\"\n"
    + "}\n"
    + "widget \"*%s\" style \"%s\"\n",
    + styles[iter].stylename,
    + gdk_color_to_string(&color),
    + styles[iter].labelname, styles[iter].stylename);
    + }
    + }
    + gtk_rc_parse_string(str->str);
    + g_string_free(str, TRUE);
    + gtk_rc_reset_styles(settings);
    +}
    +
    void
    pidgin_conversations_uninit(void)
    {
    @@ -9365,7 +9410,7 @@
    static gboolean
    infopane_press_cb(GtkWidget *widget, GdkEventButton *e, PidginConversation *gtkconv)
    {
    - if (e->type == GDK_2BUTTON_PRESS && e->button == 1) {
    + if (e->type == GDK_2BUTTON_PRESS && e->button == GDK_BUTTON_PRIMARY) {
    if (infopane_entry_activate(gtkconv))
    return TRUE;
    }
    @@ -9373,7 +9418,7 @@
    if (e->type != GDK_BUTTON_PRESS)
    return FALSE;
    - if (e->button == 1) {
    + if (e->button == GDK_BUTTON_PRIMARY) {
    int nb_x, nb_y;
    GtkAllocation allocation;
    @@ -9399,7 +9444,7 @@
    return FALSE;
    }
    - if (e->button == 3) {
    + if (gdk_event_triggers_context_menu((GdkEvent *)e)) {
    /* Right click was pressed. Popup the context menu. */
    GtkWidget *menu = gtk_menu_new(), *sub;
    gboolean populated = populate_menu_with_options(menu, gtkconv, TRUE);
    @@ -9419,7 +9464,7 @@
    }
    gtk_widget_show_all(menu);
    - gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, e->button, e->time);
    + gtk_menu_popup_at_pointer(GTK_MENU(menu), (GdkEvent *)e);
    return TRUE;
    }
    return FALSE;
    @@ -9434,7 +9479,7 @@
    GtkWidget *tab;
    GtkAllocation allocation;
    - if (e->button == 2 && e->type == GDK_BUTTON_PRESS) {
    + if (e->button == GDK_BUTTON_MIDDLE && e->type == GDK_BUTTON_PRESS) {
    PidginConversation *gtkconv;
    tab_clicked = pidgin_conv_get_tab_at_xy(win, e->x_root, e->y_root, NULL);
    @@ -9447,7 +9492,7 @@
    }
    - if (e->button != 1 || e->type != GDK_BUTTON_PRESS)
    + if (e->button != GDK_BUTTON_PRIMARY || e->type != GDK_BUTTON_PRESS)
    return FALSE;
    @@ -9530,7 +9575,7 @@
    * widget's, because we may be getting an event passed on from the
    * close button.
    */
    - if (e->button != 1 && e->type != GDK_BUTTON_RELEASE)
    + if (e->button != GDK_BUTTON_PRIMARY && e->type != GDK_BUTTON_RELEASE)
    return FALSE;
    device = gdk_event_get_device((GdkEvent *)e);
    @@ -9812,7 +9857,7 @@
    GtkWidget *menu;
    PidginConversation *gtkconv;
    - if (event->type != GDK_BUTTON_PRESS || event->button != 3)
    + if (!gdk_event_triggers_context_menu((GdkEvent *)event))
    return FALSE;
    gtkconv = pidgin_conv_window_get_gtkconv_at_index(win,
    @@ -9822,7 +9867,7 @@
    menu = win->notebook_menu;
    - gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 3, event->time);
    + gtk_menu_popup_at_pointer(GTK_MENU(menu), (GdkEvent *)event);
    return TRUE;
    }
    @@ -10262,6 +10307,9 @@
    purple_signal_emit(pidgin_conversations_get_handle(),
    "conversation-window-created", win);
    + /* Fix colours */
    + pidgin_conversations_set_tab_colors();
    +
    return win;
    }
    @@ -11225,6 +11273,9 @@
    gdk_rgba_parse(&nick_highlight, DEFAULT_HIGHLIGHT_COLOR);
    gdk_rgba_parse(&send_color, DEFAULT_SEND_COLOR);
    + pidgin_style_adjust_contrast(NULL, &nick_highlight);
    + pidgin_style_adjust_contrast(NULL, &send_color);
    +
    srand(background.red * 65535 + background.green * 65535 + background.blue * 65535 + 1);
    breakout_time = time(NULL) + 3;
    --- a/pidgin/gtkconv.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtkconv.h Thu Nov 23 22:30:26 2017 -0600
    @@ -180,7 +180,7 @@
    *
    * Returns the default theme for GTK+ conversations.
    *
    - * Returns: The default GTK+ conversation theme.
    + * Returns: (transfer none): The default GTK+ conversation theme.
    */
    PurpleTheme *pidgin_conversations_get_default_theme(void);
    @@ -222,7 +222,7 @@
    * converations returned if greater than zero. The returned list should
    * be freed by the caller.
    *
    - * Returns: List of PurpleConversation matching criteria, or %NULL.
    + * Returns: (transfer container) (element-type PurpleConversation): List of PurpleConversation matching criteria, or %NULL.
    */
    GList *
    pidgin_conversations_get_unseen_all(PidginUnseenState min_state,
    @@ -243,7 +243,7 @@
    * returned if greater than zero. The returned list should be freed by the
    * caller.
    *
    - * Returns: List of PurpleIMConversation matching criteria, or %NULL.
    + * Returns: (transfer container) (element-type PurpleConversation): List of PurpleIMConversation matching criteria, or %NULL.
    */
    GList *
    pidgin_conversations_get_unseen_ims(PidginUnseenState min_state,
    @@ -264,7 +264,7 @@
    * returned if greater than zero. The returned list should be freed by the
    * caller.
    *
    - * Returns: List of PurpleChatConversation matching criteria, or %NULL.
    + * Returns: (transfer container) (element-type PurpleConversation): List of PurpleChatConversation matching criteria, or %NULL.
    */
    GList *
    pidgin_conversations_get_unseen_chats(PidginUnseenState min_state,
    @@ -273,8 +273,8 @@
    /**
    * pidgin_conversations_fill_menu:
    - * @menu: Menu widget to add items to.
    - * @convs: List of PurpleConversation to add to menu.
    + * @menu: Menu widget to add items to.
    + * @convs: (element-type PurpleConversation): List of PurpleConversation to add to menu.
    *
    * Fill a menu with a list of conversations. Clicking the conversation
    * menu item will present that conversation to the user.
    @@ -315,7 +315,7 @@
    * @conv: The conversation.
    * @small_icon: Whether to get the small icon.
    *
    - * Returns: The tab icon.
    + * Returns: (transfer full): The tab icon.
    */
    GdkPixbuf *pidgin_conv_get_tab_icon(PurpleConversation *conv, gboolean small_icon);
    --- a/pidgin/gtkconvwin.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtkconvwin.h Thu Nov 23 22:30:26 2017 -0600
    @@ -206,7 +206,7 @@
    * pidgin_conv_window_get_active_conversation:
    * @win: The conversation window
    *
    - * Returns: The active #PurpleConversation in @win.
    + * Returns: (transfer none): The active #PurpleConversation in @win.
    */
    PurpleConversation *pidgin_conv_window_get_active_conversation(const PidginConvWindow *win);
    @@ -283,10 +283,23 @@
    * GTK+ Conversation Placement API
    **************************************************************************/
    -typedef void (*PidginConvPlacementFunc)(PidginConversation *);
    +/**
    + * PidginConvPlacementFunc: (skip)
    + */
    +typedef void (*PidginConvPlacementFunc)(PidginConversation *conv);
    +/**
    + * pidgin_conv_placement_get_options: (skip)
    + */
    GList *pidgin_conv_placement_get_options(void);
    +/**
    + * pidgin_conv_placement_get_name: (skip)
    + */
    const char *pidgin_conv_placement_get_name(const char *id);
    +
    +/**
    + * pidgin_conv_placement_place: (skip)
    + */
    void pidgin_conv_placement_place(PidginConversation *gtkconv);
    /**
    --- a/pidgin/gtkdebug.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtkdebug.c Thu Nov 23 22:30:26 2017 -0600
    @@ -40,7 +40,7 @@
    #include "gtk3compat.h"
    -#include "pidgin.gresource.h"
    +#include "pidginresources.h"
    typedef struct
    {
    @@ -396,7 +396,7 @@
    GtkToolbarStyle value[3];
    int i;
    - if (!(event->button == 3 && event->type == GDK_BUTTON_PRESS))
    + if (!gdk_event_triggers_context_menu((GdkEvent *)event))
    return FALSE;
    text[0] = _("_Icon Only"); value[0] = GTK_TOOLBAR_ICONS;
    @@ -416,7 +416,7 @@
    gtk_widget_show_all(menu);
    - gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 3, event->time);
    + gtk_menu_popup_at_pointer(GTK_MENU(menu), (GdkEvent *)event);
    return FALSE;
    }
    @@ -606,7 +606,7 @@
    resource = pidgin_get_resource();
    error = NULL;
    resource_bytes = g_resource_lookup_data(resource,
    - "/im/pidgin/Pidgin/gtkdebug.html",
    + "/im/pidgin/Pidgin/Debug/gtkdebug.html",
    G_RESOURCE_LOOKUP_FLAGS_NONE,
    &error);
    if (G_UNLIKELY(resource_bytes == NULL || error != NULL)) {
    --- a/pidgin/gtkdialogs.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtkdialogs.c Thu Nov 23 22:30:26 2017 -0600
    @@ -55,359 +55,6 @@
    char *new_name;
    };
    -struct developer {
    - char *name;
    - char *role;
    - char *email;
    -};
    -
    -struct translator {
    - char *language;
    - char *abbr;
    - char *name;
    - char *email;
    -};
    -
    -struct artist {
    - char *name;
    - char *email;
    -};
    -
    -/* Order: Alphabetical by Last Name */
    -static const struct developer developers[] = {
    - {"Daniel 'datallah' Atallah", NULL, NULL},
    - {"Paul 'darkrain42' Aurich", NULL, NULL},
    - {"Ethan 'Paco-Paco' Blanton", NULL, NULL},
    - {"Hylke Bons", N_("artist"), "hylkebons@gmail.com"},
    - {"Sadrul Habib Chowdhury", NULL, NULL},
    - {"Gary 'grim' Kramlich", NULL, "grim@pidgin.im"},
    - {"Richard 'rlaager' Laager", NULL, "rlaager@pidgin.im"},
    - {"Marcus 'malu' Lundblad", NULL, NULL},
    - {"Sulabh 'sulabh_m' Mahajan", NULL, NULL},
    - {"Richard 'wabz' Nelson", NULL, NULL},
    - {"Etan 'deryni' Reisner", NULL, NULL},
    - {"Michael 'Maiku' Ruprecht", N_("voice and video"), NULL},
    - {"Elliott 'QuLogic' Sales de Andrade", NULL, NULL},
    - {"Luke 'LSchiere' Schierer", N_("support"), "lschiere@users.sf.net"},
    - {"Evan Schoenberg", NULL, NULL},
    - {"Kevin 'SimGuy' Stange", N_("webmaster"), NULL},
    - {"Will 'resiak' Thompson", NULL, NULL},
    - {"Stu 'nosnilmot' Tomlinson", NULL, NULL},
    - {"Jorge 'Masca' Villaseñor", NULL, NULL},
    - {"Tomasz Wasilczyk", NULL, "https://www.wasilczyk.pl"},
    - {NULL, NULL, NULL}
    -};
    -
    -/* Order: Alphabetical by Last Name */
    -static const struct developer patch_writers[] = {
    - {"Jakub 'haakon' Adam", NULL, NULL},
    - {"Krzysztof Klinikowski", NULL, NULL},
    - {"Eion Robb", NULL, NULL},
    - {"Ankit Vani", NULL, NULL},
    - {NULL, NULL, NULL}
    -};
    -
    -/* Order: Alphabetical by Last Name */
    -static const struct developer retired_developers[] = {
    - {"John 'rekkanoryo' Bailey", NULL, NULL},
    - {"Herman Bloggs", N_("win32 port"), "herman@bluedigits.com"},
    - {"Thomas Butter", NULL, NULL},
    - /* Translators: This is a person's name. For most languages we recommend
    - not translating it. */
    - {N_("Ka-Hing Cheung"), NULL, NULL},
    - {"Mark 'KingAnt' Doliner", NULL, "mark@kingant.net"},
    - {"Jim Duchek", N_("maintainer"), "jim@linuxpimps.com"},
    - {"Sean Egan", NULL, "sean.egan@gmail.com"},
    - {"Rob Flynn", N_("maintainer"), NULL},
    - {"Adam Fritzler", N_("libfaim maintainer"), NULL},
    - {"Christian 'ChipX86' Hammond", N_("webmaster"), NULL},
    - {"Casey Harkins", NULL, NULL},
    - {"Ivan Komarov", NULL, "ivan.komarov@pidgin.im"},
    - /* If "lazy bum" translates literally into a serious insult, use something else or omit it. */
    - {"Syd Logan", N_("hacker and designated driver [lazy bum]"), NULL},
    - {"Christopher 'siege' O'Brien", NULL, "taliesein@users.sf.net"},
    - {"Bartosz Oler", NULL, NULL},
    - {"Tim 'marv' Ringenbach", NULL, NULL},
    - {"Megan 'Cae' Schneider", N_("support/QA"), NULL},
    - {"Jim Seymour", N_("XMPP"), NULL},
    - {"Mark Spencer", N_("original author"), "markster@marko.net"},
    - {"Nathan 'faceprint' Walp", NULL, NULL},
    - {"Eric Warmenhoven", N_("lead developer"), "warmenhoven@yahoo.com"},
    - {NULL, NULL, NULL}
    -};
    -
    -/* Order: Alphabetical by Last Name */
    -static const struct developer retired_patch_writers[] = {
    - {"Felipe 'shx' Contreras", NULL, NULL},
    - {"Decklin Foster", NULL, NULL},
    - {"Peter 'Bleeter' Lawler", NULL, NULL},
    - {"Robert 'Robot101' McQueen", NULL, NULL},
    - {"Benjamin Miller", NULL, NULL},
    - {"Dennis 'EvilDennisR' Ristuccia", N_("Senior Contributor/QA"), NULL},
    - {"Peter 'Fmoo' Ruibal", NULL, NULL},
    - {"Gabriel 'Nix' Schulhof", NULL, NULL},
    - {NULL, NULL, NULL}
    -};
    -
    -/* Order: Code, then Alphabetical by Last Name
    - Use NULL language and code for secondary translators. */
    -static const struct translator translators[] = {
    - {N_("Afrikaans"), "af", "Samuel Murray", "afrikaans@gmail.com"},
    - {NULL, NULL, "Friedel Wolff", "friedel@translate.org.za"},
    - {N_("Arabic"), "ar", "Khaled Hosny", "khaledhosny@eglug.org"},
    - {N_("Assamese"), "as", "Amitakhya Phukan", "aphukan@fedoraproject.org"},
    - {N_("Asturian"), "ast", "Llumex03", "l.lumex03.tornes@gmail.com"},
    - {N_("Belarusian Latin"), "be@latin", "Ihar Hrachyshka", "ihar.hrachyshka@gmail.com"},
    - {N_("Bulgarian"), "bg", "Vladimira Girginova", "missing@here.is"},
    - {NULL, NULL, "Vladimir (Kaladan) Petkov", "kaladan@gmail.com"},
    - {N_("Bengali"), "bn", "Jamil Ahmed", "jamil@bengalinux.org"},
    - {NULL, NULL, "Israt Jahan", "israt@ankur.org.bd"},
    - {NULL, NULL, "Samia Nimatullah", "mailsamia2001@yahoo.com"},
    - {N_("Bengali-India"), "bn_IN", "Runa Bhattacharjee", "runab@fedoraproject.org"},
    - {N_("Breton"), "br", "Gwenn Meynier", "tornoz@laposte.net"},
    - {N_("Bodo"), "brx", "Chandrakant Dhutadmal", "cpdhutadmal@yahoo.com"},
    - {N_("Bosnian"), "bs", "Lejla Hadzialic", "lejlah@gmail.com"},
    - {N_("Catalan"), "ca", "Josep Puigdemont", "josep.puigdemont@gmail.com"},
    - {N_("Valencian-Catalan"), "ca@valencia", "Toni Hermoso", "toniher@softcatala.org"},
    - {NULL, NULL, "Josep Puigdemont", "tradgnome@softcatala.org"},
    - {N_("Czech"), "cs", "David Vachulka", "david@konstrukce-cad.com"},
    - {N_("Danish"), "da", "Nicky Thomassen", "nicky@aptget.dk"},
    - {N_("German"), "de", "Björn Voigt", "bjoernv@arcor.de"},
    - {N_("Dzongkha"), "dz", "Norbu", "nor_den@hotmail.com"},
    - {NULL, NULL, "Jurmey Rabgay", "jur_gay@yahoo.com"},
    - {NULL, NULL, "Wangmo Sherpa", "rinwanshe@yahoo.com"},
    - {N_("Greek"), "el", "Katsaloulis Panayotis", "panayotis@panayotis.com"},
    - {NULL, NULL, "Panos Bouklis", "panos@echidna-band.com"},
    - {N_("Australian English"), "en_AU", "Michael Findlay", "keltoiboy@gmail.com"},
    - {N_("British English"), "en_GB", "Phil Hannent", "phil@hannent.co.uk"},
    - {N_("Canadian English"), "en_CA", "Adam Weinberger", "adamw@gnome.org"},
    - {N_("Esperanto"), "eo", "Stéphane Fillod", "fillods@users.sourceforge.net"},
    - {N_("Spanish"), "es", "Javier Fernández-Sanguino Peña", "jfs@debian.org"},
    - {N_("Argentine Spanish"), "es_AR", "KNTRO", "kntro@msn.com"},
    - {N_("Estonian"), "et", "Ivar Smolin", "okul@linux.ee"},
    - {N_("Basque"), "eu", "Mikel Pascual Aldabaldetreku", "mikel.paskual@gmail.com"},
    - {N_("Persian"), "fa", "Elnaz Sarbar", "elnaz@farsiweb.info"},
    - {NULL, NULL, "Roozbeh Pournader", "roozbeh@farsiweb.info"},
    - {NULL, NULL, "Meelad Zakaria", "meelad@farsiweb.info"},
    - {N_("Finnish"), "fi", "Timo Jyrinki", "timo.jyrinki@iki.fi"},
    - {N_("Irish"), "ga", "Aaron Kearns", "ajkearns6@gmail.com"},
    - {N_("Irish"), "ga", "Kevin Scannell", NULL},
    - {N_("Galician"), "gl", "Mar Castro", "mariamarcp@gmail.com"},
    - {NULL, NULL, "Frco. Javier Rial", "fjrial@cesga.es"},
    - {N_("Gujarati"), "gu", "Ankit Patel", "ankit_patel@users.sf.net"},
    - {NULL, NULL, N_("Gujarati Language Team"), "indianoss-gujarati@lists.sourceforge.net"},
    - {N_("Hebrew"), "he", "Shalom Craimer", "scraimer@gmail.com"},
    - {N_("Hindi"), "hi", "Sangeeta Kumari", "sangeeta_0975@yahoo.com"},
    - {NULL, NULL, "Rajesh Ranjan", "rajeshkajha@yahoo.com"},
    - {N_("Croatian"), "hr", "Sabina Drempetić", "bina91991@googlemail.com"},
    - {N_("Hungarian"), "hu", "Kelemen Gábor", "kelemeng@gnome.hu"},
    - {N_("Indonesian"), "id", "Rai S. Regawa", "raireg@yahoo.com"},
    - {N_("Italian"), "it", "Claudio Satriano", "satriano@gmail.com"},
    - {N_("Japanese"), "ja", "Takayuki Kusano", "AE5T-KSN@asahi-net.or.jp"},
    - {N_("Georgian"), "ka", N_("Ubuntu Georgian Translators"), "alexander.didebulidze@stusta.mhn.de"},
    - {N_("Kazakh"), "kk", "Baurzhan Muftakhidinov", "baurthefirst@gmail.com"},
    - {N_("Khmer"), "km", "Khoem Sokhem", "khoemsokhem@khmeros.info"},
    - {N_("Kannada"), "kn", N_("Kannada Translation team"), "translation@sampada.info"},
    - {N_("Korean"), "ko", "Sushizang", "sushizang@empal.com"},
    - {N_("Kashmiri"), "kas", "Chandrakant Dhutadmal", "cpdhutadmal@yahoo.com"},
    - {N_("Kurdish"), "ku", "Amed Ç. Jiyan", "amedcj@hotmail.com"},
    - {NULL, NULL, "Erdal Ronahi", "erdal.ronahi@gmail.com"},
    - {NULL, NULL, "Rizoyê Xerzî", "rizoxerzi@hotmail.com"},
    - {N_("Kurdish (Sorani)"), "ku_IQ", "Haval A. Ahmed", "haval.abdulkarim@gmail.com"},
    - {N_("Lithuanian"), "lt", "Algimantas Margevičius", "margevicius.algimantas@gmail.com"},
    - {N_("Latvian"), "lv", "Rudolfs Mazurs", "rudolfs.mazurs@gmail.com"},
    - {N_("Latvian"), "lv", "Ingmārs Dīriņš", "melhiors14@gmail.com"},
    - {N_("Maithili"), "mai", "Sangeeta Kumari", "sangeeta_0975@yahoo.com"},
    - {NULL, NULL, "Rajesh Ranjan", "rajeshkajha@yahoo.com"},
    - {N_("Meadow Mari"), "mhr", "David Preece", "davidpreece1@gmail.com"},
    - {N_("Macedonian"), "mk", "Arangel Angov ", "arangel@linux.net.mk"},
    - {NULL, NULL, "Ivana Kirkovska", "ivana.kirkovska@gmail.com"},
    - {NULL, NULL, "Jovan Naumovski", "jovan@lugola.net"},
    - {N_("Malayalam"), "ml", "Ani Peter", "apeter@redhat.com"},
    - {N_("Mongolian"), "mn", "gooyo", NULL},
    - {N_("Marathi"), "mr", "Sandeep Shedmake", "sandeep.shedmake@gmail.com"},
    - {N_("Malay"), "ms_MY", "abuyop", "abuyop@gmail.com"},
    - {N_("Burmese"), "my_MM", "Thura Hlaing", "trhura@gmail.com"},
    - {N_("Bokmål Norwegian"), "nb", "Allan Nordhøy", "epost@anotheragency.no"},
    - {N_("Nepali"), "ne", "Saroj Dhakal", "lotusnagarkot@gmail.com"},
    - {N_("Dutch, Flemish"), "nl", "Gideon van Melle", "translations@gvmelle.com"},
    - {N_("Norwegian Nynorsk"), "nn", "Yngve Spjeld Landro", "l10n@landro.net"},
    - {N_("Occitan"), "oc", "Cédric Valmary", "cvalmary@yahoo.fr"},
    - {N_("Oriya"), "or", "Manoj Kumar Giri", "giri.manojkr@gmail.com"},
    - {N_("Punjabi"), "pa", "Amanpreet Singh Alam", "aalam@users.sf.net"},
    - {N_("Polish"), "pl", "Piotr Drąg", "piotrdrag@gmail.com"},
    - {N_("Portuguese"), "pt", "Paulo Ribeiro", "paulo@diffraction.pt"},
    - {N_("Portuguese-Brazil"), "pt_BR", "Renato Silva", "br.renatosilva@gmail.com"},
    - {N_("Pashto"), "ps", "Kashif Masood", "masudmails@yahoo.com"},
    - {N_("Romanian"), "ro", "Mișu Moldovan", "dumol@gnome.org"},
    - {NULL, NULL, "Andrei Popescu", "andreimpopescu@gmail.com"},
    - {N_("Russian"), "ru", "Антон Самохвалов", "samant.ua@mail.ru"},
    - {N_("Sindhi"), "sd", "Chandrakant Dhutadmal", "cpdhutadmal@yahoo.com"},
    - {N_("Slovak"), "sk", "Jozef Káčer", "quickparser@gmail.com"},
    - {NULL, NULL, "loptosko", "loptosko@gmail.com"},
    - {N_("Slovenian"), "sl", "Martin Srebotnjak", "miles@filmsi.net"},
    - {N_("Albanian"), "sq", "Besnik Bleta", "besnik@programeshqip.org"},
    - {N_("Serbian"), "sr", "Miloš Popović", "gpopac@gmail.com"},
    - {N_("Serbian Latin"), "sr@latin", "Miloš Popović", "gpopac@gmail.com"},
    - {N_("Sinhala"), "si", "Yajith Ajantha Dayarathna", "yajith@gmail.com"},
    - {NULL, NULL, "Danishka Navin", "snavin@redhat.com"},
    - {N_("Swedish"), "sv", "Josef Andersson", "josef.andersson@gmail.com"},
    - {N_("Swahili"), "sw", "Paul Msegeya", "msegeya@gmail.com"},
    - {N_("Tamil"), "ta", "I. Felix", "ifelix25@gmail.com"},
    - {NULL, NULL, "Viveka Nathan K", "vivekanathan@users.sourceforge.net"},
    - {N_("Telugu"), "te", "Krishnababu Krottapalli", "krottapalli@ymail.com"},
    - {N_("Thai"), "th", "Isriya Paireepairit", "markpeak@gmail.com"},
    - {N_("Tatar"), "tt", "ILDAR Valeev", "v_ildar@bk.ru"},
    - {N_("Ukranian"), "uk", "Oleksandr Kovalenko", "alx.kovalenko@gmail.com"},
    - {N_("Urdu"), "ur", "RKVS Raman", "rkvsraman@gmail.com"},
    - {N_("Uzbek"), "uz",
    - /* Translators: This is a person's name. For most languages we recommend
    - not translating it. */
    - N_("Akmal Khushvakov"), "uzbadmin@gmail.com"},
    - {N_("Vietnamese"), "vi", "Nguyễn Vũ Hưng", "vuhung16plus@gmail.com"},
    - {N_("Simplified Chinese"), "zh_CN", "Aron Xu", "happyaron.xu@gmail.com"},
    - {N_("Hong Kong Chinese"), "zh_HK", "Abel Cheung", "abelindsay@gmail.com"},
    - {NULL, NULL, "Ambrose C. Li", "acli@ada.dhs.org"},
    - {NULL, NULL, "Paladin R. Liu", "paladin@ms1.hinet.net"},
    - {N_("Traditional Chinese"), "zh_TW", "Ambrose C. Li", "acli@ada.dhs.org"},
    - {NULL, NULL, "Paladin R. Liu", "paladin@ms1.hinet.net"},
    - {NULL, NULL, NULL, NULL}
    -};
    -
    -
    -static const struct translator past_translators[] = {
    - {N_("Amharic"), "am", "Daniel Yacob", NULL},
    - {N_("Arabic"), "ar", "Mohamed Magdy", NULL},
    - {N_("Bulgarian"), "bg", "Hristo Todorov", NULL},
    - {N_("Bengali"), "bn", "Indranil Das Gupta", NULL},
    - {NULL, NULL, "Tisa Nafisa", NULL},
    - {N_("Catalan"), "ca", "JM Pérez Cáncer", NULL},
    - {NULL, NULL, "Robert Millan", NULL},
    - {N_("Czech"), "cs", "Honza Král", NULL},
    - {NULL, NULL, "Miloslav Trmac", NULL},
    - {N_("Danish"), "da", "Peter Bach", NULL},
    - {NULL, NULL, "Morten Brix Pedersen", NULL},
    - {N_("German"), "de", "Daniel Seifert", NULL},
    - {NULL, NULL, "Karsten Weiss", NULL},
    - {NULL, NULL, "Jochen Kemnade", NULL},
    - {N_("Australian English"), "en_AU", "Peter Lawler", NULL},
    - {N_("British English"), "en_GB", "Luke Ross", NULL},
    - {N_("Spanish"), "es", "JM Pérez Cáncer", NULL},
    - {NULL, NULL, "Nicolás Lichtmaier", NULL},
    - {NULL, NULL, "Amaya Rodrigo", NULL},
    - {NULL, NULL, "Alejandro G Villar", NULL},
    - {N_("Basque"), "eu", "Iñaki Larrañaga Murgoitio", NULL},
    - {NULL, NULL, "Hizkuntza Politikarako Sailburuordetza", NULL},
    - {N_("Finnish"), "fi", "Arto Alakulju", NULL},
    - {NULL, NULL, "Tero Kuusela", NULL},
    - {N_("French"), "fr", "Sébastien François", NULL},
    - {NULL, NULL, "Loïc Jeannin", NULL},
    - {NULL, NULL, "Stéphane Pontier", NULL},
    - {NULL, NULL, "Stéphane Wirtel", NULL},
    - {NULL, NULL, "Éric Boumaour", NULL},
    - {N_("Galician"), "gl", "Ignacio Casal Quinteiro", NULL},
    - {N_("Hebrew"), "he", "Pavel Bibergal", NULL},
    - {N_("Hindi"), "hi", "Ravishankar Shrivastava", NULL},
    - {N_("Hungarian"), "hu", "Zoltan Sutto", NULL},
    - {N_("Armenian"), "hy", "David Avsharyan", NULL},
    - {N_("Italian"), "it", "Salvatore di Maggio", NULL},
    - {N_("Japanese"), "ja", "Takashi Aihana", NULL},
    - {NULL, NULL, "Ryosuke Kutsuna", NULL},
    - {NULL, NULL, "Junichi Uekawa", NULL},
    - {NULL, NULL, "Taku Yasui", NULL},
    - {N_("Georgian"), "ka", "Temuri Doghonadze", NULL},
    - {N_("Korean"), "ko", "Sang-hyun S", NULL},
    - {NULL, NULL, "A Ho-seok Lee", NULL},
    - {NULL, NULL, "Kyeong-uk Son", NULL},
    - {N_("Lao"), "lo", "Anousak Souphavah", NULL},
    - {N_("Lithuanian"), "lt", "Laurynas Biveinis", NULL},
    - {NULL, NULL, "Gediminas Čičinskas", NULL},
    - {NULL, NULL, "Andrius Štikonas", NULL},
    - {N_("Macedonian"), "mk", "Tomislav Markovski", NULL},
    - {N_("Malay"), "ms_MY", "Muhammad Najmi bin Ahmad Zabidi", NULL},
    - {N_("Bokmål Norwegian"), "nb", "Hans Fredrik Nordhaug", NULL},
    - {NULL, NULL, "Hallvard Glad", NULL},
    - {NULL, NULL, "Petter Johan Olsen", NULL},
    - {NULL, NULL, "Espen Stefansen", NULL},
    - {N_("Nepali"), "ne", "Shyam Krishna Bal", NULL},
    - {N_("Dutch, Flemish"), "nl", "Vincent van Adrighem", NULL},
    - {N_("Occitan"), "oc", "Yannig Marchegay", NULL},
    - {N_("Polish"), "pl", "Krzysztof Foltman", NULL},
    - {NULL, NULL, "Paweł Godlewski", NULL},
    - {NULL, NULL, "Piotr Makowski", NULL},
    - {NULL, NULL, "Emil Nowak", NULL},
    - {NULL, NULL, "Przemysław Sułek", NULL},
    - {N_("Portuguese"), "pt", "Duarte Henriques", NULL},
    - {N_("Portuguese-Brazil"), "pt_BR", "Maurício de Lemos Rodrigues Collares Neto", NULL},
    - {N_("Portuguese-Brazil"), "pt_BR", "Rodrigo Luiz Marques Flores", NULL},
    - {N_("Russian"), "ru", "Dmitry Beloglazov", NULL},
    - {NULL, NULL, "Alexandre Prokoudine", NULL},
    - {NULL, NULL, "Sergey Volozhanin", NULL},
    - {N_("Slovak"), "sk", "Daniel Režný", NULL},
    - {NULL, NULL, "Richard Golier", NULL},
    - {NULL, NULL, "helix84", NULL},
    - {N_("Slovenian"), "sl", "Matjaz Horvat", NULL},
    - {N_("Serbian"), "sr", "Danilo Šegan", NULL},
    - {NULL, NULL, "Aleksandar Urosevic", NULL},
    - {N_("Swedish"), "sv", "Peter Hjalmarsson", NULL},
    - {N_("Swedish"), NULL, "Tore Lundqvist", NULL},
    - {NULL, NULL, "Christian Rose", NULL},
    - {N_("Telugu"), "te", "Mr. Subbaramaih", NULL},
    - {N_("Turkish"), "tr", "Serdar Soytetir", NULL},
    - {NULL, "tr", "Ahmet Alp Balkan", NULL},
    - {N_("Vietnamese"), "vi", N_("T.M.Thanh and the Gnome-Vi Team"), NULL},
    - {N_("Simplified Chinese"), "zh_CN", "Hashao", NULL},
    - {NULL, NULL, "Rocky S. Lee", NULL},
    - {NULL, NULL, "Funda Wang", NULL},
    - {N_("Traditional Chinese"), "zh_TW", "Hashao", NULL},
    - {NULL, NULL, "Rocky S. Lee", NULL},
    - {NULL, NULL, NULL, NULL}
    -};
    -
    -static void
    -add_developers(GString *str, const struct developer *list)
    -{
    - for (; list->name != NULL; list++) {
    - if (list->email != NULL) {
    - const gchar *proto = "mailto:";
    - if (strchr(list->email, ':') != NULL)
    - proto = "";
    - g_string_append_printf(str,
    - "<li><a href=\"%s%s\" title=\"%s\">%s</a>%s%s%s</li>",
    - proto,
    - list->email, list->email, _(list->name),
    - list->role ? " (" : "",
    - list->role ? _(list->role) : "",
    - list->role ? ")" : "");
    - } else {
    - g_string_append_printf(str, "<li>%s%s%s%s</li>",
    - _(list->name),
    - list->role ? " (" : "",
    - list->role ? _(list->role) : "",
    - list->role ? ")" : "");
    - }
    - }
    -}
    -
    -static void
    -add_translators(GString *str, const struct translator *list)
    -{
    - for (; list->name != NULL; list++) {
    - if (list->language && list->abbr) {
    - g_string_append_printf(str, "<dt>%s (%s)</dt>",
    - _(list->language), list->abbr);
    - }
    - if (list->email != NULL) {
    - g_string_append_printf(str,
    - "<dd><a href=\"mailto:%s\" title=\"%s\">%s</a></dd>",
    - list->email, list->email,
    - _(list->name));
    - } else {
    - g_string_append_printf(str, "<dd>%s</dd>", _(list->name));
    - }
    - }
    -}
    -
    void
    pidgin_dialogs_destroy_all()
    {
    @@ -515,290 +162,6 @@
    return win;
    }
    -void pidgin_dialogs_about(void)
    -{
    - GString *str;
    - char *tmp;
    - static GtkWidget *about = NULL;
    -
    - if (about != NULL) {
    - gtk_window_present(GTK_WINDOW(about));
    - return;
    - }
    -
    - str = g_string_sized_new(4096);
    -
    - g_string_append_printf(str,
    - "<h2>%s %s</h2>"
    - "<strong>(libpurple %s)<br/>%s</strong>",
    - PIDGIN_NAME, DISPLAY_VERSION,
    - purple_core_get_version(), REVISION);
    -
    - g_string_append_printf(str,
    - _("<p>%s is a messaging client based on libpurple which is capable of "
    - "connecting to multiple messaging services at once. %s is written "
    - "in C using GTK+. %s is released, and may be modified and "
    - "redistributed, under the terms of the GPL version 2 (or later). "
    - "A copy of the GPL is distributed with %s. %s is copyrighted by "
    - "its contributors, a list of whom is also distributed with %s. "
    - "There is no warranty for %s.</p>"), PIDGIN_NAME, PIDGIN_NAME,
    - PIDGIN_NAME, PIDGIN_NAME, PIDGIN_NAME, PIDGIN_NAME, PIDGIN_NAME);
    -
    - g_string_append_printf(str,
    - _("<h3>Helpful Resources</h3>"
    - "<ul>"
    - "<li><a href=\"%s\" title=\"%s\">Website</a></li>"
    - "<li><a href=\"%s\" title=\"%s\">Frequently Asked Questions</a></li>"
    - "<li>IRC Channel: #pidgin on irc.freenode.net</li>"
    - "<li>XMPP MUC: devel@conference.pidgin.im</li>"
    - "</ul>"),
    - PURPLE_WEBSITE, PURPLE_WEBSITE,
    - "https://developer.pidgin.im/wiki/FAQ",
    - "https://developer.pidgin.im/wiki/FAQ");
    -
    - g_string_append(str,
    - "<p><strong>Help for Oracle Employees</strong> is "
    - "available from your normal internal helpdesk or IT department. "
    - "The Pidgin developer and user communities cannot assist you in "
    - "the configuration or use of Pidgin within Oracle, as we know "
    - "nothing of Oracle's infrastructure.</p>");
    -
    - g_string_append_printf(str,
    - _("<p><strong>Help from other Pidgin users</strong> is available "
    - "by e-mailing <a href=\"mailto:%s\">%s</a>.<br/>"
    - "This is a <strong>public</strong> mailing list! "
    - "(<a href=\"%s\" title=\"%s\">archive</a>)<br/>"
    - "We can't help with third-party protocols or plugins!<br/>"
    - "This list's primary language is English. You "
    - "are welcome to post in another language, but the responses may "
    - "be less helpful.</p>"),
    - "support@pidgin.im", "support@pidgin.im",
    - "https://pidgin.im/pipermail/support/",
    - "https://pidgin.im/pipermail/support/");
    -
    - tmp = g_strdup_printf(_("About %s"), PIDGIN_NAME);
    - about = pidgin_build_help_dialog(tmp, "about", str);
    - g_signal_connect(G_OBJECT(about), "destroy", G_CALLBACK(gtk_widget_destroyed), &about);
    - g_free(tmp);
    -}
    -
    -void pidgin_dialogs_buildinfo(void)
    -{
    - GString *str;
    - char *tmp;
    - static GtkWidget *buildinfo = NULL;
    -
    - if (buildinfo != NULL) {
    - gtk_window_present(GTK_WINDOW(buildinfo));
    - return;
    - }
    -
    - str = g_string_sized_new(4096);
    -
    - g_string_append_printf(str,
    - "<h2>%s %s</h2>"
    - "<strong>(libpurple %s)<br/>%s</strong>",
    - PIDGIN_NAME, DISPLAY_VERSION, purple_core_get_version(), REVISION);
    -
    - g_string_append_printf(str, "<h3>%s</h3><dl>", _("Build Information"));
    -
    - /* The following is primarily intended for user/developer interaction and
    - thus ought not be translated */
    -
    -#ifdef CONFIG_ARGS /* win32 build doesn't use configure */
    - g_string_append(str, "<dt>Arguments to <em>./configure</em>:</dt><dd>" CONFIG_ARGS "</dd>");
    -#endif
    -#ifdef MESON_ARGS
    - g_string_append(str, "<dt>Arguments to <em>meson</em>:</dt><dd>" MESON_ARGS "</dd>");
    -#endif
    -
    -#ifndef _WIN32
    -#ifdef DEBUG
    - g_string_append(str, "<dt>Print debugging messages:</dt><dd>Yes</dd>");
    -#else
    - g_string_append(str, "<dt>Print debugging messages:</dt><dd>No</dd>");
    -#endif
    -#endif
    -
    -#ifdef PURPLE_PLUGINS
    - g_string_append(str, "<dt>Plugins:</dt><dd>Enabled</dd>");
    -#else
    - g_string_append(str, "<dt>Plugins:</dt><dd>Disabled</dd>");
    -#endif
    -
    - g_string_append(str, "<dt>SSL:</dt><dd>SSL support is present.</dd>");
    -
    - g_string_append_printf(str, "<dt>GTK+ Runtime:</dt><dd>%u.%u.%u</dd>"
    - "<dt>GLib Runtime:</dt><dd>%u.%u.%u</dd>",
    - gtk_major_version, gtk_minor_version, gtk_micro_version,
    - glib_major_version, glib_minor_version, glib_micro_version);
    -
    - g_string_append(str, "</dl><h3>Library Support</h3><dl>");
    -
    -#ifdef HAVE_CYRUS_SASL
    - g_string_append_printf(str, "<dt>Cyrus SASL:</dt><dd>Enabled</dd>");
    -#else
    - g_string_append_printf(str, "<dt>Cyrus SASL:</dt><dd>Disabled</dd>");
    -#endif
    -
    -#ifndef _WIN32
    -#ifdef HAVE_DBUS
    - g_string_append_printf(str, "<dt>D-Bus:</dt><dd>Enabled</dd>");
    -#else
    - g_string_append_printf(str, "<dt>D-Bus:</dt><dd>Disabled</dd>");
    -#endif
    -
    -#ifdef HAVE_EVOLUTION_ADDRESSBOOK
    - g_string_append_printf(str, "<dt>Evolution Addressbook:</dt><dd>Enabled</dd>");
    -#else
    - g_string_append_printf(str, "<dt>Evolution Addressbook:</dt><dd>Disabled</dd>");
    -#endif
    -#endif
    -
    -#ifdef HAVE_LIBGADU
    - g_string_append(str, "<dt>Gadu-Gadu library (libgadu):</dt><dd>External</dd>");
    -#else
    - g_string_append(str, "<dt>Gadu-Gadu library (libgadu):</dt><dd>Internal</dd>");
    -#endif
    -
    -#ifdef HAVE_GNUTLS
    - g_string_append(str, "<dt>GnuTLS:</dt><dd>Enabled</dd>");
    -#else
    - g_string_append(str, "<dt>GnuTLS:</dt><dd>Disabled</dd>");
    -#endif
    -
    -#ifdef USE_GSTREAMER
    - tmp = gst_version_string();
    - g_string_append_printf(str, "<dt>GStreamer:</dt><dd>%s</dd>", tmp);
    - g_free(tmp);
    -#else
    - g_string_append(str, "<dt>GStreamer:</dt><dd>Disabled</dd>");
    -#endif
    -
    -#ifndef _WIN32
    -#ifdef ENABLE_MONO
    - g_string_append(str, "<dt>Mono:</dt><dd>Enabled</dd>");
    -#else
    - g_string_append(str, "<dt>Mono:</dt><dd>Disabled</dd>");
    -#endif
    -#endif
    -
    -#ifdef HAVE_NSS
    - g_string_append(str, "<dt>Network Security Services (NSS):</dt><dd>Enabled</dd>");
    -#else
    - g_string_append(str, "<dt>Network Security Services (NSS):</dt><dd>Disabled</dd>");
    -#endif
    -
    -#ifdef USE_IDN
    - g_string_append(str, "<dt>UTF-8 DNS (IDN):</dt><dd>Enabled</dd>");
    -#else
    - g_string_append(str, "<dt>UTF-8 DNS (IDN):</dt><dd>Disabled</dd>");
    -#endif
    -
    -#ifdef USE_VV
    - g_string_append(str, "<dt>Voice and Video:</dt><dd>Enabled</dd>");
    -#else
    - g_string_append(str, "<dt>Voice and Video:</dt><dd>Disabled</dd>");
    -#endif
    -
    -#ifndef _WIN32
    -#ifdef LIBZEPHYR_EXT
    - g_string_append(str, "<dt>Zephyr library (libzephyr):</dt><dd>External</dd>");
    -#else
    - g_string_append(str, "<dt>Zephyr library (libzephyr):</dt><dd>Internal</dd>");
    -#endif
    -
    -#ifdef ZEPHYR_USES_KERBEROS
    - g_string_append(str, "<dt>Zephyr uses Kerberos:</dt><dd>Yes</dd>");
    -#else
    - g_string_append(str, "<dt>Zephyr uses Kerberos:</dt><dd>No</dd>");
    -#endif
    -#endif
    -
    - g_string_append(str, "</dl>");
    -
    - /* End of not to be translated section */
    -
    - tmp = g_strdup_printf(_("%s Build Information"), PIDGIN_NAME);
    - buildinfo = pidgin_build_help_dialog(tmp, "buildinfo", str);
    - g_signal_connect(G_OBJECT(buildinfo), "destroy", G_CALLBACK(gtk_widget_destroyed), &buildinfo);
    - g_free(tmp);
    -}
    -
    -void pidgin_dialogs_developers(void)
    -{
    - GString *str;
    - char *tmp;
    - static GtkWidget *developer_info = NULL;
    -
    - if (developer_info != NULL) {
    - gtk_window_present(GTK_WINDOW(developer_info));
    - return;
    - }
    -
    - str = g_string_sized_new(4096);
    -
    - /* Current Developers */
    - g_string_append_printf(str, "<h3>%s</h3><ul>",
    - _("Current Developers"));
    - add_developers(str, developers);
    - g_string_append(str, "</ul>");
    -
    - /* Crazy Patch Writers */
    - g_string_append_printf(str, "<h3>%s</h3><ul>",
    - _("Crazy Patch Writers"));
    - add_developers(str, patch_writers);
    - g_string_append(str, "</ul>");
    -
    - /* Retired Developers */
    - g_string_append_printf(str, "<h3>%s</h3><ul>",
    - _("Retired Developers"));
    - add_developers(str, retired_developers);
    - g_string_append(str, "</ul>");
    -
    - /* Retired Crazy Patch Writers */
    - g_string_append_printf(str, "<h3>%s</h3><ul>",
    - _("Retired Crazy Patch Writers"));
    - add_developers(str, retired_patch_writers);
    - g_string_append(str, "</ul>");
    -
    - tmp = g_strdup_printf(_("%s Developer Information"), PIDGIN_NAME);
    - developer_info = pidgin_build_help_dialog(tmp, "developer_info", str);
    - g_signal_connect(G_OBJECT(developer_info), "destroy", G_CALLBACK(gtk_widget_destroyed), &developer_info);
    - g_free(tmp);
    -}
    -
    -void pidgin_dialogs_translators(void)
    -{
    - GString *str;
    - char *tmp;
    - static GtkWidget *translator_info = NULL;
    -
    - if (translator_info != NULL) {
    - gtk_window_present(GTK_WINDOW(translator_info));
    - return;
    - }
    -
    - str = g_string_sized_new(4096);
    -
    - /* Current Translators */
    - g_string_append_printf(str, "<h3>%s</h3><dl>",
    - _("Current Translators"));
    - add_translators(str, translators);
    - g_string_append(str, "</dl>");
    -
    - /* Past Translators */
    - g_string_append_printf(str, "<h3>%s</h3><dl>",
    - _("Past Translators"));
    - add_translators(str, past_translators);
    - g_string_append(str, "</dl>");
    -
    - tmp = g_strdup_printf(_("%s Translator Information"), PIDGIN_NAME);
    - translator_info = pidgin_build_help_dialog(tmp, "translator_info", str);
    - g_signal_connect(G_OBJECT(translator_info), "destroy", G_CALLBACK(gtk_widget_destroyed), &translator_info);
    - g_free(tmp);
    -}
    -
    void pidgin_dialogs_plugins_info(void)
    {
    GString *str;
    --- a/pidgin/gtkdialogs.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtkdialogs.h Thu Nov 23 22:30:26 2017 -0600
    @@ -37,23 +37,19 @@
    /* Functions in gtkdialogs.c (these should actually stay in this file) */
    void pidgin_dialogs_destroy_all(void);
    -void pidgin_dialogs_about(void);
    -void pidgin_dialogs_buildinfo(void);
    -void pidgin_dialogs_developers(void);
    -void pidgin_dialogs_translators(void);
    void pidgin_dialogs_plugins_info(void);
    void pidgin_dialogs_im(void);
    -void pidgin_dialogs_im_with_user(PurpleAccount *, const char *);
    +void pidgin_dialogs_im_with_user(PurpleAccount *account, const char *username);
    void pidgin_dialogs_info(void);
    void pidgin_dialogs_log(void);
    -void pidgin_dialogs_alias_buddy(PurpleBuddy *);
    -void pidgin_dialogs_alias_chat(PurpleChat *);
    -void pidgin_dialogs_remove_buddy(PurpleBuddy *);
    -void pidgin_dialogs_remove_group(PurpleGroup *);
    -void pidgin_dialogs_remove_chat(PurpleChat *);
    -void pidgin_dialogs_remove_contact(PurpleContact *);
    -void pidgin_dialogs_merge_groups(PurpleGroup *, const char *);
    +void pidgin_dialogs_alias_buddy(PurpleBuddy *buddy);
    +void pidgin_dialogs_alias_chat(PurpleChat *chat);
    +void pidgin_dialogs_remove_buddy(PurpleBuddy *buddy);
    +void pidgin_dialogs_remove_group(PurpleGroup *group);
    +void pidgin_dialogs_remove_chat(PurpleChat *chat);
    +void pidgin_dialogs_remove_contact(PurpleContact *contact);
    +void pidgin_dialogs_merge_groups(PurpleGroup *group, const char *name);
    G_END_DECLS
    --- a/pidgin/gtkdocklet.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtkdocklet.c Thu Nov 23 22:30:26 2017 -0600
    @@ -681,7 +681,6 @@
    {
    static GtkWidget *menu = NULL;
    GtkWidget *menuitem;
    - GtkMenuPositionFunc pos_func = gtk_status_icon_position_menu;
    if (menu) {
    gtk_widget_destroy(menu);
    @@ -761,12 +760,9 @@
    #ifdef _WIN32
    g_signal_connect(menu, "leave-notify-event", G_CALLBACK(docklet_menu_leave_enter), NULL);
    g_signal_connect(menu, "enter-notify-event", G_CALLBACK(docklet_menu_leave_enter), NULL);
    - pos_func = NULL;
    #endif
    gtk_widget_show_all(menu);
    - gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
    - pos_func,
    - docklet, 0, gtk_get_current_event_time());
    + gtk_menu_popup_at_pointer(GTK_MENU(menu), NULL);
    }
    static void
    --- a/pidgin/gtkdocklet.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtkdocklet.h Thu Nov 23 22:30:26 2017 -0600
    @@ -45,7 +45,7 @@
    /**
    * pidgin_docklet_get_status_icon:
    *
    - * Returns: The #GtkStatusIcon used for the docklet.
    + * Returns: (transfer none): The #GtkStatusIcon used for the docklet.
    */
    GtkStatusIcon *pidgin_docklet_get_status_icon(void);
    --- a/pidgin/gtklog.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtklog.c Thu Nov 23 22:30:26 2017 -0600
    @@ -274,6 +274,7 @@
    {
    PidginLogViewer *lv = data[0];
    PurpleLog *log = data[1];
    + GtkTreeIter *iter = data[2];
    gchar *time = log_get_date(log);
    const char *name;
    char *tmp;
    @@ -308,6 +309,7 @@
    }
    else {
    g_free(time);
    + g_free(iter);
    g_return_if_reached();
    }
    @@ -318,7 +320,7 @@
    * either way. */
    data2 = g_new(gpointer, 3);
    data2[0] = lv->treestore;
    - data2[1] = data[3]; /* iter */
    + data2[1] = iter;
    data2[2] = log;
    purple_request_action(lv, NULL, _("Delete Log?"), tmp, 0,
    NULL,
    @@ -329,58 +331,62 @@
    g_free(tmp);
    }
    -static void log_show_popup_menu(GtkWidget *treeview, GdkEventButton *event, gpointer *data)
    +static GtkWidget *
    +log_create_popup_menu(GtkWidget *treeview, PidginLogViewer *lv, GtkTreeIter *iter)
    {
    - GtkWidget *menu = gtk_menu_new();
    - GtkWidget *menuitem = gtk_menu_item_new_with_label(_("Delete Log..."));
    + GValue val;
    + PurpleLog *log;
    + GtkWidget *menu;
    + GtkWidget *menuitem;
    - if (!purple_log_is_deletable((PurpleLog *)data[1]))
    - gtk_widget_set_sensitive(menuitem, FALSE);
    + val.g_type = 0;
    + gtk_tree_model_get_value(GTK_TREE_MODEL(lv->treestore), iter, 1, &val);
    + log = g_value_get_pointer(&val);
    + if (log == NULL) {
    + g_free(iter);
    + return NULL;
    + }
    +
    + menu = gtk_menu_new();
    + menuitem = gtk_menu_item_new_with_label(_("Delete Log..."));
    - g_signal_connect(menuitem, "activate", G_CALLBACK(log_delete_log_cb), data);
    - g_object_set_data_full(G_OBJECT(menuitem), "log-viewer-data", data, g_free);
    + if (purple_log_is_deletable(log)) {
    + gpointer *data = g_new(gpointer, 3);
    + data[0] = lv;
    + data[1] = log;
    + data[2] = iter;
    +
    + g_signal_connect(menuitem, "activate", G_CALLBACK(log_delete_log_cb), data);
    + g_object_set_data_full(G_OBJECT(menuitem), "log-viewer-data", data, g_free);
    + } else {
    + gtk_widget_set_sensitive(menuitem, FALSE);
    + }
    gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
    gtk_widget_show_all(menu);
    - gtk_menu_popup(GTK_MENU(menu), NULL, NULL, (GtkMenuPositionFunc)data[2], NULL,
    - (event != NULL) ? event->button : 0,
    - gdk_event_get_time((GdkEvent *)event));
    + return menu;
    }
    static gboolean log_button_press_cb(GtkWidget *treeview, GdkEventButton *event, PidginLogViewer *lv)
    {
    - if (event->type == GDK_BUTTON_PRESS && event->button == 3)
    - {
    + if (gdk_event_triggers_context_menu((GdkEvent *)event)) {
    GtkTreePath *path;
    GtkTreeIter *iter;
    - GValue val;
    - PurpleLog *log;
    - gpointer *data;
    + GtkWidget *menu;
    if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(treeview), event->x, event->y, &path, NULL, NULL, NULL))
    return FALSE;
    iter = g_new(GtkTreeIter, 1);
    gtk_tree_model_get_iter(GTK_TREE_MODEL(lv->treestore), iter, path);
    - val.g_type = 0;
    - gtk_tree_model_get_value(GTK_TREE_MODEL(lv->treestore), iter, 1, &val);
    gtk_tree_path_free(path);
    - log = g_value_get_pointer(&val);
    -
    - if (log == NULL)
    - {
    - g_free(iter);
    + menu = log_create_popup_menu(treeview, lv, iter);
    + if (menu) {
    + gtk_menu_popup_at_pointer(GTK_MENU(menu), (GdkEvent *)event);
    + return TRUE;
    + } else {
    return FALSE;
    }
    -
    - data = g_new(gpointer, 4);
    - data[0] = lv;
    - data[1] = log;
    - data[2] = NULL;
    - data[3] = iter;
    -
    - log_show_popup_menu(treeview, event, data);
    - return TRUE;
    }
    return FALSE;
    @@ -390,34 +396,22 @@
    {
    GtkTreeSelection *sel;
    GtkTreeIter *iter;
    - GValue val;
    - PurpleLog *log;
    - gpointer *data;
    + GtkWidget *menu;
    iter = g_new(GtkTreeIter, 1);
    sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(lv->treeview));
    - if (!gtk_tree_selection_get_selected(sel, NULL, iter))
    - {
    + if (!gtk_tree_selection_get_selected(sel, NULL, iter)) {
    + g_free(iter);
    return FALSE;
    }
    - val.g_type = 0;
    - gtk_tree_model_get_value(GTK_TREE_MODEL(lv->treestore),
    - iter, NODE_COLUMN, &val);
    -
    - log = g_value_get_pointer(&val);
    -
    - if (log == NULL)
    + menu = log_create_popup_menu(treeview, lv, iter);
    + if (menu) {
    + pidgin_menu_popup_at_treeview_selection(menu, treeview);
    + return TRUE;
    + } else {
    return FALSE;
    -
    - data = g_new(gpointer, 4);
    - data[0] = lv;
    - data[1] = log;
    - data[2] = pidgin_treeview_popup_menu_position_func;
    - data[3] = iter;
    -
    - log_show_popup_menu(treeview, NULL, data);
    - return TRUE;
    + }
    }
    static gboolean search_find_cb(gpointer data)
    --- a/pidgin/gtkmenutray.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtkmenutray.h Thu Nov 23 22:30:26 2017 -0600
    @@ -82,7 +82,7 @@
    *
    * Gets the box for the PidginMenuTray
    *
    - * Returns: The box that this menu tray is using
    + * Returns: (transfer none): The box that this menu tray is using
    */
    GtkWidget *pidgin_menu_tray_get_box(PidginMenuTray *menu_tray);
    --- a/pidgin/gtknotify.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtknotify.c Thu Nov 23 22:30:26 2017 -0600
    @@ -1336,13 +1336,7 @@
    GSList *argv = NULL, *argv_remote = NULL;
    gchar **usercmd_argv = NULL;
    - /* Replace some special characters like $ with their percent-encoded
    - value. This shouldn't be necessary because we shell-escape the entire
    - arg before exec'ing the browser, however, we had a report that a URL
    - containing $(xterm) was causing xterm to start on his system. This is
    - obviously a bug on his system, but it's pretty easy for us to protect
    - against it. */
    - uri_escaped = g_uri_escape_string(uri, ":;/%#,+?=&@", FALSE);
    + uri_escaped = purple_uri_escape_for_open(uri);
    web_browser = purple_prefs_get_string(PIDGIN_PREFS_ROOT
    "/browsers/browser");
    --- a/pidgin/gtknotify.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtknotify.h Thu Nov 23 22:30:26 2017 -0600
    @@ -83,8 +83,6 @@
    * pidgin_notify_emails_present:
    *
    * Presents mail dialog to the user.
    - *
    - * Returns: void.
    */
    void pidgin_notify_emails_present(void *data);
    --- a/pidgin/gtkplugin.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtkplugin.h Thu Nov 23 22:30:26 2017 -0600
    @@ -41,7 +41,7 @@
    typedef struct _PidginPluginInfo PidginPluginInfo;
    typedef struct _PidginPluginInfoClass PidginPluginInfoClass;
    -typedef GtkWidget *(*PidginPluginConfigFrameCb)(PurplePlugin *);
    +typedef GtkWidget *(*PidginPluginConfigFrameCb)(PurplePlugin *plugin);
    /**
    * PidginPluginInfo:
    --- a/pidgin/gtkpluginpref.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtkpluginpref.h Thu Nov 23 22:30:26 2017 -0600
    @@ -41,7 +41,7 @@
    *
    * Creates a Gtk Preference frame for a PurplePluginPrefFrame
    *
    - * Returns: The gtk preference frame
    + * Returns: (transfer full): The gtk preference frame
    */
    GtkWidget *pidgin_plugin_pref_create_frame(PurplePluginPrefFrame *frame);
    --- a/pidgin/gtkpounce.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtkpounce.c Thu Nov 23 22:30:26 2017 -0600
    @@ -1187,7 +1187,7 @@
    gtk_tree_path_free(path);
    gtk_tree_model_get(GTK_TREE_MODEL(dialog->model), &iter, POUNCES_MANAGER_COLUMN_POUNCE, &pounce, -1);
    - if ((pounce != NULL) && (event->button == 1) &&
    + if ((pounce != NULL) && (event->button == GDK_BUTTON_PRIMARY) &&
    (event->type == GDK_2BUTTON_PRESS))
    {
    pidgin_pounce_editor_show(NULL, NULL, pounce);
    --- a/pidgin/gtkprefs.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtkprefs.h Thu Nov 23 22:30:26 2017 -0600
    @@ -54,6 +54,8 @@
    * @page: The page to which the new checkbox will be added
    *
    * Add a new checkbox for a boolean preference
    + *
    + * Returns: (transfer full): The new checkbox
    */
    GtkWidget *pidgin_prefs_checkbox(const char *title, const char *key,
    GtkWidget *page);
    @@ -69,9 +71,9 @@
    *
    * Add a new spin button representing an int preference
    *
    - * Returns: An hbox containing both the label and the spinner. Can be
    - * used to set the widgets to sensitive or insensitive based on the
    - * value of a checkbox.
    + * Returns: (transfer full): An hbox containing both the label and the spinner. Can be
    + * used to set the widgets to sensitive or insensitive based on the
    + * value of a checkbox.
    */
    GtkWidget *pidgin_prefs_labeled_spin_button(GtkWidget *page,
    const gchar *title, const char *key, int min, int max, GtkSizeGroup *sg);
    @@ -85,9 +87,9 @@
    *
    * Add a new entry representing a string preference
    *
    - * Returns: An hbox containing both the label and the entry. Can be used to set
    - * the widgets to sensitive or insensitive based on the value of a
    - * checkbox.
    + * Returns: (transfer full) :An hbox containing both the label and the entry. Can be used to set
    + * the widgets to sensitive or insensitive based on the value of a
    + * checkbox.
    */
    GtkWidget *pidgin_prefs_labeled_entry(GtkWidget *page, const gchar *title,
    const char *key, GtkSizeGroup *sg);
    @@ -102,9 +104,9 @@
    * Add a new entry representing a password (string) preference
    * The entry will use a password-style text entry (the text is substituded)
    *
    - * Returns: An hbox containing both the label and the entry. Can be used to set
    - * the widgets to sensitive or insensitive based on the value of a
    - * checkbox.
    + * Returns: (transfer full): An hbox containing both the label and the entry. Can be used to set
    + * the widgets to sensitive or insensitive based on the value of a
    + * checkbox.
    */
    GtkWidget *pidgin_prefs_labeled_password(GtkWidget *page, const gchar *title,
    const char *key, GtkSizeGroup *sg);
    @@ -119,6 +121,8 @@
    * paired as label/value
    *
    * Add a new dropdown representing a preference of the specified type
    + *
    + * Returns: (transfer full): The new dropdown.
    */
    GtkWidget *pidgin_prefs_dropdown(GtkWidget *page, const gchar *title,
    PurplePrefType type, const char *key, ...);
    @@ -130,9 +134,11 @@
    * @type: The type of preference to be stored in the dropdown
    * @key: The key of the pref that will be represented by the dropdown
    * @menuitems: The choices to be added to the dropdown, choices should
    - * be paired as label/value
    + * be paired as label/value
    *
    * Add a new dropdown representing a preference of the specified type
    + *
    + * Returns: (transfer full): The new dropdown.
    */
    GtkWidget *pidgin_prefs_dropdown_from_list(GtkWidget *page,
    const gchar * title, PurplePrefType type, const char *key,
    --- a/pidgin/gtkrequest.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtkrequest.h Thu Nov 23 22:30:26 2017 -0600
    @@ -47,7 +47,7 @@
    *
    * Gets dialog window for specified libpurple request.
    *
    - * Returns: The dialog window.
    + * Returns: (transfer none): The dialog window.
    */
    GtkWindow *
    pidgin_request_get_dialog_window(void *ui_handle);
    --- a/pidgin/gtkroomlist.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtkroomlist.c Thu Nov 23 22:30:26 2017 -0600
    @@ -298,7 +298,7 @@
    GtkWidget *menu;
    static struct _menu_cb_info info; /* XXX? */
    - if (event->button != 3 || event->type != GDK_BUTTON_PRESS)
    + if (!gdk_event_triggers_context_menu((GdkEvent *)event))
    return FALSE;
    /* Here we figure out which room was clicked */
    @@ -323,7 +323,7 @@
    G_CALLBACK(do_add_room_cb), &info);
    gtk_widget_show_all(menu);
    - gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 3, event->time);
    + gtk_menu_popup_at_pointer(GTK_MENU(menu), (GdkEvent *)event);
    return FALSE;
    }
    --- a/pidgin/gtksavedstatuses.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtksavedstatuses.h Thu Nov 23 22:30:26 2017 -0600
    @@ -70,12 +70,12 @@
    /**
    * pidgin_status_menu:
    * @status: The default saved_status to show as 'selected'
    - * @callback: The callback to call when the selection changes
    + * @callback: (scope call): The callback to call when the selection changes
    *
    * Creates a dropdown menu of saved statuses and calls a callback
    * when one is selected
    *
    - * Returns: The menu widget
    + * Returns: (transfer full): The menu widget
    */
    GtkWidget *pidgin_status_menu(PurpleSavedStatus *status, GCallback callback);
    --- a/pidgin/gtksmiley-theme.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtksmiley-theme.h Thu Nov 23 22:30:26 2017 -0600
    @@ -148,7 +148,7 @@
    *
    * Returns the list of currently available smiley themes.
    *
    - * Returns: (transfer none): the #GList of #PidginSmileyTheme's.
    + * Returns: (transfer none) (element-type PidginSmileyTheme): the #GList of #PidginSmileyTheme's.
    */
    GList *
    pidgin_smiley_theme_get_all(void);
    --- a/pidgin/gtkstatusbox.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtkstatusbox.c Thu Nov 23 22:30:26 2017 -0600
    @@ -301,7 +301,7 @@
    static gboolean
    icon_box_press_cb(GtkWidget *widget, GdkEventButton *event, PidginStatusBox *box)
    {
    - if (event->button == 3) {
    + if (gdk_event_triggers_context_menu((GdkEvent *)event)) {
    GtkWidget *menu_item;
    const char *path;
    @@ -320,8 +320,7 @@
    || !*path)
    gtk_widget_set_sensitive(menu_item, FALSE);
    - gtk_menu_popup(GTK_MENU(box->icon_box_menu), NULL, NULL, NULL, NULL,
    - event->button, event->time);
    + gtk_menu_popup_at_pointer(GTK_MENU(box->icon_box_menu), (GdkEvent *)event);
    } else {
    choose_buddy_icon_cb(widget, box);
    @@ -1209,7 +1208,7 @@
    static gboolean button_released_cb(GtkWidget *widget, GdkEventButton *event, PidginStatusBox *box)
    {
    - if (event->button != 1)
    + if (event->button != GDK_BUTTOM_PRIMARY)
    return FALSE;
    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(box->toggle_button), FALSE);
    if (!box->webview_visible)
    @@ -1219,7 +1218,7 @@
    static gboolean button_pressed_cb(GtkWidget *widget, GdkEventButton *event, PidginStatusBox *box)
    {
    - if (event->button != 1)
    + if (event->button != GDK_BUTTOM_PRIMARY)
    return FALSE;
    gtk_combo_box_popup(GTK_COMBO_BOX(box));
    /* Disabled until button_released_cb works */
    --- a/pidgin/gtkstatusbox.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtkstatusbox.h Thu Nov 23 22:30:26 2017 -0600
    @@ -159,7 +159,7 @@
    GType pidgin_status_box_get_type (void) G_GNUC_CONST;
    GtkWidget *pidgin_status_box_new (void);
    -GtkWidget *pidgin_status_box_new_with_account (PurpleAccount *);
    +GtkWidget *pidgin_status_box_new_with_account (PurpleAccount *account);
    void
    pidgin_status_box_add(PidginStatusBox *status_box, PidginStatusBoxItemType type, GdkPixbuf *pixbuf, const char *text, const char *sec_text, gpointer data);
    --- /dev/null Thu Jan 01 00:00:00 1970 +0000
    +++ b/pidgin/gtkstyle.c Thu Nov 23 22:30:26 2017 -0600
    @@ -0,0 +1,70 @@
    +/*
    + * @file gtkstyle.c GTK+ Style utility functions
    + * @ingroup pidgin
    + */
    +
    +/* pidgin
    + *
    + * Pidgin is the legal property of its developers, whose names are too numerous
    + * to list here. Please refer to the COPYRIGHT file distributed with this
    + * source distribution.
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 2 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program; if not, write to the Free Software
    + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
    + *
    + */
    +#include "gtkstyle.h"
    +
    +/* Assume light mode */
    +static gboolean dark_mode_cache = FALSE;
    +
    +gboolean
    +pidgin_style_is_dark(GtkStyle *style) {
    + GdkColor bg;
    +
    + if (!style) {
    + return dark_mode_cache;
    + }
    +
    + bg = style->base[GTK_STATE_NORMAL];
    +
    + if (bg.red != 0xFFFF || bg.green != 0xFFFF || bg.blue != 0xFFFF) {
    + dark_mode_cache = ((int) bg.red + (int) bg.green + (int) bg.blue) < (65536 * 3 / 2);
    + }
    +
    + return dark_mode_cache;
    +}
    +
    +void
    +pidgin_style_adjust_contrast(GtkStyle *style, GdkColor *color) {
    + if (pidgin_style_is_dark(style)) {
    + gdouble r, g, b, h, s, v;
    +
    + r = ((gdouble) color->red) / 65535.0;
    + g = ((gdouble) color->green) / 65535.0;
    + b = ((gdouble) color->blue) / 65535.0;
    +
    + gtk_rgb_to_hsv(r, g, b, &h, &s, &v);
    +
    + v += 0.3;
    + v = v > 1.0 ? 1.0 : v;
    + s = 0.7;
    +
    + gtk_hsv_to_rgb(h, s, v, &r, &g, &b);
    +
    + color->red = (guint16) (r * 65535.0);
    + color->green = (guint16) (g * 65535.0);
    + color->blue = (guint16) (b * 65535.0);
    + }
    +}
    --- /dev/null Thu Jan 01 00:00:00 1970 +0000
    +++ b/pidgin/gtkstyle.h Thu Nov 23 22:30:26 2017 -0600
    @@ -0,0 +1,59 @@
    +/**
    + * @file gtkstyle.h GTK+ Style utility functions
    + * @ingroup pidgin
    + */
    +
    +/* pidgin
    + *
    + * Pidgin is the legal property of its developers, whose names are too numerous
    + * to list here. Please refer to the COPYRIGHT file distributed with this
    + * source distribution.
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 2 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program; if not, write to the Free Software
    + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
    + */
    +#ifndef _PIDGINSTYLE_H_
    +#define _PIDGINSTYLE_H_
    +
    +#include <gtk/gtk.h>
    +
    +G_BEGIN_DECLS
    +
    +/*@{*/
    +
    +/**
    + * Returns TRUE if dark mode is enabled and foreground colours should be invertred
    + *
    + * @param style The GtkStyle in use, or NULL to use a cached version.
    + *
    + * @return @c TRUE if dark mode, @c FALSE otherwise
    + */
    +
    +gboolean pidgin_style_is_dark(GtkStyle *style);
    +
    +/**
    + * Lighten a color if dark mode is enabled.
    + *
    + * @param style The GtkStyle in use.
    + *
    + * @param color Color to be lightened. Transformed color will be written here.
    + */
    +
    +void pidgin_style_adjust_contrast(GtkStyle *style, GdkColor *color);
    +
    +/*@}*/
    +
    +G_END_DECLS
    +
    +#endif /* _PIDGINSTYLE_H_ */
    --- a/pidgin/gtkutils.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtkutils.c Thu Nov 23 22:30:26 2017 -0600
    @@ -1183,7 +1183,6 @@
    gpointer data)
    {
    GtkWidget *widget;
    - GtkStyleContext *context;
    GtkRequisition requisition;
    GdkScreen *screen;
    GdkRectangle monitor;
    @@ -1309,7 +1308,8 @@
    }
    -void
    +#if !GTK_CHECK_VERSION(3,22,0)
    +static void
    pidgin_treeview_popup_menu_position_func(GtkMenu *menu,
    gint *x,
    gint *y,
    @@ -1330,6 +1330,36 @@
    *y += rect.y + rect.height;
    pidgin_menu_position_func_helper(menu, x, y, push_in, data);
    }
    +#endif
    +
    +
    +void
    +pidgin_menu_popup_at_treeview_selection(GtkWidget *menu, GtkWidget *treeview)
    +{
    +#if GTK_CHECK_VERSION(3,22,0)
    + GtkTreePath *path;
    + GtkTreeViewColumn *column;
    + GdkWindow *bin_window;
    + GdkRectangle rect;
    +
    + gtk_tree_view_get_cursor(GTK_TREE_VIEW(treeview), &path, &column);
    + g_return_if_fail(path != NULL);
    + if (column == NULL)
    + column = gtk_tree_view_get_column(GTK_TREE_VIEW(treeview), 0);
    + bin_window = gtk_tree_view_get_bin_window(GTK_TREE_VIEW(treeview));
    + gtk_tree_view_get_cell_area(GTK_TREE_VIEW(treeview), path, column, &rect);
    + gtk_menu_popup_at_rect(GTK_MENU(menu), bin_window, &rect,
    + GDK_GRAVITY_SOUTH_WEST, GDK_GRAVITY_NORTH_WEST,
    + NULL);
    +
    + gtk_tree_path_free(path);
    +#else
    + gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
    + pidgin_treeview_popup_menu_position_func, treeview,
    + 0, GDK_CURRENT_TIME);
    +#endif
    +}
    +
    static void dnd_image_ok_callback(_DndData *data, int choice)
    {
    --- a/pidgin/gtkutils.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtkutils.h Thu Nov 23 22:30:26 2017 -0600
    @@ -104,7 +104,7 @@
    * function puts both widgets in a nice GtkFrame. They're separated by an
    * attractive GtkSeparator.
    *
    - * Returns: The GtkFrame containing the toolbar and webview.
    + * Returns: (transfer full): The GtkFrame containing the toolbar and webview.
    */
    GtkWidget *pidgin_create_webview(gboolean editable, GtkWidget **webview_ret, GtkWidget **sw_ret);
    @@ -114,7 +114,7 @@
    *
    * Creates a small button
    *
    - * Returns: A GtkButton created from the image.
    + * Returns: (transfer full): A GtkButton created from the image.
    */
    GtkWidget *pidgin_create_small_button(GtkWidget *image);
    @@ -126,6 +126,8 @@
    * @resizable: Whether the window should be resizable (%TRUE) or not (%FALSE)
    *
    * Creates a new window
    + *
    + * Returns: (transfer full): A new window.
    */
    GtkWidget *pidgin_create_window(const char *title, guint border_width, const char *role, gboolean resizable);
    @@ -137,6 +139,8 @@
    * @resizable: Whether the window should be resizable (%TRUE) or not (%FALSE)
    *
    * Creates a new dialog window
    + *
    + * Returns: (transfer full): A new dialog window.
    */
    GtkWidget *pidgin_create_dialog(const char *title, guint border_width, const char *role, gboolean resizable);
    @@ -144,6 +148,8 @@
    * pidgin_create_video_widget:
    *
    * Creates a new drawing area suitable for displaying a video
    + *
    + * Returns: (transfer full): A new drawing area for displaying video.
    */
    GtkWidget *pidgin_create_video_widget(void);
    @@ -154,6 +160,8 @@
    * @spacing: the number of pixels to place by default between children
    *
    * Retrieves the main content box (vbox) from a pidgin dialog window
    + *
    + * Returns: (transfer none): The main vbox from @dialog.
    */
    GtkWidget *pidgin_dialog_get_vbox_with_properties(GtkDialog *dialog, gboolean homogeneous, gint spacing);
    @@ -162,19 +170,21 @@
    * @dialog: The dialog window
    *
    * Retrieves the main content box (vbox) from a pidgin dialog window
    + *
    + * Returns: (transfer none): the main vbox from @dialog.
    */
    GtkWidget *pidgin_dialog_get_vbox(GtkDialog *dialog);
    /**
    * pidgin_dialog_add_button:
    - * @dialog: The dialog window
    - * @label: The stock-id or the label for the button
    - * @callback: The callback function for the button
    - * @callbackdata: The user data for the callback function
    + * @dialog: The dialog window
    + * @label: The stock-id or the label for the button
    + * @callback: (scope call): The callback function for the button
    + * @callbackdata: The user data for the callback function
    *
    * Add a button to a dialog created by #pidgin_create_dialog.
    *
    - * Returns: The created button.
    + * Returns: (transfer full): The created button.
    */
    GtkWidget *pidgin_dialog_add_button(GtkDialog *dialog, const char *label,
    GCallback callback, gpointer callbackdata);
    @@ -184,6 +194,8 @@
    * @dialog: The dialog window
    *
    * Retrieves the action area (button box) from a pidgin dialog window
    + *
    + * Returns: (transfer none): The action area (button box) from @dialog.
    */
    GtkWidget *pidgin_dialog_get_action_area(GtkDialog *dialog);
    @@ -210,7 +222,7 @@
    /**
    * pidgin_toggle_sensitive_array:
    * @w: %NULL. Used for signal handlers.
    - * @data: The array containing the widgets to toggle.
    + * @data: (element-type GtkWidget): The array containing the widgets to toggle.
    *
    * Toggles the sensitivity of all widgets in a pointer array.
    */
    @@ -231,21 +243,21 @@
    *
    * Adds a separator to a menu.
    *
    - * Returns: The separator.
    + * Returns: (transfer full): The separator.
    */
    GtkWidget *pidgin_separator(GtkWidget *menu);
    /**
    * pidgin_new_check_item:
    - * @menu: The menu to which to append the check menu item.
    - * @str: The title to use for the newly created menu item.
    - * @cb: A function to call when the menu item is activated.
    - * @data: Data to pass to the signal function.
    - * @checked: The initial state of the check item
    + * @menu: The menu to which to append the check menu item.
    + * @str: The title to use for the newly created menu item.
    + * @cb: (scope call): A function to call when the menu item is activated.
    + * @data: Data to pass to the signal function.
    + * @checked: The initial state of the check item
    *
    * Creates a check menu item.
    *
    - * Returns: The newly created menu item.
    + * Returns: (transfer full): The newly created menu item.
    */
    GtkWidget *pidgin_new_check_item(GtkWidget *menu, const char *str,
    GCallback cb, gpointer data, gboolean checked);
    @@ -256,12 +268,12 @@
    * @mnemonic: The title for the menu item.
    * @icon: An icon to place to the left of the menu item,
    * or %NULL for no icon.
    - * @cb: A function to call when the menu item is activated.
    + * @cb: (scope call): A function to call when the menu item is activated.
    * @data: Data to pass to the signal function.
    *
    * Creates a menu item.
    *
    - * Returns: The newly created menu item.
    + * Returns: (transfer full): The newly created menu item.
    */
    GtkWidget *pidgin_new_menu_item(GtkWidget *menu, const char *mnemonic,
    const char *icon, GCallback cb, gpointer data);
    @@ -274,7 +286,7 @@
    *
    * Creates a button with the specified text and stock icon.
    *
    - * Returns: The button.
    + * Returns: (transfer full): The button.
    */
    GtkWidget *pidgin_pixbuf_button_from_stock(const char *text, const char *icon,
    PidginButtonOrientation style);
    @@ -285,7 +297,7 @@
    *
    * Creates a toolbar button with the stock icon.
    *
    - * Returns: The button.
    + * Returns: (transfer full): The button.
    */
    GtkWidget *pidgin_pixbuf_toolbar_button_from_stock(const char *stock);
    @@ -296,19 +308,19 @@
    *
    * Creates a HIG preferences frame.
    *
    - * Returns: The vbox to put things into.
    + * Returns: (transfer full): The vbox to put things into.
    */
    GtkWidget *pidgin_make_frame(GtkWidget *parent, const char *title);
    /**
    * pidgin_protocol_option_menu_new:
    - * @id: The protocol to select by default.
    - * @cb: The callback to call when a protocol is selected.
    + * @id: The protocol to select by default.
    + * @cb: (scope call): The callback to call when a protocol is selected.
    * @user_data: Data to pass to the callback function.
    *
    * Creates a drop-down option menu filled with protocols.
    *
    - * Returns: The drop-down option menu.
    + * Returns: (transfer full): The drop-down option menu.
    */
    GtkWidget *pidgin_protocol_option_menu_new(const char *id,
    GCallback cb,
    @@ -328,16 +340,16 @@
    /**
    * pidgin_account_option_menu_new:
    * @default_account: The account to select by default.
    - * @show_all: Whether or not to show all accounts, or just
    - * active accounts.
    - * @cb: The callback to call when an account is selected.
    - * @filter_func: A function for checking if an account should
    - * be shown. This can be NULL.
    - * @user_data: Data to pass to the callback function.
    + * @show_all: Whether or not to show all accounts, or just
    + * active accounts.
    + * @cb: (scope call): The callback to call when an account is selected.
    + * @filter_func: (scope call): A function for checking if an account should
    + * be shown. This can be NULL.
    + * @user_data: Data to pass to the callback function.
    *
    * Creates a drop-down option menu filled with accounts.
    *
    - * Returns: The drop-down option menu.
    + * Returns: (transfer full): The drop-down option menu.
    */
    GtkWidget *pidgin_account_option_menu_new(PurpleAccount *default_account,
    gboolean show_all, GCallback cb,
    @@ -350,7 +362,7 @@
    *
    * Gets the currently selected account from an account drop down box.
    *
    - * Returns: Returns the PurpleAccount that is currently selected.
    + * Returns: (transfer none): Returns the PurpleAccount that is currently selected.
    */
    PurpleAccount *pidgin_account_option_menu_get_selected(GtkWidget *optmenu);
    @@ -370,7 +382,7 @@
    * @optmenu: A menu for accounts, returned by pidgin_account_option_menu_new().
    * If @optmenu is not %NULL, it'll be updated when a username is chosen
    * from the autocomplete list.
    - * @filter_func: A function for checking if an autocomplete entry
    + * @filter_func: (scope call): A function for checking if an autocomplete entry
    * should be shown. This can be %NULL.
    * @user_data: The data to be passed to the filter_func function.
    *
    @@ -490,26 +502,15 @@
    gboolean *push_in, gpointer data);
    /**
    - * pidgin_treeview_popup_menu_position_func:
    - * @menu: The menu we are positioning.
    - * @x: Address of the gint representing the horizontal position
    - * where the menu shall be drawn. This is an output parameter.
    - * @y: Address of the gint representing the vertical position
    - * where the menu shall be drawn. This is an output parameter.
    - * @push_in: This is an output parameter?
    - * @user_data: Not used by this particular position function.
    + * pidgin_menu_popup_at_treeview_selection:
    + * @menu: The menu to show.
    + * @treeview: The treeview to use for positioning.
    *
    - * A valid GtkMenuPositionFunc. This is used to determine where
    - * to draw context menus when the menu is activated with the
    - * keyboard (shift+F10). If the menu is activated with the mouse,
    - * then you should just use GTK's built-in position function,
    - * because it does a better job of positioning the menu.
    + * Open a menu popup at the position determined by the selection of a given
    + * treeview. This function is similar to @gtk_menu_popup_at_pointer, but should
    + * be used when the menu is activated via a keyboard shortcut.
    */
    -void pidgin_treeview_popup_menu_position_func(GtkMenu *menu,
    - gint *x,
    - gint *y,
    - gboolean *push_in,
    - gpointer user_data);
    +void pidgin_menu_popup_at_treeview_selection(GtkWidget *menu, GtkWidget *treeview);
    /**
    * pidgin_dnd_file_manage:
    @@ -536,7 +537,7 @@
    * Returns the base image to represent the account, based on
    * the currently selected theme.
    *
    - * Returns: A newly-created pixbuf with a reference count of 1,
    + * Returns: (transfer full): A newly-created pixbuf with a reference count of 1,
    * or NULL if any of several error conditions occurred:
    * the file could not be opened, there was no loader
    * for the file's format, there was not enough memory
    @@ -553,7 +554,7 @@
    *
    * Creates a status icon for a given primitve
    *
    - * Returns: A GdkPixbuf, created from stock
    + * Returns: (transfer full): A GdkPixbuf, created from stock
    */
    GdkPixbuf * pidgin_create_status_icon(PurpleStatusPrimitive primitive, GtkWidget *w, const char *size);
    @@ -585,7 +586,7 @@
    *
    * Append a PurpleMenuAction to a menu.
    *
    - * Returns: The menuitem added.
    + * Returns: (transfer full): The menuitem added.
    */
    GtkWidget *pidgin_append_menu_action(GtkWidget *menu, PurpleMenuAction *act,
    gpointer gobject);
    @@ -625,7 +626,7 @@
    *
    * Creates a File Selection widget for choosing a buddy icon
    *
    - * Returns: The file dialog
    + * Returns: (transfer full): The file dialog
    */
    GtkWidget *pidgin_buddy_icon_chooser_new(GtkWindow *parent, void(*callback)(const char*,gpointer), gpointer data);
    @@ -657,7 +658,7 @@
    *
    * The type of callbacks passed to pidgin_make_mini_dialog().
    */
    -typedef void (*PidginUtilMiniDialogCallback)(gpointer user_data, GtkButton *);
    +typedef void (*PidginUtilMiniDialogCallback)(gpointer user_data, GtkButton *button);
    /**
    * pidgin_make_mini_dialog:
    @@ -684,7 +685,7 @@
    *
    * See <link linkend="pidgin-pidginstock">Stock Resources</link>.
    *
    - * Returns: A #PidginMiniDialog, suitable for passing to
    + * Returns: (transfer full): A #PidginMiniDialog, suitable for passing to
    * pidgin_blist_add_alert().
    */
    GtkWidget *pidgin_make_mini_dialog(PurpleConnection *handle,
    @@ -693,9 +694,24 @@
    /**
    * pidgin_make_mini_dialog_with_custom_icon:
    + * @custom_icon: A custom GdkPixbuf to use.
    + * @primary: The primary text
    + * @secondary: The secondary text, or %NULL for no description.
    + * @user_data: Data to pass to the callbacks
    + * @...: a %NULL-terminated list of button labels
    + * (<type>char *</type>) and callbacks
    + * (#PidginUtilMiniDialogCallback). @user_data will be
    + * passed as the first argument. (Callbacks may lack a
    + * second argument, or be %NULL to take no action when
    + * the corresponding button is pressed.) When a button is
    + * pressed, the callback (if any) will be called; when
    + * the callback returns the dialog will be destroyed.
    *
    * Does exactly what pidgin_make_mini_dialog() does, except you can specify
    * a custom icon for the dialog.
    + *
    + * Returns: (transfer full): A #PidginMiniDialog, suitable for passing to
    + * pidgin_blist_add_alert().
    */
    GtkWidget *pidgin_make_mini_dialog_with_custom_icon(PurpleConnection *gc,
    GdkPixbuf *custom_icon,
    @@ -759,13 +775,13 @@
    /**
    * pidgin_text_combo_box_entry_new:
    - * @default_item: Initial contents of GtkEntry
    - * @items: GList containing strings to add to GtkComboBox
    + * @default_item: Initial contents of GtkEntry
    + * @items: (element-type utf8): GList containing strings to add to GtkComboBox
    *
    * Create a simple text GtkComboBoxEntry equivalent
    *
    - * Returns: A newly created text GtkComboBox containing a GtkEntry
    - * child.
    + * Returns: (transfer full): A newly created text GtkComboBox containing a GtkEntry
    + * child.
    */
    GtkWidget *pidgin_text_combo_box_entry_new(const char *default_item, GList *items);
    @@ -809,7 +825,7 @@
    *
    * Add a labelled widget to a GtkBox
    *
    - * Returns: A GtkBox already added to the GtkBox containing the GtkLabel and the GtkWidget.
    + * Returns: (transfer full): A GtkBox already added to the GtkBox containing the GtkLabel and the GtkWidget.
    */
    GtkWidget *pidgin_add_widget_to_vbox(GtkBox *vbox, const char *widget_label, GtkSizeGroup *sg, GtkWidget *widget, gboolean expand, GtkWidget **p_label);
    @@ -820,7 +836,7 @@
    *
    * Create a GdkPixbuf from a chunk of image data.
    *
    - * Returns: A GdkPixbuf created from the image data, or NULL if
    + * Returns: (transfer full): A GdkPixbuf created from the image data, or NULL if
    * there was an error parsing the data.
    */
    GdkPixbuf *pidgin_pixbuf_from_data(const guchar *buf, gsize count);
    @@ -832,7 +848,7 @@
    *
    * Create a GdkPixbufAnimation from a chunk of image data.
    *
    - * Returns: A GdkPixbufAnimation created from the image data, or NULL if
    + * Returns: (transfer full): A GdkPixbufAnimation created from the image data, or NULL if
    * there was an error parsing the data.
    */
    GdkPixbufAnimation *pidgin_pixbuf_anim_from_data(const guchar *buf, gsize count);
    @@ -843,7 +859,7 @@
    *
    * Create a GdkPixbuf from a PurpleImage.
    *
    - * Returns: a GdkPixbuf created from the @image.
    + * Returns: (transfer full): a GdkPixbuf created from the @image.
    */
    GdkPixbuf *
    pidgin_pixbuf_from_image(PurpleImage *image);
    @@ -867,7 +883,7 @@
    * gdk-pixbuf where the aforementioned bug is fixed. However, it might be
    * nice to keep this function around for the debug message that it logs.
    *
    - * Returns: The GdkPixbuf if successful. Otherwise NULL is returned and
    + * Returns: (transfer full): The GdkPixbuf if successful. Otherwise NULL is returned and
    * a warning is logged.
    */
    GdkPixbuf *pidgin_pixbuf_new_from_file(const char *filename);
    @@ -893,7 +909,7 @@
    * gdk-pixbuf where the aforementioned bug is fixed. However, it might be
    * nice to keep this function around for the debug message that it logs.
    *
    - * Returns: The GdkPixbuf if successful. Otherwise NULL is returned and
    + * Returns: (transfer full): The GdkPixbuf if successful. Otherwise NULL is returned and
    * a warning is logged.
    */
    GdkPixbuf *pidgin_pixbuf_new_from_file_at_size(const char *filename, int width, int height);
    @@ -920,7 +936,7 @@
    * gdk-pixbuf where the aforementioned bug is fixed. However, it might be
    * nice to keep this function around for the debug message that it logs.
    *
    - * Returns: The GdkPixbuf if successful. Otherwise NULL is returned and
    + * Returns: (transfer full): The GdkPixbuf if successful. Otherwise NULL is returned and
    * a warning is logged.
    */
    GdkPixbuf *pidgin_pixbuf_new_from_file_at_scale(const char *filename, int width, int height, gboolean preserve_aspect_ratio);
    @@ -939,7 +955,7 @@
    * If new image is created, @src reference cound will be decreased and new image
    * with a ref count of 1 will be returned.
    *
    - * Returns: The image with proper sizing. %NULL in case of error.
    + * Returns: (transfer full): The image with proper sizing. %NULL in case of error.
    */
    GdkPixbuf *
    pidgin_pixbuf_scale_down(GdkPixbuf *src, guint max_width, guint max_height,
    @@ -955,6 +971,8 @@
    * @height: Desired widget height, or -1 for default
    *
    * Add scrollbars to a widget
    + *
    + * Returns: (transfer full): A scrolled window with @child packed inside of it.
    */
    GtkWidget *pidgin_make_scrollable(GtkWidget *child, GtkPolicyType hscrollbar_policy, GtkPolicyType vscrollbar_policy, GtkShadowType shadow_type, int width, int height);
    --- a/pidgin/gtkwebview.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtkwebview.c Thu Nov 23 22:30:26 2017 -0600
    @@ -745,7 +745,7 @@
    }
    static void
    -do_popup_menu(WebKitWebView *webview, int button, int time, int context,
    +do_popup_menu(WebKitWebView *webview, GdkEvent *event, int context,
    WebKitDOMNode *node, const char *uri)
    {
    GtkWidget *menu;
    @@ -929,7 +929,7 @@
    g_signal_emit_by_name(G_OBJECT(webview), "populate-popup", menu);
    gtk_menu_attach_to_widget(GTK_MENU(menu), GTK_WIDGET(webview), NULL);
    - gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, button, time);
    + gtk_menu_popup_at_pointer(GTK_MENU(menu), event);
    }
    static gboolean
    @@ -958,8 +958,7 @@
    }
    }
    - do_popup_menu(webview, 0, gtk_get_current_event_time(),
    - context, node, uri);
    + do_popup_menu(webview, NULL, context, node, uri);
    g_free(uri);
    @@ -969,7 +968,7 @@
    static gboolean
    webview_button_pressed(WebKitWebView *webview, GdkEventButton *event)
    {
    - if (event->type == GDK_BUTTON_PRESS && event->button == 3) {
    + if (gdk_event_triggers_context_menu((GdkEvent *)event)) {
    WebKitHitTestResult *hit;
    int context;
    WebKitDOMNode *node;
    @@ -982,7 +981,7 @@
    "link-uri", &uri,
    NULL);
    - do_popup_menu(webview, event->button, event->time, context,
    + do_popup_menu(webview, (GdkEvent *)event, context,
    node, uri);
    g_free(uri);
    --- a/pidgin/gtkwebview.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtkwebview.h Thu Nov 23 22:30:26 2017 -0600
    @@ -101,13 +101,13 @@
    GList *protocols;
    - void (*buttons_update)(PidginWebView *, PidginWebViewButtons);
    - void (*toggle_format)(PidginWebView *, PidginWebViewButtons);
    - void (*clear_format)(PidginWebView *);
    - void (*update_format)(PidginWebView *);
    - void (*changed)(PidginWebView *);
    - void (*html_appended)(PidginWebView *, WebKitDOMRange *);
    - gboolean (*insert_image)(PidginWebView *, PurpleImage *);
    + void (*buttons_update)(PidginWebView *webview, PidginWebViewButtons buttons);
    + void (*toggle_format)(PidginWebView *webview, PidginWebViewButtons buttons);
    + void (*clear_format)(PidginWebView *webview);
    + void (*update_format)(PidginWebView *webview);
    + void (*changed)(PidginWebView *webview);
    + void (*html_appended)(PidginWebView *webview, WebKitDOMRange *range);
    + gboolean (*insert_image)(PidginWebView *webview, PurpleImage *image);
    };
    G_BEGIN_DECLS
    @@ -602,7 +602,7 @@
    pidgin_webview_get_DOM_height(PidginWebView *webview);
    /**
    - * pidgin_webview_get_DOM_height:
    + * pidgin_webview_get_font_size:
    * @webview: the PidginWebView.
    *
    * Look for the font size used on the current webview
    @@ -666,7 +666,7 @@
    *
    * Returns the toolbar associated with the webview.
    *
    - * Returns: the toolbar.
    + * Returns: (transfer none): the toolbar.
    */
    GtkWidget *
    pidgin_webview_get_toolbar(PidginWebView *webview);
    --- a/pidgin/gtkwebviewtoolbar.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtkwebviewtoolbar.c Thu Nov 23 22:30:26 2017 -0600
    @@ -667,7 +667,7 @@
    PidginWebViewToolbar *toolbar)
    {
    if ((event->type == GDK_KEY_PRESS && event->key.keyval == GDK_KEY_Escape) ||
    - (event->type == GDK_BUTTON_PRESS && event->button.button == 1))
    + (event->type == GDK_BUTTON_PRESS && event->button.button == GDK_BUTTON_PRIMARY))
    {
    close_smiley_dialog(toolbar);
    return TRUE;
    @@ -1187,6 +1187,19 @@
    update_buttons(toolbar);
    }
    +#if GTK_CHECK_VERSION(3,22,0)
    +
    +static void
    +pidgin_menu_clicked(GtkWidget *button, GtkMenu *menu)
    +{
    + if (gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(button))) {
    + gtk_widget_show_all(GTK_WIDGET(menu));
    + gtk_menu_popup_at_widget(menu, button, GDK_GRAVITY_SOUTH_WEST, GDK_GRAVITY_NORTH_WEST, NULL);
    + }
    +}
    +
    +#else /* GTK+ 3.22.0 */
    +
    /* This comes from gtkmenutoolbutton.c from gtk+
    * Copyright (C) 2003 Ricardo Fernandez Pascual
    * Copyright (C) 2004 Paolo Borelli
    @@ -1223,6 +1236,8 @@
    }
    }
    +#endif /* GTK+ 3.22.0 */
    +
    static void
    pidgin_menu_deactivate(GtkWidget *menu, GtkToggleButton *button)
    {
    @@ -1245,7 +1260,7 @@
    GtkWidget *item;
    gboolean wide;
    - if (event->button != 3)
    + if (!gdk_event_triggers_context_menu((GdkEvent *)event))
    return FALSE;
    wide = gtk_widget_get_visible(priv->wide_view);
    @@ -1256,8 +1271,7 @@
    gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
    gtk_widget_show(item);
    - gtk_menu_popup(GTK_MENU(menu), NULL, NULL, pidgin_menu_position_func_helper,
    - widget, event->button, event->time);
    + gtk_menu_popup_at_pointer(GTK_MENU(menu), (GdkEvent *)event);
    return TRUE;
    }
    --- a/pidgin/gtkwebviewtoolbar.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtkwebviewtoolbar.h Thu Nov 23 22:30:26 2017 -0600
    @@ -110,7 +110,7 @@
    *
    * Returns the wide toolbar variant widget for the given @toolbar.
    *
    - * Returns: the wide toolbar variant.
    + * Returns: (transfer none): the wide toolbar variant.
    */
    GtkWidget *
    pidgin_webviewtoolbar_get_wide_view(PidginWebViewToolbar *toolbar);
    @@ -121,7 +121,7 @@
    *
    * Returns the lean toolbar variant widget for the given @toolbar.
    *
    - * Returns: the lean toolbar variant.
    + * Returns: (transfer none): the lean toolbar variant.
    */
    GtkWidget *
    pidgin_webviewtoolbar_get_lean_view(PidginWebViewToolbar *toolbar);
    --- a/pidgin/gtkwhiteboard.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/gtkwhiteboard.c Thu Nov 23 22:30:26 2017 -0600
    @@ -423,7 +423,7 @@
    brush_state = PIDGIN_WHITEBOARD_BRUSH_DOWN;
    - if(event->button == 1 && gtkwb->priv->cr != NULL)
    + if(event->button == GDK_BUTTON_PRIMARY && gtkwb->priv->cr != NULL)
    {
    /* Check if draw_list has contents; if so, clear it */
    if(draw_list)
    @@ -561,7 +561,7 @@
    }
    brush_state = PIDGIN_WHITEBOARD_BRUSH_UP;
    - if(event->button == 1 && gtkwb->priv->cr != NULL)
    + if(event->button == GDK_BUTTON_PRIMARY && gtkwb->priv->cr != NULL)
    {
    /* If the brush was never moved, express two sets of two deltas That's a
    * 'point,' but not for Yahoo!
    Binary file pidgin/logo.png has changed
    --- a/pidgin/meson.build Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/meson.build Thu Nov 23 22:30:26 2017 -0600
    @@ -35,6 +35,7 @@
    'gtksound.c',
    'gtkstatus-icon-theme.c',
    'gtkstatusbox.c',
    + 'gtkstyle.c',
    'gtkutils.c',
    'gtkwebview.c',
    'gtkwebviewtoolbar.c',
    @@ -42,7 +43,8 @@
    'gtkxfer.c',
    'libpidgin.c',
    'minidialog.c',
    - 'pidgintooltip.c'
    + 'pidginabout.c',
    + 'pidgintooltip.c',
    ]
    libpidgin_headers = [
    @@ -83,6 +85,7 @@
    'gtksound.h',
    'gtkstatus-icon-theme.h',
    'gtkstatusbox.h',
    + 'gtkstyle.h',
    'pidginstock.h',
    'gtkutils.h',
    'gtkwebview.h',
    @@ -90,15 +93,16 @@
    'gtkwhiteboard.h',
    'gtkxfer.h',
    'minidialog.h',
    + 'pidginabout.h',
    'pidgintooltip.h',
    - 'pidgin.h'
    + 'pidgin.h',
    ]
    pidgin_SOURCES = [
    'pidgin.c'
    ]
    -pidgin_resource = gnome.compile_resources('pidgin.gresource', 'pidgin.gresource.xml',
    +pidgin_resource = gnome.compile_resources('pidginresources', 'pidgin.gresource.xml',
    c_name : 'pidgin')
    libpidgin_SOURCES += pidgin_resource
    @@ -149,7 +153,20 @@
    libpidgin_SOURCES,
    include_directories : [toplevel_inc],
    version : PURPLE_LIB_VERSION,
    - dependencies : [gtk, gstreamer_video, webkit, enchant, dbus, x11, GCR, IOKIT, libpurple_dep, glib, math],
    + dependencies : [
    + dbus,
    + enchant,
    + GCR,
    + glib,
    + gstreamer_video,
    + gtk,
    + IOKIT,
    + json,
    + math,
    + webkit,
    + x11,
    + libpurple_dep,
    + ],
    install : true)
    libpidgin_dep = declare_dependency(
    include_directories : [toplevel_inc, libpidgin_inc],
    @@ -168,11 +185,15 @@
    # pidgin_LDFLAGS += -mwindows
    endif
    - configure_file(input : 'data/pidgin-3.pc.in',
    - output : 'pidgin-3.pc',
    - configuration : pkg_conf,
    - install : true,
    - install_dir : get_option('libdir') + '/pkgconfig')
    + pkgconfig.generate(
    + name : 'Pidgin',
    + description : 'Pidgin is a GTK3-based instant messenger application.',
    + version : purple_display_version,
    + filebase : 'pidgin-3',
    + subdirs : 'pidgin',
    + libraries : [libpidgin],
    + requires : ['gtk+-3.0', 'webkitgtk-3.0', 'purple-3'],
    + variables : ['plugindir=${libdir}/pidgin'])
    if INSTALL_I18N
    DESKTOP_FILE = 'im.pidgin.Pidgin.desktop'
    @@ -204,7 +225,7 @@
    gnome.generate_gir(libpidgin,
    sources : introspection_sources,
    - includes : ['GObject-2.0', 'Gtk-3.0', libpurple_gir[0]],
    + includes : ['GObject-2.0', 'Gtk-3.0', libpurple_gir[0], 'WebKit-3.0'],
    namespace : 'Pidgin',
    symbol_prefix : 'pidgin',
    identifier_prefix : 'Pidgin',
    --- a/pidgin/minidialog.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/minidialog.h Thu Nov 23 22:30:26 2017 -0600
    @@ -187,7 +187,7 @@
    /**
    * pidgin_mini_dialog_set_link_callback:
    * @mini_dialog: a mini-dialog
    - * @cb: the callback to invoke
    + * @cb: (scope call): the callback to invoke
    * @user_data: the user data to pass to the callback
    *
    * Sets a callback which gets invoked when a hyperlink in the dialog's description is clicked on.
    @@ -218,7 +218,7 @@
    * pidgin_mini_dialog_add_button:
    * @mini_dialog: a mini-dialog
    * @text: the text to display on the new button
    - * @clicked_cb: the function to call when the button is clicked
    + * @clicked_cb: (scope call): the function to call when the button is clicked
    * @user_data: arbitrary data to pass to @clicked_cb when it is
    * called.
    *
    @@ -232,6 +232,11 @@
    /**
    * pidgin_mini_dialog_add_non_closing_button:
    + * @mini_dialog: a mini-dialog
    + * @text: the text to display on the new button
    + * @clicked_cb: (scope call): the function to call when the button is clicked
    + * @user_data: arbitrary data to pass to @clicked_cb when it is
    + * called.
    *
    * Equivalent to pidgin_mini_dialog_add_button(), the only difference
    * is that the mini-dialog won't be closed after the button is clicked.
    --- a/pidgin/pidgin.gresource.xml Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/pidgin.gresource.xml Thu Nov 23 22:30:26 2017 -0600
    @@ -1,6 +1,14 @@
    <?xml version="1.0" encoding="UTF-8"?>
    <gresources>
    - <gresource prefix="/im/pidgin/Pidgin">
    + <gresource prefix="/im/pidgin/Pidgin/">
    + <file>logo.png</file>
    + </gresource>
    + <gresource prefix="/im/pidgin/Pidgin/Debug">
    <file compressed="true">gtkdebug.html</file>
    </gresource>
    + <gresource prefix="/im/pidgin/Pidgin/About">
    + <file compressed="true">about.ui</file>
    + <file compressed="true">about.html</file>
    + <file compressed="true">credits.json</file>
    + </gresource>
    </gresources>
    --- /dev/null Thu Jan 01 00:00:00 1970 +0000
    +++ b/pidgin/pidginabout.c Thu Nov 23 22:30:26 2017 -0600
    @@ -0,0 +1,488 @@
    +/* Purple is the legal property of its developers, whose names are too numerous
    + * to list here. Please refer to the COPYRIGHT file distributed with this
    + * source distribution.
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 2 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program; if not, write to the Free Software
    + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
    + */
    +#include <gdk-pixbuf/gdk-pixbuf.h>
    +#include <json-glib/json-glib.h>
    +
    +#include "package_revision.h"
    +#include "pidginabout.h"
    +#include "pidginresources.h"
    +#include "internal.h"
    +#include "gtkutils.h"
    +#include "gtkwebview.h"
    +
    +#include <stdio.h>
    +
    +#ifdef HAVE_MESON_CONFIG
    +#include "meson-config.h"
    +#endif
    +
    +struct _PidginAboutDialog {
    + GtkDialog parent;
    +
    + /*< private >*/
    + PidginAboutDialogPrivate *priv;
    +};
    +
    +struct _PidginAboutDialogClass {
    + GtkDialogClass parent;
    +
    + void (*_pidgin_reserved1)(void);
    + void (*_pidgin_reserved2)(void);
    + void (*_pidgin_reserved3)(void);
    + void (*_pidgin_reserved4)(void);
    +};
    +
    +struct _PidginAboutDialogPrivate {
    + GtkWidget *close_button;
    + GtkWidget *application_name;
    + GtkWidget *stack;
    +
    + GtkWidget *main_scrolled_window;
    +
    + GtkWidget *developers_page;
    + GtkWidget *developers_treeview;
    + GtkTreeStore *developers_store;
    +
    + GtkWidget *translators_page;
    + GtkWidget *translators_treeview;
    + GtkTreeStore *translators_store;
    +
    + GtkWidget *build_info_page;
    + GtkWidget *build_info_treeview;
    + GtkTreeStore *build_info_store;
    +};
    +
    +/******************************************************************************
    + * Helpers
    + *****************************************************************************/
    +static void
    +_pidgin_about_dialog_load_application_name(PidginAboutDialog *about) {
    + gchar *label = g_strdup_printf(
    + "%s %s",
    + PIDGIN_NAME,
    + VERSION
    + );
    +
    + gtk_label_set_text(GTK_LABEL(about->priv->application_name), label);
    +
    + g_free(label);
    +}
    +
    +static void
    +_pidgin_about_dialog_load_main_page(PidginAboutDialog *about) {
    + GtkWidget *webview = NULL;
    + GInputStream *istream = NULL;
    + GString *str = NULL;
    + gchar buffer[8192];
    + gssize read = 0;
    +
    + /* create our webview */
    + webview = pidgin_webview_new(FALSE);
    + pidgin_setup_webview(webview);
    + pidgin_webview_set_format_functions(PIDGIN_WEBVIEW(webview), PIDGIN_WEBVIEW_ALL ^ PIDGIN_WEBVIEW_SMILEY);
    +
    + gtk_container_add(GTK_CONTAINER(about->priv->main_scrolled_window), webview);
    +
    + /* now load the html */
    + istream = g_resource_open_stream(
    + pidgin_get_resource(),
    + "/im/pidgin/Pidgin/About/about.html",
    + G_RESOURCE_LOOKUP_FLAGS_NONE,
    + NULL
    + );
    +
    + str = g_string_new("");
    +
    + while((read = g_input_stream_read(istream, buffer, sizeof(buffer), NULL, NULL)) > 0) {
    + g_string_append_len(str, (gchar *)buffer, read);
    + }
    +
    + pidgin_webview_append_html(PIDGIN_WEBVIEW(webview), str->str);
    +
    + g_string_free(str, TRUE);
    +
    + g_input_stream_close(istream, NULL, NULL);
    +}
    +
    +static void
    +_pidgin_about_dialog_load_json(GtkTreeStore *store, const gchar *json_section) {
    + GInputStream *istream = NULL;
    + GList *l = NULL, *sections = NULL;
    + GError *error = NULL;
    + JsonParser *parser = NULL;
    + JsonNode *root_node = NULL;
    + JsonObject *root_object = NULL;
    + JsonArray *sections_array = NULL;
    +
    + /* get a stream to the credits resource */
    + istream = g_resource_open_stream(
    + pidgin_get_resource(),
    + "/im/pidgin/Pidgin/About/credits.json",
    + G_RESOURCE_LOOKUP_FLAGS_NONE,
    + NULL
    + );
    +
    + /* create our parser */
    + parser = json_parser_new();
    +
    + if(!json_parser_load_from_stream(parser, istream, NULL, &error)) {
    + g_critical("%s", error->message);
    + }
    +
    + root_node = json_parser_get_root(parser);
    + root_object = json_node_get_object(root_node);
    +
    + sections_array = json_object_get_array_member(root_object, json_section);
    + sections = json_array_get_elements(sections_array);
    +
    + for(l = sections; l; l = l->next) {
    + GtkTreeIter section_iter;
    + JsonObject *section = json_node_get_object(l->data);
    + JsonArray *people = NULL;
    + gchar *markup = NULL;
    + guint idx = 0, n_people = 0;
    +
    + markup = g_strdup_printf(
    + "<span font_weight=\"bold\" font_size=\"large\">%s</span>",
    + json_object_get_string_member(section, "title")
    + );
    +
    + gtk_tree_store_append(store, &section_iter, NULL);
    + gtk_tree_store_set(
    + store,
    + &section_iter,
    + 0, markup,
    + 1, 0.5f,
    + -1
    + );
    +
    + g_free(markup);
    +
    + people = json_object_get_array_member(section, "people");
    + n_people = json_array_get_length(people);
    +
    + for(idx = 0; idx < n_people; idx++) {
    + GtkTreeIter person_iter;
    +
    + gtk_tree_store_append(store, &person_iter, &section_iter);
    + gtk_tree_store_set(
    + store,
    + &person_iter,
    + 0, json_array_get_string_element(people, idx),
    + 1, 0.5f,
    + -1
    + );
    + }
    + }
    +
    + g_list_free(sections);
    +
    + /* clean up */
    + g_object_unref(G_OBJECT(parser));
    +
    + g_input_stream_close(istream, NULL, NULL);
    +}
    +
    +static void
    +_pidgin_about_dialog_load_developers(PidginAboutDialog *about) {
    + _pidgin_about_dialog_load_json(about->priv->developers_store, "developers");
    +}
    +
    +static void
    +_pidgin_about_dialog_load_translators(PidginAboutDialog *about) {
    + _pidgin_about_dialog_load_json(about->priv->translators_store, "languages");
    +}
    +
    +static void
    +_pidgin_about_dialog_add_build_args(
    + PidginAboutDialog *about,
    + const gchar *title,
    + const gchar *build_args
    +) {
    + GtkTreeIter section, value;
    + gchar **splits = NULL;
    + gchar *markup = NULL;
    + gint idx = 0;
    +
    + markup = g_strdup_printf("<span font-weight=\"bold\">%s</span>", title);
    + gtk_tree_store_append(about->priv->build_info_store, &section, NULL);
    + gtk_tree_store_set(
    + about->priv->build_info_store,
    + &section,
    + 0, markup,
    + -1
    + );
    + g_free(markup);
    +
    + /* now walk through the arguments and add them */
    + splits = g_strsplit(build_args, " ", -1);
    + for(idx = 0; splits[idx]; idx++) {
    + gchar **value_split = g_strsplit(splits[idx], "=", 2);
    +
    + if(value_split[0] == NULL || value_split[0][0] == '\0') {
    + continue;
    + }
    +
    + gtk_tree_store_append(about->priv->build_info_store, &value, &section);
    + gtk_tree_store_set(
    + about->priv->build_info_store,
    + &value,
    + 0, value_split[0] ? value_split[0] : "",
    + 1, value_split[1] ? value_split[1] : "",
    + -1
    + );
    +
    + g_strfreev(value_split);
    + }
    +
    + g_strfreev(splits);
    +}
    +
    +static void
    +_pidgin_about_dialog_build_info_add_version(
    + GtkTreeStore *store,
    + GtkTreeIter *section,
    + const gchar *title,
    + guint major,
    + guint minor,
    + guint micro
    +) {
    + GtkTreeIter item;
    + gchar *version = g_strdup_printf("%u.%u.%u", major, minor, micro);
    +
    + gtk_tree_store_append(store, &item, section);
    + gtk_tree_store_set(
    + store, &item,
    + 0, title,
    + 1, version,
    + -1
    + );
    + g_free(version);
    +}
    +
    +static void
    +_pidgin_about_dialog_load_build_info(PidginAboutDialog *about) {
    + GtkTreeIter section, item;
    + gchar *markup = NULL;
    +
    + /* create the section */
    + markup = g_strdup_printf(
    + "<span font-weight=\"bold\">%s</span>",
    + _("Build Information")
    + );
    + gtk_tree_store_append(about->priv->build_info_store, &section, NULL);
    + gtk_tree_store_set(
    + about->priv->build_info_store,
    + &section,
    + 0, markup,
    + -1
    + );
    + g_free(markup);
    +
    + /* add the commit hash */
    + gtk_tree_store_append(about->priv->build_info_store, &item, &section);
    + gtk_tree_store_set(
    + about->priv->build_info_store,
    + &item,
    + 0, "Commit Hash",
    + 1, REVISION,
    + -1
    + );
    +
    + /* add the purple version */
    + _pidgin_about_dialog_build_info_add_version(
    + about->priv->build_info_store,
    + &section,
    + _("Purple Version"),
    + PURPLE_MAJOR_VERSION,
    + PURPLE_MINOR_VERSION,
    + PURPLE_MICRO_VERSION
    + );
    +
    + /* add the glib version */
    + _pidgin_about_dialog_build_info_add_version(
    + about->priv->build_info_store,
    + &section,
    + _("GLib Version"),
    + GLIB_MAJOR_VERSION,
    + GLIB_MINOR_VERSION,
    + GLIB_MICRO_VERSION
    + );
    +
    + /* add the gtk version */
    + _pidgin_about_dialog_build_info_add_version(
    + about->priv->build_info_store,
    + &section,
    + _("GTK+ Version"),
    + GTK_MAJOR_VERSION,
    + GTK_MINOR_VERSION,
    + GTK_MICRO_VERSION
    + );
    +}
    +
    +static void
    +_pidgin_about_dialog_load_runtime_info(PidginAboutDialog *about) {
    + GtkTreeIter section;
    + gchar *markup = NULL;
    +
    + /* create the section */
    + markup = g_strdup_printf(
    + "<span font-weight=\"bold\">%s</span>",
    + _("Runtime Information")
    + );
    + gtk_tree_store_append(about->priv->build_info_store, &section, NULL);
    + gtk_tree_store_set(
    + about->priv->build_info_store,
    + &section,
    + 0, markup,
    + -1
    + );
    + g_free(markup);
    +
    + /* add the purple version */
    + _pidgin_about_dialog_build_info_add_version(
    + about->priv->build_info_store,
    + &section,
    + _("Purple Version"),
    + purple_major_version,
    + purple_minor_version,
    + purple_micro_version
    + );
    +
    + /* add the glib version */
    + _pidgin_about_dialog_build_info_add_version(
    + about->priv->build_info_store,
    + &section,
    + _("GLib Version"),
    + glib_major_version,
    + glib_minor_version,
    + glib_micro_version
    + );
    +
    + /* add the gtk version */
    + _pidgin_about_dialog_build_info_add_version(
    + about->priv->build_info_store,
    + &section,
    + _("GTK+ Version"),
    + gtk_major_version,
    + gtk_minor_version,
    + gtk_micro_version
    + );
    +}
    +
    +static void
    +_pidgin_about_dialog_load_build_configuration(PidginAboutDialog *about) {
    +#ifdef MESON_ARGS
    + _pidgin_about_dialog_add_build_args(about, "Meson Arguments", MESON_ARGS);
    +#endif /* MESON_ARGS */
    +#ifdef CONFIG_ARGS
    + _pidgin_about_dialog_add_build_args(about, "Configure Arguments", CONFIG_ARGS);
    +#endif /* CONFIG_ARGS */
    +
    + _pidgin_about_dialog_load_build_info(about);
    + _pidgin_about_dialog_load_runtime_info(about);
    +}
    +
    +/******************************************************************************
    + * Callbacks
    + *****************************************************************************/
    +static void
    +_pidgin_about_dialog_close(GtkWidget *b, gpointer data) {
    + gtk_widget_destroy(GTK_WIDGET(data));
    +}
    +
    +/******************************************************************************
    + * GObject Stuff
    + *****************************************************************************/
    +G_DEFINE_TYPE_WITH_PRIVATE(PidginAboutDialog, pidgin_about_dialog, GTK_TYPE_DIALOG);
    +
    +static void
    +pidgin_about_dialog_class_init(PidginAboutDialogClass *klass) {
    + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
    +
    + gtk_widget_class_set_template_from_resource(
    + widget_class,
    + "/im/pidgin/Pidgin/About/about.ui"
    + );
    +
    + gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, close_button);
    + gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, application_name);
    + gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, stack);
    +
    + gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, main_scrolled_window);
    +
    + gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, developers_page);
    + gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, developers_store);
    + gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, developers_treeview);
    +
    + gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, translators_page);
    + gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, translators_store);
    + gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, translators_treeview);
    +
    + gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, build_info_page);
    + gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, build_info_store);
    + gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, build_info_treeview);
    +}
    +
    +static void
    +pidgin_about_dialog_init(PidginAboutDialog *about) {
    + about->priv = pidgin_about_dialog_get_instance_private(about);
    +
    + gtk_widget_init_template(GTK_WIDGET(about));
    +
    + /* wire up the close button */
    + g_signal_connect(
    + about->priv->close_button,
    + "clicked",
    + G_CALLBACK(_pidgin_about_dialog_close),
    + about
    + );
    +
    + /* setup the application name label */
    + _pidgin_about_dialog_load_application_name(about);
    +
    + /* setup the main page */
    + _pidgin_about_dialog_load_main_page(about);
    +
    + /* setup the developers stuff */
    + _pidgin_about_dialog_load_developers(about);
    + gtk_tree_view_expand_all(GTK_TREE_VIEW(about->priv->developers_treeview));
    +
    + /* setup the translators stuff */
    + _pidgin_about_dialog_load_translators(about);
    + gtk_tree_view_expand_all(GTK_TREE_VIEW(about->priv->translators_treeview));
    +
    + /* setup the build info page */
    + _pidgin_about_dialog_load_build_configuration(about);
    + gtk_tree_view_expand_all(GTK_TREE_VIEW(about->priv->build_info_treeview));
    +}
    +
    +GtkWidget *
    +pidgin_about_dialog_new(void) {
    + GtkWidget *about = NULL;
    +
    + about = g_object_new(
    + PIDGIN_TYPE_ABOUT_DIALOG,
    + "title", "About Pidgin",
    + NULL
    + );
    +
    + return about;
    +}
    +
    --- /dev/null Thu Jan 01 00:00:00 1970 +0000
    +++ b/pidgin/pidginabout.h Thu Nov 23 22:30:26 2017 -0600
    @@ -0,0 +1,25 @@
    +#ifndef PIDGIN_ABOUT_H
    +#define PIDGIN_ABOUT_H
    +
    +#include <gtk/gtk.h>
    +
    +#define PIDGIN_TYPE_ABOUT_DIALOG (pidgin_about_dialog_get_type())
    +#define PIDGIN_ABOUT_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PIDGIN_TYPE_ABOUT_DIALOG, PidginAboutDialog))
    +#define PIDGIN_ABOUT_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PIDGIN_TYPE_ABOUT_DIALOG, PidginAboutDialogClass))
    +#define PIDGIN_IS_ABOUT_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PIDGIN_TYPE_ABOUT_DIALOG))
    +#define PIDGIN_IS_ABOUT_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PIDGIN_TYPE_ABOUT_DIALOG))
    +#define PIDGIN_ABOUT_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PIDGIN_TYPE_ABOUT_DIALOG, PidginAboutDialogClass))
    +
    +typedef struct _PidginAboutDialog PidginAboutDialog;
    +typedef struct _PidginAboutDialogClass PidginAboutDialogClass;
    +typedef struct _PidginAboutDialogPrivate PidginAboutDialogPrivate;
    +
    +G_BEGIN_DECLS
    +
    +GType pidgin_about_dialog_get_type(void);
    +GtkWidget *pidgin_about_dialog_new(void);
    +
    +G_END_DECLS
    +
    +#endif /* PIDGIN_ABOUT_H */
    +
    --- a/pidgin/pidgintooltip.h Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/pidgintooltip.h Thu Nov 23 22:30:26 2017 -0600
    @@ -70,10 +70,10 @@
    /**
    * pidgin_tooltip_setup_for_treeview:
    - * @tree: The treeview
    - * @userdata: The userdata to send to the callback functions
    - * @create_cb: Callback function to create the tooltip for a GtkTreePath
    - * @paint_cb: Callback function to paint the tooltip
    + * @tree: The treeview
    + * @userdata: The userdata to send to the callback functions
    + * @create_cb: (scope call): Callback function to create the tooltip for a GtkTreePath
    + * @paint_cb: (scope call): Callback function to paint the tooltip
    *
    * Setup tooltip drawing functions for a treeview.
    *
    @@ -84,10 +84,10 @@
    /**
    * pidgin_tooltip_setup_for_widget:
    - * @widget: The widget
    - * @userdata: The userdata to send to the callback functions
    - * @create_cb: Callback function to create the tooltip for the widget
    - * @paint_cb: Callback function to paint the tooltip
    + * @widget: The widget
    + * @userdata: The userdata to send to the callback functions
    + * @create_cb: (scope call): Callback function to create the tooltip for the widget
    + * @paint_cb: (scope call): Callback function to paint the tooltip
    *
    * Setup tooltip drawing functions for any widget.
    *
    @@ -107,8 +107,8 @@
    * pidgin_tooltip_show:
    * @widget: The widget the tooltip is for
    * @userdata: The userdata to send to the callback functions
    - * @create_cb: Callback function to create the tooltip from the GtkTreePath
    - * @paint_cb: Callback function to paint the tooltip
    + * @create_cb: (scope call): Callback function to create the tooltip from the GtkTreePath
    + * @paint_cb: (scope call): Callback function to paint the tooltip
    *
    * Create and show a tooltip.
    */
    --- a/pidgin/pixmaps/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,604 +0,0 @@
    -pidginpixmapdir = $(datadir)/pixmaps/pidgin
    -pidginiconsdir = $(datadir)
    -
    -SUBDIRS = emotes/default/24 emotes/small/16
    -
    -if INSTALL_PIXMAPS
    -MAKEFILE_MINGW = \
    - emotes/default/24/Makefile.mingw \
    - emotes/small/16/Makefile.mingw
    -
    -ANIMATIONS_16 = \
    - animations/16/connect0.png \
    - animations/16/connect1.png \
    - animations/16/connect2.png \
    - animations/16/connect3.png \
    - animations/16/connect4.png \
    - animations/16/connect5.png \
    - animations/16/connect6.png \
    - animations/16/connect7.png \
    - animations/16/connect8.png \
    - animations/16/process-working0.png \
    - animations/16/process-working1.png \
    - animations/16/process-working2.png \
    - animations/16/process-working3.png \
    - animations/16/process-working4.png \
    - animations/16/process-working5.png \
    - animations/16/process-working6.png \
    - animations/16/process-working7.png \
    - animations/16/process-working8.png \
    - animations/16/process-working9.png \
    - animations/16/process-working10.png \
    - animations/16/process-working11.png \
    - animations/16/process-working12.png \
    - animations/16/process-working13.png \
    - animations/16/process-working14.png \
    - animations/16/process-working15.png \
    - animations/16/process-working16.png \
    - animations/16/process-working17.png \
    - animations/16/process-working18.png \
    - animations/16/process-working19.png \
    - animations/16/process-working20.png \
    - animations/16/process-working21.png \
    - animations/16/process-working22.png \
    - animations/16/process-working23.png \
    - animations/16/process-working24.png \
    - animations/16/process-working25.png \
    - animations/16/process-working26.png \
    - animations/16/process-working27.png \
    - animations/16/process-working28.png \
    - animations/16/process-working29.png \
    - animations/16/process-working30.png \
    - animations/16/typing0.png \
    - animations/16/typing1.png \
    - animations/16/typing2.png \
    - animations/16/typing3.png \
    - animations/16/typing4.png \
    - animations/16/typing5.png
    -
    -DIALOGS_16_SCALABLE = \
    - dialogs/16/scalable/error.svg \
    - dialogs/16/scalable/info.svg \
    - dialogs/16/scalable/mail.svg
    -
    -DIALOGS_16 = \
    - dialogs/16/auth.png \
    - dialogs/16/error.png \
    - dialogs/16/info.png \
    - dialogs/16/mail.png \
    - dialogs/16/question.png
    -
    -DIALOGS_64 = \
    - dialogs/64/auth.png \
    - dialogs/64/cool.png \
    - dialogs/64/dialog.png \
    - dialogs/64/error.png \
    - dialogs/64/info.png \
    - dialogs/64/mail.png \
    - dialogs/64/question.png \
    - dialogs/64/warning.png
    -
    -DIALOGS_SCALABLE = \
    - dialogs/scalable/auth.svg \
    - dialogs/scalable/cool.svg \
    - dialogs/scalable/dialog.svg \
    - dialogs/scalable/error.svg \
    - dialogs/scalable/info.svg \
    - dialogs/scalable/question.svg \
    - dialogs/scalable/warning.svg
    -
    -E2EE_STATES_16 = \
    - e2ee/16/finished.png \
    - e2ee/16/not-private.png \
    - e2ee/16/private.png \
    - e2ee/16/unverified.png
    -
    -EMBLEMS_16 = \
    - emblems/16/aol-client.png \
    - emblems/16/birthday.png \
    - emblems/16/blocked.png \
    - emblems/16/bot.png \
    - emblems/16/external.png \
    - emblems/16/female.png \
    - emblems/16/founder.png \
    - emblems/16/free-for-chat.png \
    - emblems/16/game.png \
    - emblems/16/half-operator.png \
    - emblems/16/hiptop.png \
    - emblems/16/male.png \
    - emblems/16/mobile.png \
    - emblems/16/not-authorized.png \
    - emblems/16/operator.png \
    - emblems/16/secure.png \
    - emblems/16/unavailable.png \
    - emblems/16/video.png \
    - emblems/16/voice.png
    -
    -EMBLEMS_SCALABLE = \
    - emblems/scalable/aol-client.svg \
    - emblems/scalable/blocked.svg \
    - emblems/scalable/bot.svg \
    - emblems/scalable/external.svg \
    - emblems/scalable/female.svg \
    - emblems/scalable/free-for-chat.svg \
    - emblems/scalable/game.svg \
    - emblems/scalable/male.svg \
    - emblems/scalable/not-authorized.svg \
    - emblems/scalable/secure.svg \
    - emblems/scalable/unavailable.svg \
    - emblems/scalable/video.svg \
    - emblems/scalable/voice.svg
    -
    -EMOTES_DEFAULT_24_SCALABLE = \
    - emotes/default/24/scalable/airplane.svg \
    - emotes/default/24/scalable/bad.svg \
    - emotes/default/24/scalable/beer.svg \
    - emotes/default/24/scalable/bomb.svg \
    - emotes/default/24/scalable/bowl.svg \
    - emotes/default/24/scalable/boy.svg \
    - emotes/default/24/scalable/brb.svg \
    - emotes/default/24/scalable/cake.svg \
    - emotes/default/24/scalable/camera.svg \
    - emotes/default/24/scalable/can.svg \
    - emotes/default/24/scalable/car.svg \
    - emotes/default/24/scalable/cat.svg \
    - emotes/default/24/scalable/chicken.svg \
    - emotes/default/24/scalable/cigarette.svg \
    - emotes/default/24/scalable/clock.svg \
    - emotes/default/24/scalable/cloudy.svg \
    - emotes/default/24/scalable/clover.svg \
    - emotes/default/24/scalable/clown.svg \
    - emotes/default/24/scalable/coffee.svg \
    - emotes/default/24/scalable/coins.svg \
    - emotes/default/24/scalable/computer.svg \
    - emotes/default/24/scalable/console.svg \
    - emotes/default/24/scalable/cow.svg \
    - emotes/default/24/scalable/dog.svg \
    - emotes/default/24/scalable/drink.svg \
    - emotes/default/24/scalable/film.svg \
    - emotes/default/24/scalable/flag.svg \
    - emotes/default/24/scalable/ghost.svg \
    - emotes/default/24/scalable/girl.svg \
    - emotes/default/24/scalable/goat.svg \
    - emotes/default/24/scalable/good.svg \
    - emotes/default/24/scalable/hammer.svg \
    - emotes/default/24/scalable/handcuffs.svg \
    - emotes/default/24/scalable/island.svg \
    - emotes/default/24/scalable/knife.svg \
    - emotes/default/24/scalable/lamp.svg \
    - emotes/default/24/scalable/liquor.svg \
    - emotes/default/24/scalable/mail.svg \
    - emotes/default/24/scalable/mobile.svg \
    - emotes/default/24/scalable/monkey.svg \
    - emotes/default/24/scalable/moon.svg \
    - emotes/default/24/scalable/musical-note.svg \
    - emotes/default/24/scalable/peace.svg \
    - emotes/default/24/scalable/phone.svg \
    - emotes/default/24/scalable/pidgin-emotes.svg \
    - emotes/default/24/scalable/pig.svg \
    - emotes/default/24/scalable/pill.svg \
    - emotes/default/24/scalable/pizza.svg \
    - emotes/default/24/scalable/plate.svg \
    - emotes/default/24/scalable/poop.svg \
    - emotes/default/24/scalable/present.svg \
    - emotes/default/24/scalable/rainbow.svg \
    - emotes/default/24/scalable/rain.svg \
    - emotes/default/24/scalable/rose-dead.svg \
    - emotes/default/24/scalable/rose.svg \
    - emotes/default/24/scalable/search.svg \
    - emotes/default/24/scalable/sheep.svg \
    - emotes/default/24/scalable/shout.svg \
    - emotes/default/24/scalable/skeleton.svg \
    - emotes/default/24/scalable/snail.svg \
    - emotes/default/24/scalable/snowman.svg \
    - emotes/default/24/scalable/soccerball.svg \
    - emotes/default/24/scalable/star.svg \
    - emotes/default/24/scalable/sun.svg \
    - emotes/default/24/scalable/thunder.svg \
    - emotes/default/24/scalable/turtle.svg \
    - emotes/default/24/scalable/tv.svg \
    - emotes/default/24/scalable/umbrella.svg \
    - emotes/default/24/scalable/watermelon.svg \
    - emotes/default/24/scalable/yin-yang.svg
    -
    -EMOTES_SMALL_16_SCALABLE = \
    - emotes/small/16/scalable/mobile.svg \
    - emotes/small/16/scalable/pidgin-emotes.svg
    -
    -PROTOCOLS_16_SCALABLE = \
    - protocols/16/scalable/aim.svg \
    - protocols/16/scalable/bonjour.svg \
    - protocols/16/scalable/gadu-gadu.svg \
    - protocols/16/scalable/novell.svg \
    - protocols/16/scalable/icq.svg \
    - protocols/16/scalable/irc.svg \
    - protocols/16/scalable/jabber.svg \
    - protocols/16/scalable/meanwhile.svg \
    - protocols/16/scalable/silc.svg \
    - protocols/16/scalable/simple.svg \
    - protocols/16/scalable/zephyr.svg
    -
    -PROTOCOLS_16 = \
    - protocols/16/aim.png \
    - protocols/16/bonjour.png \
    - protocols/16/facebook.png \
    - protocols/16/gadu-gadu.png \
    - protocols/16/google-talk.png \
    - protocols/16/novell.png \
    - protocols/16/icq.png \
    - protocols/16/irc.png \
    - protocols/16/jabber.png \
    - protocols/16/meanwhile.png \
    - protocols/16/silc.png \
    - protocols/16/simple.png \
    - protocols/16/zephyr.png
    -
    -ICONS_16_SCALABLE = \
    - icons/hicolor/16x16/apps/scalable/pidgin.svg
    -
    -ICONS_16 = icons/hicolor/16x16/apps/pidgin.png
    -
    -ICONS_22 = icons/hicolor/22x22/apps/pidgin.png
    -
    -ICONS_24_SCALABLE = \
    - icons/hicolor/24x24/apps/scalable/pidgin.svg
    -
    -ICONS_24 = icons/hicolor/24x24/apps/pidgin.png
    -
    -ICONS_32_SCALABLE = \
    - icons/hicolor/32x32/apps/scalable/pidgin.svg
    -
    -ICONS_32 = icons/hicolor/32x32/apps/pidgin.png
    -
    -ICONS_48 = icons/hicolor/48x48/apps/pidgin.png
    -
    -ICONS_SCALABLE = icons/hicolor/scalable/apps/pidgin.svg
    -
    -PROTOCOLS_22_SCALABLE = \
    - protocols/22/scalable/aim.svg \
    - protocols/22/scalable/bonjour.svg \
    - protocols/22/scalable/gadu-gadu.svg \
    - protocols/22/scalable/novell.svg \
    - protocols/22/scalable/icq.svg \
    - protocols/22/scalable/irc.svg \
    - protocols/22/scalable/jabber.svg \
    - protocols/22/scalable/meanwhile.svg \
    - protocols/22/scalable/silc.svg \
    - protocols/22/scalable/simple.svg \
    - protocols/22/scalable/zephyr.svg
    -
    -PROTOCOLS_22 = \
    - protocols/22/aim.png \
    - protocols/22/bonjour.png \
    - protocols/22/facebook.png \
    - protocols/22/gadu-gadu.png \
    - protocols/22/google-talk.png \
    - protocols/22/novell.png \
    - protocols/22/icq.png \
    - protocols/22/irc.png \
    - protocols/22/jabber.png \
    - protocols/22/meanwhile.png \
    - protocols/22/silc.png \
    - protocols/22/simple.png \
    - protocols/22/zephyr.png
    -
    -PROTOCOLS_48 = \
    - protocols/48/aim.png \
    - protocols/48/bonjour.png \
    - protocols/48/facebook.png \
    - protocols/48/gadu-gadu.png \
    - protocols/48/google-talk.png \
    - protocols/48/novell.png \
    - protocols/48/icq.png \
    - protocols/48/irc.png \
    - protocols/48/jabber.png \
    - protocols/48/meanwhile.png \
    - protocols/48/silc.png \
    - protocols/48/simple.png \
    - protocols/48/zephyr.png
    -
    -PROTOCOLS_SCALABLE = \
    - protocols/scalable/aim.svg \
    - protocols/scalable/bonjour.svg \
    - protocols/scalable/gadu-gadu.svg \
    - protocols/scalable/google-talk.svg \
    - protocols/scalable/novell.svg \
    - protocols/scalable/icq.svg \
    - protocols/scalable/irc.svg \
    - protocols/scalable/jabber.svg \
    - protocols/scalable/meanwhile.svg \
    - protocols/scalable/silc.svg \
    - protocols/scalable/simple.svg \
    - protocols/scalable/zephyr.svg
    -
    -STATUS_11 = \
    - status/11/available.png \
    - status/11/away.png \
    - status/11/busy.png \
    - status/11/chat.png \
    - status/11/extended-away.png \
    - status/11/invisible.png \
    - status/11/log-in.png \
    - status/11/log-out.png \
    - status/11/offline.png \
    - status/11/person.png
    -
    -STATUS_11_RTL = \
    - status/11/rtl/extended-away.png \
    - status/11/rtl/log-in.png \
    - status/11/rtl/log-out.png
    -
    -STATUS_16 = \
    - status/16/available.png \
    - status/16/away.png \
    - status/16/busy.png \
    - status/16/chat.png \
    - status/16/extended-away.png \
    - status/16/invisible.png \
    - status/16/log-in.png \
    - status/16/log-out.png \
    - status/16/offline.png \
    - status/16/person.png
    -
    -STATUS_16_RTL = \
    - status/16/rtl/extended-away.png \
    - status/16/rtl/log-in.png \
    - status/16/rtl/log-out.png
    -
    -STATUS_22 = \
    - status/22/available.png \
    - status/22/away.png \
    - status/22/busy.png \
    - status/22/chat.png \
    - status/22/extended-away.png \
    - status/22/invisible.png \
    - status/22/log-in.png \
    - status/22/log-out.png \
    - status/22/offline.png \
    - status/22/person.png
    -
    -STATUS_22_RTL = \
    - status/22/rtl/extended-away.png \
    - status/22/rtl/log-in.png \
    - status/22/rtl/log-out.png
    -
    -STATUS_32 = \
    - status/32/available.png \
    - status/32/away.png \
    - status/32/busy.png \
    - status/32/chat.png \
    - status/32/extended-away.png \
    - status/32/invisible.png \
    - status/32/log-in.png \
    - status/32/log-out.png \
    - status/32/offline.png \
    - status/32/person.png
    -
    -STATUS_32_RTL = \
    - status/32/rtl/extended-away.png \
    - status/32/rtl/log-in.png \
    - status/32/rtl/log-out.png
    -
    -STATUS_48 = \
    - status/48/available.png \
    - status/48/away.png \
    - status/48/busy.png \
    - status/48/chat.png \
    - status/48/extended-away.png \
    - status/48/invisible.png \
    - status/48/log-in.png \
    - status/48/log-out.png \
    - status/48/offline.png \
    - status/48/person.png
    -
    -STATUS_48_RTL = \
    - status/48/rtl/extended-away.png \
    - status/48/rtl/log-in.png \
    - status/48/rtl/log-out.png
    -
    -TOOLBAR_11 = \
    - toolbar/11/message-new.png
    -
    -TOOLBAR_16_SCALABLE = \
    - toolbar/16/scalable/change-bgcolor.svg \
    - toolbar/16/scalable/change-fgcolor.svg \
    - toolbar/16/scalable/emote-select.svg \
    - toolbar/16/scalable/font-size-down.svg \
    - toolbar/16/scalable/font-size-up.svg
    -
    -TOOLBAR_16 = \
    - toolbar/16/audio-call.png \
    - toolbar/16/change-bgcolor.png \
    - toolbar/16/change-fgcolor.png \
    - toolbar/16/emote-select.png \
    - toolbar/16/font-face.png \
    - toolbar/16/font-size-down.png \
    - toolbar/16/font-size-up.png \
    - toolbar/16/insert.png \
    - toolbar/16/insert-image.png \
    - toolbar/16/insert-link.png \
    - toolbar/16/insert-screenshot.png \
    - toolbar/16/message-new.png \
    - toolbar/16/plugins.png \
    - toolbar/16/send-file.png \
    - toolbar/16/transfer.png \
    - toolbar/16/unblock.png \
    - toolbar/16/video-call.png \
    - toolbar/16/get-attention.png
    -
    -TOOLBAR_22_SCALABLE = \
    - toolbar/22/scalable/select-avatar.svg \
    - toolbar/22/scalable/video-call.svg \
    - toolbar/22/scalable/audio-call.svg
    -
    -TOOLBAR_22 = \
    - toolbar/22/select-avatar.png \
    - toolbar/22/video-call.png \
    - toolbar/22/audio-call.png
    -
    -TOOLBAR_32_SCALABLE = \
    - toolbar/32/scalable/video-call.svg \
    - toolbar/32/scalable/audio-call.svg
    -
    -TOOLBAR_32 = \
    - toolbar/32/video-call.png \
    - toolbar/32/audio-call.png
    -
    -TOOLBAR_48_SCALABLE = \
    - toolbar/48/scalable/video-call.svg \
    - toolbar/48/scalable/audio-call.svg
    -
    -TOOLBAR_48 = \
    - toolbar/48/video-call.png \
    - toolbar/48/audio-call.png
    -
    -TRAY_16_ICO = \
    - tray/16/available_4bit.ico \
    - tray/16/away_4bit.ico \
    - tray/16/busy_4bit.ico \
    - tray/16/connecting_4bit.ico \
    - tray/16/extended-away_4bit.ico \
    - tray/16/invisible_4bit.ico \
    - tray/16/message_4bit.ico \
    - tray/16/offline_4bit.ico
    -
    -TRAY_THEME = tray/hicolor/index.theme
    -
    -TRAY_16 = \
    - tray/hicolor/16x16/status/pidgin-tray-away.png \
    - tray/hicolor/16x16/status/pidgin-tray-busy.png \
    - tray/hicolor/16x16/status/pidgin-tray-invisible.png \
    - tray/hicolor/16x16/status/pidgin-tray-connect.png \
    - tray/hicolor/16x16/status/pidgin-tray-xa.png \
    - tray/hicolor/16x16/status/pidgin-tray-email.png \
    - tray/hicolor/16x16/status/pidgin-tray-pending.png \
    - tray/hicolor/16x16/status/pidgin-tray-offline.png \
    - tray/hicolor/16x16/status/pidgin-tray-available.png
    -
    -TRAY_22 = \
    - tray/hicolor/22x22/status/pidgin-tray-away.png \
    - tray/hicolor/22x22/status/pidgin-tray-busy.png \
    - tray/hicolor/22x22/status/pidgin-tray-connect.png \
    - tray/hicolor/22x22/status/pidgin-tray-xa.png \
    - tray/hicolor/22x22/status/pidgin-tray-invisible.png \
    - tray/hicolor/22x22/status/pidgin-tray-email.png \
    - tray/hicolor/22x22/status/pidgin-tray-pending.png \
    - tray/hicolor/22x22/status/pidgin-tray-offline.png \
    - tray/hicolor/22x22/status/pidgin-tray-available.png
    -
    -TRAY_32 = \
    - tray/hicolor/32x32/status/pidgin-tray-away.png \
    - tray/hicolor/32x32/status/pidgin-tray-busy.png \
    - tray/hicolor/32x32/status/pidgin-tray-connect.png \
    - tray/hicolor/32x32/status/pidgin-tray-xa.png \
    - tray/hicolor/32x32/status/pidgin-tray-invisible.png \
    - tray/hicolor/32x32/status/pidgin-tray-email.png \
    - tray/hicolor/32x32/status/pidgin-tray-pending.png \
    - tray/hicolor/32x32/status/pidgin-tray-offline.png \
    - tray/hicolor/32x32/status/pidgin-tray-available.png
    -
    -TRAY_48 = \
    - tray/hicolor/48x48/status/pidgin-tray-away.png \
    - tray/hicolor/48x48/status/pidgin-tray-busy.png \
    - tray/hicolor/48x48/status/pidgin-tray-connect.png \
    - tray/hicolor/48x48/status/pidgin-tray-xa.png \
    - tray/hicolor/48x48/status/pidgin-tray-invisible.png \
    - tray/hicolor/48x48/status/pidgin-tray-email.png \
    - tray/hicolor/48x48/status/pidgin-tray-pending.png \
    - tray/hicolor/48x48/status/pidgin-tray-offline.png \
    - tray/hicolor/48x48/status/pidgin-tray-available.png
    -
    -EXTRA_DIST = \
    - edit.png \
    - info.png \
    - logo.png \
    - logo.svg \
    - logo-nonvv.png \
    - pause.png \
    - arrow-down.xpm \
    - arrow-up.xpm \
    - arrow-right.xpm \
    - arrow-left.xpm \
    - Makefile.mingw \
    - pidgin.ico \
    - $(MAKEFILE_MINGW) \
    - $(DIALOGS_16_SCALABLE) \
    - $(ICONS_16_SCALABLE) \
    - $(ICONS_24_SCALABLE) \
    - $(ICONS_32_SCALABLE) \
    - $(EMOTES_DEFAULT_24_SCALABLE) \
    - $(PROTOCOLS_16_SCALABLE) \
    - $(PROTOCOLS_22_SCALABLE) \
    - $(TOOLBAR_16_SCALABLE) \
    - $(TOOLBAR_22_SCALABLE) \
    - $(TOOLBAR_32_SCALABLE) \
    - $(TOOLBAR_48_SCALABLE)
    -
    -pidginbuttonpixdir = $(datadir)/pixmaps/pidgin/buttons
    -pidginbuttonpix_DATA = edit.png pause.png info.png
    -
    -pidgindistpixdir = $(datadir)/pixmaps/pidgin
    -pidgindistpix_DATA = logo.png arrow-down.xpm arrow-left.xpm arrow-right.xpm arrow-up.xpm
    -
    -nobase_dist_pidginpixmap_DATA = \
    - $(ANIMATIONS_16) \
    - $(DIALOGS_16) \
    - $(DIALOGS_64) \
    - $(DIALOGS_SCALABLE) \
    - $(E2EE_STATES_16) \
    - $(EMBLEMS_16) \
    - $(EMBLEMS_SCALABLE) \
    - $(PROTOCOLS_16) \
    - $(PROTOCOLS_22) \
    - $(PROTOCOLS_48) \
    - $(PROTOCOLS_SCALABLE) \
    - $(STATUS_11) \
    - $(STATUS_11_RTL) \
    - $(STATUS_16) \
    - $(STATUS_16_RTL) \
    - $(STATUS_22) \
    - $(STATUS_22_RTL) \
    - $(STATUS_32) \
    - $(STATUS_32_RTL) \
    - $(STATUS_48) \
    - $(STATUS_48_RTL) \
    - $(TOOLBAR_11) \
    - $(TOOLBAR_16) \
    - $(TOOLBAR_22) \
    - $(TOOLBAR_32) \
    - $(TOOLBAR_48) \
    - $(TRAY_THEME) \
    - $(TRAY_16_ICO)
    -if ENABLE_TRAYCOMPAT
    -# Install in a location compatible with hicolor-icon-theme 0.9
    -
    -pidginpixmaptray16dir = $(datadir)/pixmaps/pidgin/tray/hicolor/16x16/actions
    -dist_pidginpixmaptray16_DATA = $(TRAY_16)
    -
    -pidginpixmaptray22dir = $(datadir)/pixmaps/pidgin/tray/hicolor/22x22/actions
    -dist_pidginpixmaptray22_DATA = $(TRAY_22)
    -
    -pidginpixmaptray32dir = $(datadir)/pixmaps/pidgin/tray/hicolor/32x32/actions
    -dist_pidginpixmaptray32_DATA = $(TRAY_32)
    -
    -pidginpixmaptray48dir = $(datadir)/pixmaps/pidgin/tray/hicolor/48x48/actions
    -dist_pidginpixmaptray48_DATA = $(TRAY_48)
    -
    -else
    -# Install in the "correct" locations
    -
    -nobase_dist_pidginpixmap_DATA += \
    - $(TRAY_16) \
    - $(TRAY_22) \
    - $(TRAY_32) \
    - $(TRAY_48)
    -endif
    -
    -nobase_dist_pidginicons_DATA = \
    - $(ICONS_16) \
    - $(ICONS_22) \
    - $(ICONS_24) \
    - $(ICONS_32) \
    - $(ICONS_48) \
    - $(ICONS_SCALABLE)
    -endif
    --- a/pidgin/pixmaps/Makefile.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,51 +0,0 @@
    -#
    -# Makefile.mingw
    -#
    -# Description: Makefile for win32 (mingw) version of Pidgin pixmaps
    -#
    -
    -PIDGIN_TREE_TOP := ../..
    -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
    -
    -datadir := $(PIDGIN_INSTALL_DIR)
    --include ./Makefile.am.mingw
    -
    -.PHONY: install clean
    -
    -install: ./Makefile.am.mingw
    - $(MAKE_at) if test '$(SUBDIRS)'; then \
    - list='$(SUBDIRS)'; for subdir in $$list; do \
    - $(MAKE) -C $$subdir -f $(MINGW_MAKEFILE) install || exit 1 ;\
    - done; \
    - fi;
    - if test '$(nobase_dist_pidginpixmap_DATA)'; then \
    - list='$(nobase_dist_pidginpixmap_DATA)'; for file in $$list; do \
    - dir=`dirname $$file`; \
    - mkdir -p $(pidginpixmapdir)/$$dir; \
    - cp $$file $(pidginpixmapdir)/$$dir/; \
    - done; \
    - fi;
    - if test '$(pidginbuttonpix_DATA)'; then \
    - mkdir -p $(pidginbuttonpixdir); \
    - cp $(pidginbuttonpix_DATA) $(pidginbuttonpixdir); \
    - fi;
    - if test '$(pidgindistpix_DATA)'; then \
    - mkdir -p $(pidgindistpixdir); \
    - cp $(pidgindistpix_DATA) $(pidgindistpixdir); \
    - fi;
    -
    -clean: ./Makefile.am.mingw
    - $(MAKE_at) if test '$(SUBDIRS)'; then \
    - list='$(SUBDIRS)'; for subdir in $$list; do \
    - $(MAKE) -C $$subdir -f $(MINGW_MAKEFILE) clean;\
    - done; \
    - fi;
    - rm -f ./Makefile.am.mingw
    -
    -./Makefile.am.mingw: ./Makefile.am ./Makefile.mingw
    - sed \
    - -e 's/^if\ INSTALL_PIXMAPS/ifeq (\$$(INSTALL_PIXMAPS), 1)/' \
    - -e 's/^if\ ENABLE_TRAYCOMPAT/ifeq (\$$(ENABLE_TRAYCOMPAT), 1)/' \
    - $< > $@
    - include $@
    -
    --- a/pidgin/pixmaps/emotes/default/24/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,203 +0,0 @@
    -SMILEYS = \
    - act-up.png \
    - airplane.png \
    - alien.png \
    - amorous.png \
    - angel.png \
    - angry.png \
    - arrogant.png \
    - at-wits-end.png \
    - bad.png \
    - bashful.png \
    - beat-up.png \
    - beauty.png \
    - beer.png \
    - blowkiss.png \
    - bomb.png \
    - bored.png \
    - bowl.png \
    - boy.png \
    - brb.png \
    - bunny.png \
    - bye.png \
    - cake.png \
    - call-me.png \
    - camera.png \
    - can.png \
    - car.png \
    - cat.png \
    - chicken.png \
    - chilli.png \
    - cigarette.png \
    - clap.png \
    - clock.png \
    - cloudy.png \
    - clover.png \
    - clown.png \
    - coffee.png \
    - coins.png \
    - cold.png \
    - computer.png \
    - confused.png \
    - console.png \
    - cowboy.png \
    - cow.png \
    - crying.png \
    - curl-lip.png \
    - curse.png \
    - cute.png \
    - cyclops.png \
    - dance.png \
    - dazed.png \
    - desire.png \
    - devil.png \
    - disappointed.png \
    - disdain.png \
    - doctor.png \
    - dog.png \
    - doh.png \
    - dont-know.png \
    - drink.png \
    - drool.png \
    - hungry.png \
    - embarrassed.png \
    - excited.png \
    - excruciating.png \
    - eyeroll.png \
    - female-fighter.png \
    - film.png \
    - fingers-crossed.png \
    - flag.png \
    - foot-in-mouth.png \
    - ghost.png \
    - giggle.png \
    - girl.png \
    - glasses-cool.png \
    - glasses-nerdy.png \
    - goat.png \
    - go-away.png \
    - good.png \
    - hammer.png \
    - handcuffs.png \
    - handshake.png \
    - highfive.png \
    - hug-left.png \
    - hug-right.png \
    - hypnotized.png \
    - in_love.png \
    - island.png \
    - jump.png \
    - kissed.png \
    - kissing.png \
    - kiss.png \
    - knife.png \
    - lamp.png \
    - lashes.png \
    - laugh.png \
    - liquor.png \
    - loser.png \
    - love-over.png \
    - lying.png \
    - mad-tongue.png \
    - mail.png \
    - male-fighter1.png \
    - male-fighter2.png \
    - mean.png \
    - meeting.png \
    - mobile.png \
    - moneymouth.png \
    - monkey.png \
    - moon.png \
    - mrgreen.png \
    - musical-note.png \
    - music.png \
    - nervous.png \
    - neutral.png \
    - on-the-phone.png \
    - party.png \
    - peace.png \
    - phone.png \
    - pig.png \
    - pill.png \
    - pirate.png \
    - pissed-off.png \
    - pizza.png \
    - plate.png \
    - poop.png \
    - pray.png \
    - present.png \
    - pumpkin.png \
    - question.png \
    - quiet.png \
    - rainbow.png \
    - rain.png \
    - rose-dead.png \
    - rose.png \
    - rotfl.png \
    - sad.png \
    - sarcastic.png \
    - search.png \
    - secret.png \
    - shame.png \
    - sheep.png \
    - shocked.png \
    - shout.png \
    - shut-mouth.png \
    - sick.png \
    - silly.png \
    - skeleton.png \
    - skywalker.png \
    - sleeping.png \
    - sleepy.png \
    - happy.png \
    - snail.png \
    - snicker.png \
    - snowman.png \
    - soccerball.png \
    - soldier.png \
    - star.png \
    - starving.png \
    - stop.png \
    - stressed.png \
    - struggle.png \
    - sun.png \
    - hot.png \
    - talktohand.png \
    - teeth.png \
    - terror.png \
    - thinking.png \
    - thunder.png \
    - time-out.png \
    - tongue.png \
    - afraid.png \
    - turtle.png \
    - tv.png \
    - umbrella.png \
    - vampire.png \
    - victory.png \
    - waiting.png \
    - watermelon.png \
    - waving.png \
    - weep.png \
    - wilt.png \
    - wink.png \
    - worship.png \
    - yin-yang.png
    -
    -
    -pidginsmileypix_in_files = default.theme.in
    -
    -if INSTALL_PIXMAPS
    -pidginsmileypixdir = $(datadir)/pixmaps/pidgin/emotes/default
    -pidginsmileypix_DATA = \
    - $(SMILEYS) \
    - theme
    -
    -theme: default.theme.in
    - $(AM_V_GEN) sed -e 's/^_Name=/Name=/' \
    - -e 's/^_Description=/Description=/' \
    - -e 's/^_Author=/Author=/' \
    - $< > $@
    -endif
    -
    -EXTRA_DIST = $(SMILEYS) $(pidginsmileypix_in_files) theme
    --- a/pidgin/pixmaps/emotes/default/24/Makefile.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,27 +0,0 @@
    -#
    -# Makefile.mingw
    -#
    -# Description: Makefile for win32 (mingw) version of Pidgin pixmaps
    -#
    -
    -PIDGIN_TREE_TOP := ../../../../..
    -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
    -
    -datadir = $(PIDGIN_INSTALL_DIR)
    --include ./Makefile.am.mingw
    -
    -.PHONY: install clean
    -
    -install: ./Makefile.am.mingw theme
    - if test '$(pidginsmileypix_DATA)'; then \
    - mkdir -p $(pidginsmileypixdir); \
    - cp $(pidginsmileypix_DATA) $(pidginsmileypixdir); \
    - fi;
    -
    -clean:
    - rm -f theme ./Makefile.am.mingw
    -
    -./Makefile.am.mingw: ./Makefile.am
    - sed -e 's/^if\ INSTALL_PIXMAPS/ifeq (\$$(INSTALL_PIXMAPS), 1)/' ./Makefile.am > $@
    - include $@
    -
    --- a/pidgin/pixmaps/emotes/small/16/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,103 +0,0 @@
    -# These are mood images that are NOT also used in the smiley theme.
    -MOODS = \
    - afraid.png \
    - bathing.png \
    - cinema.png \
    - disappointed.png \
    - embarrassed.png \
    - grumpy.png \
    - hot.png \
    - internet.png \
    - invincible.png \
    - music.png \
    - restroom.png \
    - search.png \
    - shopping.png \
    - studying.png \
    - suit.png \
    - surfing.png \
    - typing.png \
    - working.png \
    - writing.png
    -
    -SMILEYS = \
    - amorous.png \
    - angel.png \
    - angry.png \
    - beer.png \
    - bored.png \
    - boy.png \
    - camera.png \
    - chilli.png \
    - cigarette.png \
    - coffee.png \
    - confused.png \
    - console.png \
    - cold.png \
    - cross.png \
    - crying.png \
    - devil.png \
    - dont-know.png \
    - drool.png \
    - excited.png \
    - excruciating.png \
    - eyeroll.png \
    - girl.png \
    - glasses-cool.png \
    - happy.png \
    - hug-left.png \
    - hug-right.png \
    - hungry.png \
    - in_love.png \
    - kiss.png \
    - lamp.png \
    - lying.png \
    - meeting.png \
    - mobile.png \
    - mrgreen.png \
    - musical-note.png \
    - nerdy.png \
    - neutral.png \
    - party.png \
    - phone.png \
    - pirate.png \
    - pissed-off.png \
    - plate.png \
    - question.png \
    - rose.png \
    - sad.png \
    - sarcastic.png \
    - shame.png \
    - shocked.png \
    - shut-mouth.png \
    - sick.png \
    - silent.png \
    - sleeping.png \
    - sleepy.png \
    - star.png \
    - stressed.png \
    - thinking.png \
    - thunder.png \
    - tongue.png \
    - tv.png \
    - uhm-yeah.png \
    - wink.png
    -
    -
    -pidginsmileypix_in_files = small.theme.in
    -
    -if INSTALL_PIXMAPS
    -pidginsmileypixdir = $(datadir)/pixmaps/pidgin/emotes/small
    -pidginsmileypix_DATA = \
    - $(MOODS) \
    - $(SMILEYS) \
    - theme
    -
    -theme: small.theme.in
    - $(AM_V_GEN) sed -e 's/^_Name=/Name=/' \
    - -e 's/^_Description=/Description=/' \
    - -e 's/^_Author=/Author=/' \
    - $< > $@
    -endif
    -
    -EXTRA_DIST = $(MOODS) $(SMILEYS) $(pidginsmileypix_in_files) theme
    --- a/pidgin/pixmaps/emotes/small/16/Makefile.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,27 +0,0 @@
    -#
    -# Makefile.mingw
    -#
    -# Description: Makefile for win32 (mingw) version of Pidgin pixmaps
    -#
    -
    -PIDGIN_TREE_TOP := ../../../../..
    -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
    -
    -datadir = $(PIDGIN_INSTALL_DIR)
    --include ./Makefile.am.mingw
    -
    -.PHONY: install clean
    -
    -install: ./Makefile.am.mingw theme
    - if test '$(pidginsmileypix_DATA)'; then \
    - mkdir -p $(pidginsmileypixdir); \
    - cp $(pidginsmileypix_DATA) $(pidginsmileypixdir); \
    - fi;
    -
    -clean:
    - rm -f theme ./Makefile.am.mingw
    -
    -./Makefile.am.mingw: ./Makefile.am
    - sed -e 's/^if\ INSTALL_PIXMAPS/ifeq (\$$(INSTALL_PIXMAPS), 1)/' ./Makefile.am > $@
    - include $@
    -
    --- a/pidgin/plugins/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,149 +0,0 @@
    -DIST_SUBDIRS = cap disco gestures gevolution musicmessaging ticker win32/winprefs win32/transparency
    -
    -if BUILD_GEVOLUTION
    -GEVOLUTION_DIR = gevolution
    -endif
    -
    -if ENABLE_DBUS
    -MUSICMESSAGING_DIR = musicmessaging
    -endif
    -
    -if ENABLE_CAP
    -CAP_DIR = cap
    -endif
    -
    -if ENABLE_GESTURES
    -GESTURE_DIR = gestures
    -endif
    -
    -SUBDIRS = \
    - $(CAP_DIR) \
    - $(GESTURE_DIR) \
    - $(GEVOLUTION_DIR) \
    - $(MUSICMESSAGING_DIR) \
    - disco \
    - ticker
    -
    -if IS_WIN32
    -SUBDIRS += \
    - win32/winprefs \
    - win32/transparency
    -endif
    -
    -plugindir = @PIDGIN_PLUGINDIR@
    -
    -contact_priority_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -extplacement_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -gtk_signals_test_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -gtkbuddynote_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -history_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -iconaway_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -imgupload_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -markerline_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -notify_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -relnot_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -screencap_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -sendbutton_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -spellchk_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -unity_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -webkit_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -xmppconsole_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -
    -if PLUGINS
    -
    -plugin_LTLIBRARIES = \
    - extplacement.la \
    - gtkbuddynote.la \
    - history.la \
    - iconaway.la \
    - imgupload.la \
    - markerline.la \
    - notify.la \
    - relnot.la \
    - screencap.la \
    - sendbutton.la \
    - spellchk.la \
    - webkit.la \
    - xmppconsole.la
    -
    -if ENABLE_UNITY
    -plugin_LTLIBRARIES += unity.la
    -endif
    -
    -noinst_LTLIBRARIES = \
    - contact_priority.la \
    - gtk_signals_test.la
    -
    -contact_priority_la_SOURCES = contact_priority.c
    -extplacement_la_SOURCES = extplacement.c
    -gtk_signals_test_la_SOURCES = gtk-signals-test.c
    -gtkbuddynote_la_SOURCES = gtkbuddynote.c
    -history_la_SOURCES = history.c
    -iconaway_la_SOURCES = iconaway.c
    -imgupload_la_SOURCES = imgupload.c
    -markerline_la_SOURCES = markerline.c
    -notify_la_SOURCES = notify.c
    -relnot_la_SOURCES = relnot.c
    -screencap_la_SOURCES = screencap.c
    -sendbutton_la_SOURCES = sendbutton.c
    -spellchk_la_SOURCES = spellchk.c
    -unity_la_SOURCES = unity.c
    -webkit_la_SOURCES = webkit.c
    -xmppconsole_la_SOURCES = xmppconsole.c
    -
    -contact_priority_la_LIBADD = @PIDGIN_LIBS@
    -extplacement_la_LIBADD = @PIDGIN_LIBS@
    -gtk_signals_test_la_LIBADD = @PIDGIN_LIBS@
    -gtkbuddynote_la_LIBADD = @PIDGIN_LIBS@
    -history_la_LIBADD = @PIDGIN_LIBS@
    -iconaway_la_LIBADD = @PIDGIN_LIBS@
    -imgupload_la_LIBADD = @PIDGIN_LIBS@ $(JSON_LIBS)
    -markerline_la_LIBADD = @PIDGIN_LIBS@ $(WEBKIT_LIBS)
    -notify_la_LIBADD = @PIDGIN_LIBS@
    -relnot_la_LIBADD = @PIDGIN_LIBS@
    -screencap_la_LIBADD = @PIDGIN_LIBS@
    -sendbutton_la_LIBADD = @PIDGIN_LIBS@
    -spellchk_la_LIBADD = @PIDGIN_LIBS@
    -unity_la_LIBADD = @PIDGIN_LIBS@ $(UNITY_LIBS)
    -webkit_la_LIBADD = @PIDGIN_LIBS@ $(WEBKIT_LIBS)
    -xmppconsole_la_LIBADD = @PIDGIN_LIBS@
    -
    -imgupload_la_CFLAGS = $(JSON_CFLAGS)
    -
    -endif # PLUGINS
    -
    -EXTRA_DIST = \
    - Makefile.mingw \
    - mailchk.c \
    - pidgininc.c \
    - raw.c \
    - win32/transparency/Makefile.mingw \
    - win32/transparency/win2ktrans.c \
    - win32/winprefs/gtkappbar.c \
    - win32/winprefs/gtkappbar.h \
    - win32/winprefs/Makefile.mingw \
    - win32/winprefs/winprefs.c
    -
    -AM_CPPFLAGS = \
    - -I$(top_builddir)/libpurple \
    - -I$(top_srcdir)/libpurple \
    - -I$(top_srcdir)/pidgin \
    - $(DEBUG_CFLAGS) \
    - $(GTK_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(UNITY_CFLAGS) \
    - $(WEBKIT_CFLAGS) \
    - $(GSTREAMER_CFLAGS) \
    - $(PLUGIN_CFLAGS)
    -
    -#
    -# This part allows people to build their own plugins in here.
    -# Yes, it's a mess.
    -#
    -SUFFIXES = .c .so
    -.c.so:
    - $(LIBTOOL) --mode=compile $(CC) -DHAVE_CONFIG_H -I$(top_builddir) $(AM_CPPFLAGS) $(CFLAGS) -c $< -o tmp$@.lo $(PLUGIN_CFLAGS)
    - $(LIBTOOL) --mode=link $(CC) $(CFLAGS) -o libtmp$@.la -rpath $(plugindir) tmp$@.lo $(LIBS) $(LDFLAGS) -module @PLUGIN_LDFLAGS@ $(PLUGIN_LIBS)
    - @rm -f tmp$@.lo tmp$@.o libtmp$@.la
    - @cp .libs/libtmp$@*.so $@
    - @rm -rf .libs/libtmp$@.*
    --- a/pidgin/plugins/Makefile.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,110 +0,0 @@
    -#
    -# Makefile.mingw
    -#
    -# Description: Makefile for win32 (mingw) version of Pidgin Plugins
    -#
    -
    -PIDGIN_TREE_TOP := ../..
    -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
    -
    -DISCO_PLUGIN := ./disco
    -TICKER_PLUGIN := ./ticker
    -TRANSPARENCY_PLUGIN := ./win32/transparency
    -WINPREFS_PLUGIN := ./win32/winprefs
    -
    -.SUFFIXES:
    -.SUFFIXES: .c .dll
    -
    -##
    -## INCLUDE PATHS
    -##
    -INCLUDE_PATHS += \
    - -I$(GTK_TOP)/include \
    - -I$(GTK_TOP)/include/gtk-2.0 \
    - -I$(GTK_TOP)/include/glib-2.0 \
    - -I$(GTK_TOP)/include/pango-1.0 \
    - -I$(GTK_TOP)/include/atk-1.0 \
    - -I$(GTK_TOP)/include/cairo \
    - -I$(GTK_TOP)/include/gdk-pixbuf-2.0 \
    - -I$(GTK_TOP)/lib/glib-2.0/include \
    - -I$(GTK_TOP)/lib/gtk-2.0/include \
    - -I$(LIBSOUP_TOP)/include/libsoup-2.4 \
    - -I$(WEBKITGTK_TOP)/include/webkitgtk-1.0 \
    - -I$(PIDGIN_TREE_TOP) \
    - -I$(PURPLE_TOP) \
    - -I$(PURPLE_TOP)/win32 \
    - -I$(PIDGIN_TOP) \
    - -I$(PIDGIN_TOP)/win32
    -
    -LIB_PATHS += -L$(GTK_TOP)/lib \
    - -L$(WEBKITGTK_TOP)/lib \
    - -L$(PURPLE_TOP) \
    - -L$(PIDGIN_TOP)
    -
    -##
    -## LIBRARIES
    -##
    -LIBS = -lgtk-win32-2.0 \
    - -lglib-2.0 \
    - -lgdk-win32-2.0 \
    - -lgobject-2.0 \
    - -lgmodule-2.0 \
    - -lgdk_pixbuf-2.0 \
    - -lpango-1.0 \
    - -lcairo \
    - -lintl \
    - -lws2_32 \
    - -lwebkitgtk-1.0 \
    - -lpurple \
    - -lpidgin
    -
    -##
    -## TARGET DEFINITIONS
    -##
    -.PHONY: all clean plugins install
    -
    -all: plugins
    - $(MAKE_at) $(MAKE) -C $(DISCO_PLUGIN) -f $(MINGW_MAKEFILE)
    - $(MAKE_at) $(MAKE) -C $(TICKER_PLUGIN) -f $(MINGW_MAKEFILE)
    - $(MAKE_at) $(MAKE) -C $(TRANSPARENCY_PLUGIN) -f $(MINGW_MAKEFILE)
    - $(MAKE_at) $(MAKE) -C $(WINPREFS_PLUGIN) -f $(MINGW_MAKEFILE)
    -
    -install: all $(PIDGIN_INSTALL_PLUGINS_DIR)
    - $(MAKE_at) $(MAKE) -C $(DISCO_PLUGIN) -f $(MINGW_MAKEFILE) install
    - $(MAKE_at) $(MAKE) -C $(TICKER_PLUGIN) -f $(MINGW_MAKEFILE) install
    - $(MAKE_at) $(MAKE) -C $(TRANSPARENCY_PLUGIN) -f $(MINGW_MAKEFILE) install
    - $(MAKE_at) $(MAKE) -C $(WINPREFS_PLUGIN) -f $(MINGW_MAKEFILE) install
    - cp *.dll $(PIDGIN_INSTALL_PLUGINS_DIR)
    -
    -%.dll: %.c $(PURPLE_CONFIG_H) $(PURPLE_VERSION_H)
    - $(CC) $(CFLAGS) $(DEFINES) $(INCLUDE_PATHS) -o $@.o -c $<
    - $(CC) -shared $@.o $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $@
    -
    -
    -include $(PIDGIN_COMMON_RULES)
    -
    -plugins: \
    - contact_priority.dll \
    - extplacement.dll \
    - gtkbuddynote.dll \
    - history.dll \
    - iconaway.dll \
    - markerline.dll \
    - notify.dll \
    - relnot.dll \
    - sendbutton.dll \
    - spellchk.dll \
    - webkit.dll \
    - xmppconsole.dll
    -
    -##
    -## CLEAN RULES
    -##
    -clean:
    - rm -f *.o *.dll
    - $(MAKE_at) $(MAKE) -C $(DISCO_PLUGIN) -f $(MINGW_MAKEFILE) clean
    - $(MAKE_at) $(MAKE) -C $(TICKER_PLUGIN) -f $(MINGW_MAKEFILE) clean
    - $(MAKE_at) $(MAKE) -C $(TRANSPARENCY_PLUGIN) -f $(MINGW_MAKEFILE) clean
    - $(MAKE_at) $(MAKE) -C $(WINPREFS_PLUGIN) -f $(MINGW_MAKEFILE) clean
    -
    -include $(PIDGIN_COMMON_TARGETS)
    --- a/pidgin/plugins/cap/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,29 +0,0 @@
    -capdir = @PIDGIN_PLUGINDIR@
    -
    -cap_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -
    -if PLUGINS
    -
    -cappixdir = $(datadir)/pixmaps/pidgin/buttons
    -
    -cap_LTLIBRARIES = cap.la
    -
    -cap_la_SOURCES = \
    - cap.h \
    - cap.c \
    - cap_statistics.h
    -
    -endif
    -
    -cap_la_LIBADD = @PIDGIN_LIBS@ $(SQLITE3_LIBS)
    -
    -AM_CPPFLAGS = \
    - -I$(top_srcdir)/libpurple \
    - -I$(top_builddir)/libpurple \
    - -I$(top_srcdir)/pidgin \
    - $(DEBUG_CFLAGS) \
    - $(GTK_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(SQLITE3_CFLAGS)
    -
    -EXTRA_DIST = Makefile.mingw
    --- a/pidgin/plugins/cap/Makefile.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,82 +0,0 @@
    -#
    -# Makefile.mingw
    -#
    -# Description: Makefile for cap plugin.
    -#
    -
    -PIDGIN_TREE_TOP := ../../..
    -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
    -
    -TARGET = cap
    -
    -# This is where sqlite3.[ch] from the sqlite "amalgamation" archive were extracted to
    -# This is available from http://www.sqlite.org/download.html
    -SQLITE_TOP ?= $(WIN32_DEV_TOP)/sqlite-3.4.1
    -
    -##
    -## INCLUDE PATHS
    -##
    -INCLUDE_PATHS += -I. \
    - -I$(SQLITE_TOP) \
    - -I$(GTK_TOP)/include \
    - -I$(GTK_TOP)/include/gtk-2.0 \
    - -I$(GTK_TOP)/include/glib-2.0 \
    - -I$(GTK_TOP)/include/pango-1.0 \
    - -I$(GTK_TOP)/include/atk-1.0 \
    - -I$(GTK_TOP)/include/cairo \
    - -I$(GTK_TOP)/lib/glib-2.0/include \
    - -I$(GTK_TOP)/lib/gtk-2.0/include \
    - -I$(PURPLE_TOP) \
    - -I$(PURPLE_TOP)/win32 \
    - -I$(PIDGIN_TOP) \
    - -I$(PIDGIN_TOP)/win32 \
    - -I$(PIDGIN_TREE_TOP)
    -
    -LIB_PATHS += -L$(GTK_TOP)/lib \
    - -L$(PURPLE_TOP) \
    - -L$(PIDGIN_TOP)
    -
    -##
    -## SOURCES, OBJECTS
    -##
    -C_SRC = cap.c \
    - $(SQLITE_TOP)/sqlite3.c
    -
    -OBJECTS = $(C_SRC:%.c=%.o)
    -
    -##
    -## LIBRARIES
    -##
    -LIBS = -lgtk-win32-2.0 \
    - -lglib-2.0 \
    - -lgdk-win32-2.0 \
    - -lgobject-2.0 \
    - -lintl \
    - -lpurple \
    - -lpidgin
    -
    -include $(PIDGIN_COMMON_RULES)
    -
    -##
    -## TARGET DEFINITIONS
    -##
    -.PHONY: all install clean
    -
    -all: $(TARGET).dll
    -
    -install: $(PIDGIN_INSTALL_PLUGINS_DIR) all
    - cp $(TARGET).dll $(PIDGIN_INSTALL_PLUGINS_DIR)
    -
    -$(OBJECTS): $(PIDGIN_CONFIG_H)
    -
    -$(TARGET).dll: $(PURPLE_DLL).a $(PIDGIN_DLL).a $(OBJECTS)
    - $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll
    -
    -##
    -## CLEAN RULES
    -##
    -clean:
    - rm -rf $(OBJECTS)
    - rm -rf $(TARGET).dll
    -
    -include $(PIDGIN_COMMON_TARGETS)
    --- a/pidgin/plugins/disco/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,28 +0,0 @@
    -plugindir = @PIDGIN_PLUGINDIR@
    -
    -xmppdisco_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -
    -EXTRA_DIST = \
    - Makefile.mingw
    -
    -if PLUGINS
    -
    -plugin_LTLIBRARIES = xmppdisco.la
    -
    -xmppdisco_la_SOURCES = \
    - gtkdisco.c \
    - gtkdisco.h \
    - xmppdisco.c \
    - xmppdisco.h
    -
    -xmppdisco_la_LIBADD = @PIDGIN_LIBS@
    -
    -endif
    -
    -AM_CPPFLAGS = \
    - -I$(top_srcdir)/libpurple \
    - -I$(top_builddir)/libpurple \
    - -I$(top_srcdir)/pidgin \
    - $(DEBUG_CFLAGS) \
    - $(GTK_CFLAGS) \
    - $(GPLUGIN_CFLAGS)
    --- a/pidgin/plugins/disco/Makefile.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,80 +0,0 @@
    -#
    -# Makefile.mingw
    -#
    -# Description: Makefile for xmppdisco plugin.
    -#
    -
    -PIDGIN_TREE_TOP := ../../..
    -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
    -
    -TARGET = xmppdisco
    -
    -##
    -## INCLUDE PATHS
    -##
    -INCLUDE_PATHS += -I. \
    - -I$(GTK_TOP)/include \
    - -I$(GTK_TOP)/include/gtk-2.0 \
    - -I$(GTK_TOP)/include/glib-2.0 \
    - -I$(GTK_TOP)/include/pango-1.0 \
    - -I$(GTK_TOP)/include/atk-1.0 \
    - -I$(GTK_TOP)/include/cairo \
    - -I$(GTK_TOP)/include/gdk-pixbuf-2.0 \
    - -I$(GTK_TOP)/lib/glib-2.0/include \
    - -I$(GTK_TOP)/lib/gtk-2.0/include \
    - -I$(PURPLE_TOP) \
    - -I$(PURPLE_TOP)/win32 \
    - -I$(PIDGIN_TOP) \
    - -I$(PIDGIN_TOP)/win32 \
    - -I$(PIDGIN_TREE_TOP)
    -
    -LIB_PATHS += -L$(GTK_TOP)/lib \
    - -L$(PURPLE_TOP) \
    - -L$(PIDGIN_TOP)
    -
    -##
    -## SOURCES, OBJECTS
    -##
    -C_SRC = xmppdisco.c \
    - gtkdisco.c
    -
    -OBJECTS = $(C_SRC:%.c=%.o)
    -
    -##
    -## LIBRARIES
    -##
    -LIBS = -lgtk-win32-2.0 \
    - -lglib-2.0 \
    - -lgdk-win32-2.0 \
    - -lgobject-2.0 \
    - -lpango-1.0 \
    - -lgdk_pixbuf-2.0 \
    - -lintl \
    - -lpurple \
    - -lpidgin
    -
    -include $(PIDGIN_COMMON_RULES)
    -
    -##
    -## TARGET DEFINITIONS
    -##
    -.PHONY: all install clean
    -
    -all: $(TARGET).dll
    -
    -install: $(PIDGIN_INSTALL_PLUGINS_DIR) all
    - cp $(TARGET).dll $(PIDGIN_INSTALL_PLUGINS_DIR)
    -
    -$(OBJECTS): $(PIDGIN_CONFIG_H)
    -
    -$(TARGET).dll: $(PURPLE_DLL).a $(PIDGIN_DLL).a $(OBJECTS)
    - $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll
    -
    -##
    -## CLEAN RULES
    -##
    -clean:
    - rm -rf $(OBJECTS)
    - rm -rf $(TARGET).dll
    -
    -include $(PIDGIN_COMMON_TARGETS)
    --- a/pidgin/plugins/disco/gtkdisco.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/plugins/disco/gtkdisco.c Thu Nov 23 22:30:26 2017 -0600
    @@ -282,7 +282,7 @@
    GtkTreeIter iter;
    GValue val;
    - if (event->button != 3 || event->type != GDK_BUTTON_PRESS)
    + if (!gdk_event_triggers_context_menu((GdkEvent *)event))
    return FALSE;
    pdl = user_data;
    @@ -315,8 +315,7 @@
    }
    gtk_widget_show_all(menu);
    - gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, event->button,
    - event->time);
    + gtk_menu_popup_at_pointer(GTK_MENU(menu), (GdkEvent *)event);
    return FALSE;
    }
    --- a/pidgin/plugins/gestures/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,26 +0,0 @@
    -plugindir = @PIDGIN_PLUGINDIR@
    -
    -gestures_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -
    -if PLUGINS
    -
    -plugin_LTLIBRARIES = gestures.la
    -
    -gestures_la_SOURCES = \
    - gestures.c \
    - gstroke.h \
    - gstroke-internal.h \
    - stroke.c \
    - stroke-draw.c
    -
    -gestures_la_LIBADD = @PIDGIN_LIBS@
    -
    -endif
    -
    -AM_CPPFLAGS = \
    - -I$(top_srcdir)/libpurple \
    - -I$(top_builddir)/libpurple \
    - -I$(top_srcdir)/pidgin \
    - $(DEBUG_CFLAGS) \
    - $(GTK_CFLAGS) \
    - $(GPLUGIN_CFLAGS)
    --- a/pidgin/plugins/gevolution/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,29 +0,0 @@
    -plugindir = @PIDGIN_PLUGINDIR@
    -
    -gevolution_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -
    -if PLUGINS
    -
    -plugin_LTLIBRARIES = gevolution.la
    -
    -gevolution_la_SOURCES = \
    - add_buddy_dialog.c \
    - assoc-buddy.c \
    - gevolution.c \
    - gevolution.h \
    - gevo-util.c \
    - new_person_dialog.c \
    - eds-utils.c
    -
    -gevolution_la_LIBADD = @PIDGIN_LIBS@ $(EVOLUTION_ADDRESSBOOK_LIBS) $(GPLUGIN_LIBS)
    -
    -endif
    -
    -AM_CPPFLAGS = \
    - -I$(top_srcdir)/libpurple \
    - -I$(top_builddir)/libpurple \
    - -I$(top_srcdir)/pidgin \
    - $(EVOLUTION_ADDRESSBOOK_CFLAGS) \
    - $(DEBUG_CFLAGS) \
    - $(GTK_CFLAGS) \
    - $(GPLUGIN_CFLAGS)
    --- a/pidgin/plugins/musicmessaging/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,44 +0,0 @@
    -EXTRA_DIST = \
    - music.png
    -
    -musicmessagingdir = @PIDGIN_PLUGINDIR@
    -
    -musicmessaging_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -
    -if PLUGINS
    -if ENABLE_DBUS
    -
    -musicmessagingpixdir = $(datadir)/pixmaps/pidgin/buttons
    -musicmessagingpix_DATA = music.png
    -
    -musicmessaging_LTLIBRARIES = musicmessaging.la
    -
    -musicmessaging_la_SOURCES = \
    - musicmessaging.c
    -
    -musicmessaging_la_LIBADD = @PIDGIN_LIBS@ $(DBUS_LIBS)
    -
    -CLEANFILES = music-messaging-bindings.ch
    -
    -.PHONY: always
    -
    -$(top_builddir)/libpurple/dbus-types.h: always
    - $(AM_V_GEN)cd $(@D) && $(MAKE) $(AM_MAKEFLAGS) $(@F)
    -
    -music-messaging-bindings.ch: $(top_srcdir)/libpurple/dbus-analyze-functions.py $(musicmessaging_la_SOURCES)
    - $(AM_V_GEN)cat $(srcdir)/$(musicmessaging_la_SOURCES) | \
    - $(PYTHON) $(top_srcdir)/libpurple/dbus-analyze-functions.py --export-only > $@
    -
    -$(musicmessaging_la_OBJECTS) musicmessaging.so: music-messaging-bindings.ch $(top_builddir)/libpurple/dbus-types.h
    -
    -endif
    -endif
    -
    -AM_CPPFLAGS = \
    - -I$(top_builddir)/libpurple \
    - -I$(top_srcdir)/libpurple \
    - -I$(top_srcdir)/pidgin \
    - $(DEBUG_CFLAGS) \
    - $(GTK_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(DBUS_CFLAGS)
    --- a/pidgin/plugins/ticker/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,27 +0,0 @@
    -EXTRA_DIST = \
    - Makefile.mingw
    -
    -plugindir = @PIDGIN_PLUGINDIR@
    -
    -ticker_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -
    -if PLUGINS
    -
    -plugin_LTLIBRARIES = ticker.la
    -
    -ticker_la_SOURCES = \
    - gtkticker.c \
    - gtkticker.h \
    - ticker.c
    -
    -ticker_la_LIBADD = @PIDGIN_LIBS@
    -
    -endif
    -
    -AM_CPPFLAGS = \
    - -I$(top_srcdir)/libpurple \
    - -I$(top_builddir)/libpurple \
    - -I$(top_srcdir)/pidgin \
    - $(DEBUG_CFLAGS) \
    - $(GTK_CFLAGS) \
    - $(GPLUGIN_CFLAGS)
    --- a/pidgin/plugins/ticker/Makefile.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,78 +0,0 @@
    -#
    -# Makefile.mingw
    -#
    -# Description: Makefile for ticker plugin.
    -#
    -
    -PIDGIN_TREE_TOP := ../../..
    -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
    -
    -TARGET = ticker
    -
    -##
    -## INCLUDE PATHS
    -##
    -INCLUDE_PATHS += -I. \
    - -I$(GTK_TOP)/include \
    - -I$(GTK_TOP)/include/gtk-2.0 \
    - -I$(GTK_TOP)/include/glib-2.0 \
    - -I$(GTK_TOP)/include/pango-1.0 \
    - -I$(GTK_TOP)/include/atk-1.0 \
    - -I$(GTK_TOP)/include/cairo \
    - -I$(GTK_TOP)/include/gdk-pixbuf-2.0 \
    - -I$(GTK_TOP)/lib/glib-2.0/include \
    - -I$(GTK_TOP)/lib/gtk-2.0/include \
    - -I$(PURPLE_TOP) \
    - -I$(PURPLE_TOP)/win32 \
    - -I$(PIDGIN_TOP) \
    - -I$(PIDGIN_TOP)/win32 \
    - -I$(PIDGIN_TREE_TOP)
    -
    -LIB_PATHS += -L$(GTK_TOP)/lib \
    - -L$(PURPLE_TOP) \
    - -L$(PIDGIN_TOP)
    -
    -##
    -## SOURCES, OBJECTS
    -##
    -C_SRC = ticker.c \
    - gtkticker.c
    -
    -OBJECTS = $(C_SRC:%.c=%.o)
    -
    -##
    -## LIBRARIES
    -##
    -LIBS = -lgtk-win32-2.0 \
    - -lglib-2.0 \
    - -lgdk-win32-2.0 \
    - -lgobject-2.0 \
    - -lintl \
    - -lpurple \
    - -lpidgin
    -
    -include $(PIDGIN_COMMON_RULES)
    -
    -##
    -## TARGET DEFINITIONS
    -##
    -.PHONY: all install clean
    -
    -all: $(TARGET).dll
    -
    -install: $(PIDGIN_INSTALL_PLUGINS_DIR) all
    - cp $(TARGET).dll $(PIDGIN_INSTALL_PLUGINS_DIR)
    -
    -$(OBJECTS): $(PIDGIN_CONFIG_H)
    -
    -$(TARGET).dll: $(PURPLE_DLL).a $(PIDGIN_DLL).a $(OBJECTS)
    - $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll
    -
    -##
    -## CLEAN RULES
    -##
    -clean:
    - rm -rf $(OBJECTS)
    - rm -rf $(TARGET).dll
    -
    -include $(PIDGIN_COMMON_TARGETS)
    --- a/pidgin/plugins/win32/transparency/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,17 +0,0 @@
    -plugindir = @PIDGIN_PLUGINDIR@
    -
    -plugin_LTLIBRARIES = win2ktrans.la
    -
    -win2ktrans_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -win2ktrans_la_SOURCES = win2ktrans.c
    -win2ktrans_la_LIBADD = @PIDGIN_LIBS@
    -
    -AM_CPPFLAGS = \
    - -I$(top_srcdir)/libpurple \
    - -I$(top_builddir)/libpurple \
    - -I$(top_srcdir)/pidgin \
    - $(DEBUG_CPPFLAGS) \
    - $(GLIB_CFLAGS) \
    - $(GTK_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(PLUGIN_CFLAGS)
    --- a/pidgin/plugins/win32/transparency/Makefile.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,76 +0,0 @@
    -#
    -# Makefile.mingw
    -#
    -# Description: Makefile for win32trans plugin.
    -#
    -
    -PIDGIN_TREE_TOP := ../../../..
    -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
    -
    -TARGET = win2ktrans
    -
    -##
    -## INCLUDE PATHS
    -##
    -INCLUDE_PATHS += -I. \
    - -I$(GTK_TOP)/include \
    - -I$(GTK_TOP)/include/gtk-2.0 \
    - -I$(GTK_TOP)/include/glib-2.0 \
    - -I$(GTK_TOP)/include/pango-1.0 \
    - -I$(GTK_TOP)/include/atk-1.0 \
    - -I$(GTK_TOP)/include/cairo \
    - -I$(GTK_TOP)/include/gdk-pixbuf-2.0 \
    - -I$(GTK_TOP)/lib/glib-2.0/include \
    - -I$(GTK_TOP)/lib/gtk-2.0/include \
    - -I$(PURPLE_TOP) \
    - -I$(PURPLE_TOP)/win32 \
    - -I$(PIDGIN_TOP) \
    - -I$(PIDGIN_TOP)/win32 \
    - -I$(PIDGIN_TREE_TOP)
    -
    -LIB_PATHS += -L$(GTK_TOP)/lib \
    - -L$(PURPLE_TOP) \
    - -L$(PIDGIN_TOP)
    -
    -##
    -## SOURCES, OBJECTS
    -##
    -C_SRC = win2ktrans.c
    -
    -OBJECTS = $(C_SRC:%.c=%.o)
    -
    -##
    -## LIBRARIES
    -##
    -LIBS = -lgtk-win32-2.0 \
    - -lglib-2.0 \
    - -lgdk-win32-2.0 \
    - -lgmodule-2.0 \
    - -lgobject-2.0 \
    - -lintl \
    - -lpidgin \
    - -lpurple
    -
    -include $(PIDGIN_COMMON_RULES)
    -
    -##
    -## TARGET DEFINITIONS
    -##
    -.PHONY: all install clean
    -
    -all: $(TARGET).dll
    -
    -install: all $(PIDGIN_INSTALL_PLUGINS_DIR)
    - cp $(TARGET).dll $(PIDGIN_INSTALL_PLUGINS_DIR)
    -
    -$(TARGET).dll: $(PURPLE_DLL).a $(PIDGIN_DLL).a $(OBJECTS)
    - $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll
    -
    -##
    -## CLEAN RULES
    -##
    -clean:
    - rm -rf $(OBJECTS)
    - rm -rf $(TARGET).dll
    -
    -include $(PIDGIN_COMMON_TARGETS)
    --- a/pidgin/plugins/win32/winprefs/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,20 +0,0 @@
    -plugindir = @PIDGIN_PLUGINDIR@
    -
    -plugin_LTLIBRARIES = winprefs.la
    -
    -winprefs_la_LDFLAGS = -module @PLUGIN_LDFLAGS@
    -winprefs_la_SOURCES = \
    - gtkappbar.c \
    - gtkappbar.h \
    - winprefs.c
    -winprefs_la_LIBADD = @PIDGIN_LIBS@
    -
    -AM_CPPFLAGS = \
    - -I$(top_srcdir)/libpurple \
    - -I$(top_builddir)/libpurple \
    - -I$(top_srcdir)/pidgin \
    - $(DEBUG_CPPFLAGS) \
    - $(GLIB_CFLAGS) \
    - $(GTK_CFLAGS) \
    - $(GPLUGIN_CFLAGS) \
    - $(PLUGIN_CFLAGS)
    --- a/pidgin/plugins/win32/winprefs/Makefile.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,82 +0,0 @@
    -#
    -# Makefile.mingw
    -#
    -# Description: Makefile for winprefs plugin.
    -#
    -
    -PIDGIN_TREE_TOP := ../../../..
    -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
    -
    -TARGET = winprefs
    -DEFINES := $(subst -DWIN32_LEAN_AND_MEAN,,$(DEFINES))
    -
    -##
    -## INCLUDE PATHS
    -##
    -INCLUDE_PATHS += -I. \
    - -I$(GTK_TOP)/include \
    - -I$(GTK_TOP)/include/gtk-2.0 \
    - -I$(GTK_TOP)/include/glib-2.0 \
    - -I$(GTK_TOP)/include/pango-1.0 \
    - -I$(GTK_TOP)/include/atk-1.0 \
    - -I$(GTK_TOP)/include/cairo \
    - -I$(GTK_TOP)/include/gdk-pixbuf-2.0 \
    - -I$(GTK_TOP)/lib/glib-2.0/include \
    - -I$(GTK_TOP)/lib/gtk-2.0/include \
    - -I$(PURPLE_TOP) \
    - -I$(PURPLE_TOP)/win32 \
    - -I$(PIDGIN_TOP) \
    - -I$(PIDGIN_TOP)/win32 \
    - -I$(PIDGIN_TREE_TOP)
    -
    -LIB_PATHS += -L$(GTK_TOP)/lib \
    - -L$(PURPLE_TOP) \
    - -L$(PIDGIN_TOP)
    -
    -##
    -## SOURCES, OBJECTS
    -##
    -C_SRC = winprefs.c \
    - gtkappbar.c
    -
    -OBJECTS = $(C_SRC:%.c=%.o)
    -
    -##
    -## LIBRARIES
    -##
    -LIBS = -lgtk-win32-2.0 \
    - -lglib-2.0 \
    - -lgdk-win32-2.0 \
    - -lgmodule-2.0 \
    - -lgobject-2.0 \
    - -lws2_32 \
    - -lintl \
    - -lpurple \
    - -lpidgin
    -
    -include $(PIDGIN_COMMON_RULES)
    -
    -##
    -## TARGET DEFINITIONS
    -##
    -.PHONY: all install clean
    -
    -all: $(TARGET).dll
    -
    -install: $(TARGET).dll $(PIDGIN_INSTALL_PLUGINS_DIR)
    - cp $(TARGET).dll $(PIDGIN_INSTALL_PLUGINS_DIR)
    -
    -##
    -## BUILD DLL
    -##
    -$(TARGET).dll: $(PURPLE_DLL).a $(PIDGIN_DLL).a $(OBJECTS)
    - $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll
    -
    -##
    -## CLEAN RULES
    -##
    -clean:
    - rm -rf $(OBJECTS)
    - rm -rf $(TARGET).dll
    -
    -include $(PIDGIN_COMMON_TARGETS)
    --- a/pidgin/themes/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,22 +0,0 @@
    -
    -themetemplatedir = $(datadir)/pidgin/theme
    -themetemplate_DATA = Template.html
    -themecontentsdir = $(themetemplatedir)/Contents
    -themecontents_DATA = Contents/Info.plist
    -themeresourcesdir = $(themecontentsdir)/Resources
    -themeresources_DATA = Contents/Resources/Content.html \
    - Contents/Resources/Status.html \
    - Contents/Resources/main.css
    -themeresourcesincomingdir = $(themeresourcesdir)/Incoming
    -themeresourcesincoming_DATA = Contents/Resources/Incoming/Content.html
    -themevariantsdir = $(themeresourcesdir)/Variants
    -themevariants_DATA = Contents/Resources/Variants/Default.css \
    - Contents/Resources/Variants/No-Timestamps.css
    -
    -EXTRA_DIST = \
    - $(themetemplate_DATA) \
    - $(themecontents_DATA) \
    - $(themeresources_DATA) \
    - $(themeresourcesincoming_DATA) \
    - $(themevariants_DATA)
    -
    --- a/pidgin/win32/gtkdocklet-win32.c Thu Oct 05 21:24:11 2017 -0500
    +++ b/pidgin/win32/gtkdocklet-win32.c Thu Nov 23 22:30:26 2017 -0600
    @@ -85,11 +85,11 @@
    /* We'll use Double Click - Single click over on linux */
    if(lparam == WM_LBUTTONDBLCLK)
    - type = 1;
    + type = GDK_BUTTOM_PRIMARY;
    else if(lparam == WM_MBUTTONUP)
    - type = 2;
    + type = GDK_BUTTON_MIDDLE;
    else if(lparam == WM_RBUTTONUP)
    - type = 3;
    + type = GDK_BUTTON_SECONDARY;
    else
    break;
    --- a/po/Makefile.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,55 +0,0 @@
    -# Makefile.mingw
    -#
    -# Description: Makefile to generate mo files
    -#
    -
    -PIDGIN_TREE_TOP := ..
    -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
    -
    -PACKAGE = pidgin
    -
    -.SUFFIXES:
    -.SUFFIXES: .po .gmo
    -
    -##
    -## SOURCES, OBJECTS
    -##
    -
    -CATALOGS = $(patsubst %.po,%.gmo,$(wildcard *.po))
    -
    -##
    -## RULES
    -##
    -
    -.po.gmo:
    - @echo -e " GEN\t$@"
    - @rm -f $@ && $(GMSGFMT) --statistics -o $@ $<
    -
    -##
    -## TARGETS
    -##
    -
    -.PHONY: all install clean
    -
    -all: $(CATALOGS)
    -
    -install: all
    - mkdir -p $(PURPLE_INSTALL_PO_DIR)
    - @catalogs='$(CATALOGS)'; \
    - for cat in $$catalogs; do \
    - cat=`basename $$cat`; \
    - lang=`echo $$cat | sed 's/\.gmo$$//'`; \
    - dir=$(PURPLE_INSTALL_PO_DIR)/$$lang/LC_MESSAGES; \
    - mkdir -p $$dir; \
    - if test -r $$cat; then \
    - cp $$cat $$dir/$(PACKAGE).mo; \
    - echo "installing $$cat as $$dir/$(PACKAGE).mo"; \
    - else \
    - cp $(PURPLE_PO_TOP)/$$cat $$dir/$(PACKAGE).mo; \
    - echo "installing $(PURPLE_PO_TOP)/$$cat as" \
    - "$$dir/$(PACKAGE).mo"; \
    - fi; \
    - done
    -
    -clean:
    - rm -f *.gmo
    --- a/po/POTFILES.in Thu Oct 05 21:24:11 2017 -0500
    +++ b/po/POTFILES.in Thu Nov 23 22:30:26 2017 -0600
    @@ -168,6 +168,8 @@
    libpurple/win32/libc_interface.c
    libpurple/xfer.c
    libpurple/xmlnode.c
    +[type: gettext/glade]pidgin/about.ui
    +pidgin/credits.json
    pidgin/data/im.pidgin.Pidgin.appdata.xml.in
    pidgin/data/im.pidgin.Pidgin.desktop.in.in
    pidgin/gtkaccount.c
    @@ -199,6 +201,7 @@
    pidgin/gtkxfer.c
    pidgin/libpidgin.c
    pidgin/pidgin.h
    +pidgin/pidginabout.c
    pidgin/pidginstock.c
    pidgin/pidgintooltip.c
    pidgin/pixmaps/emotes/default/24/default.theme.in
    --- a/share/ca-certs/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,23 +0,0 @@
    -CERTIFICATES = \
    - CAcert_Root.pem \
    - CAcert_Class3.pem \
    - mozilla.pem
    -
    -#EXTRA_CERTS = \
    -# filename.pem
    -
    -
    -cacertsdir = $(datadir)/purple/ca-certs
    -
    -if INSTALL_SSL_CERTIFICATES
    -cacerts_DATA = \
    - $(CERTIFICATES) \
    - $(EXTRA_CERTS)
    -else
    -cacerts_DATA = $(EXTRA_CERTS)
    -endif
    -
    -EXTRA_DIST = \
    - Makefile.mingw \
    - $(CERTIFICATES) \
    - $(EXTRA_CERTS)
    --- a/share/ca-certs/Makefile.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,27 +0,0 @@
    -#
    -# Makefile.mingw
    -#
    -# Description: Makefile for win32 (mingw) version of Pidgin ca-certs
    -#
    -
    -PIDGIN_TREE_TOP := ../..
    -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
    -
    -datadir := $(PIDGIN_INSTALL_DIR)
    --include ./Makefile.am.mingw
    -cacertsdir := $(PIDGIN_INSTALL_DIR)/ca-certs
    -
    -.PHONY: install clean
    -
    -install: ./Makefile.am.mingw
    - if test '$(cacerts_DATA)'; then \
    - mkdir -p $(cacertsdir); \
    - cp $(cacerts_DATA) $(cacertsdir); \
    - fi;
    -
    -clean:
    - rm -f ./Makefile.am.mingw
    -
    -./Makefile.am.mingw: ./Makefile.am
    - sed -e 's/^if\ INSTALL_SSL_CERTIFICATES/ifeq (\$$(INSTALL_SSL_CERTIFICATES), 1)/' ./Makefile.am > $@
    -
    --- a/share/sounds/Makefile.am Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,12 +0,0 @@
    -soundsdir = $(datadir)/sounds/purple
    -sounds_DATA = \
    - alert.wav \
    - login.wav \
    - logout.wav \
    - receive.wav \
    - send.wav
    -
    -EXTRA_DIST = \
    - Makefile.mingw \
    - $(sounds_DATA)
    -
    --- a/share/sounds/Makefile.mingw Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,20 +0,0 @@
    -#
    -# Makefile.mingw
    -#
    -# Description: Makefile for win32 (mingw) version of Pidgin sounds
    -#
    -
    -PIDGIN_TREE_TOP := ../..
    -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
    -
    -datadir := $(PIDGIN_INSTALL_DIR)
    -include ./Makefile.am
    -
    -.PHONY: install
    -
    -install:
    - if test '$(sounds_DATA)'; then \
    - mkdir -p $(soundsdir); \
    - cp $(sounds_DATA) $(soundsdir); \
    - fi;
    -
    --- a/tap-driver.sh Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,652 +0,0 @@
    -#! /bin/sh
    -# Copyright (C) 2011-2013 Free Software Foundation, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2, or (at your option)
    -# any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program. If not, see <http://www.gnu.org/licenses/>.
    -
    -# As a special exception to the GNU General Public License, if you
    -# distribute this file as part of a program that contains a
    -# configuration script generated by Autoconf, you may include it under
    -# the same distribution terms that you use for the rest of that program.
    -
    -# This file is maintained in Automake, please report
    -# bugs to <bug-automake@gnu.org> or send patches to
    -# <automake-patches@gnu.org>.
    -
    -scriptversion=2011-12-27.17; # UTC
    -
    -# Make unconditional expansion of undefined variables an error. This
    -# helps a lot in preventing typo-related bugs.
    -set -u
    -
    -me=tap-driver.sh
    -
    -fatal ()
    -{
    - echo "$me: fatal: $*" >&2
    - exit 1
    -}
    -
    -usage_error ()
    -{
    - echo "$me: $*" >&2
    - print_usage >&2
    - exit 2
    -}
    -
    -print_usage ()
    -{
    - cat <<END
    -Usage:
    - tap-driver.sh --test-name=NAME --log-file=PATH --trs-file=PATH
    - [--expect-failure={yes|no}] [--color-tests={yes|no}]
    - [--enable-hard-errors={yes|no}] [--ignore-exit]
    - [--diagnostic-string=STRING] [--merge|--no-merge]
    - [--comments|--no-comments] [--] TEST-COMMAND
    -The \`--test-name', \`--log-file' and \`--trs-file' options are mandatory.
    -END
    -}
    -
    -# TODO: better error handling in option parsing (in particular, ensure
    -# TODO: $log_file, $trs_file and $test_name are defined).
    -test_name= # Used for reporting.
    -log_file= # Where to save the result and output of the test script.
    -trs_file= # Where to save the metadata of the test run.
    -expect_failure=0
    -color_tests=0
    -merge=0
    -ignore_exit=0
    -comments=0
    -diag_string='#'
    -while test $# -gt 0; do
    - case $1 in
    - --help) print_usage; exit $?;;
    - --version) echo "$me $scriptversion"; exit $?;;
    - --test-name) test_name=$2; shift;;
    - --log-file) log_file=$2; shift;;
    - --trs-file) trs_file=$2; shift;;
    - --color-tests) color_tests=$2; shift;;
    - --expect-failure) expect_failure=$2; shift;;
    - --enable-hard-errors) shift;; # No-op.
    - --merge) merge=1;;
    - --no-merge) merge=0;;
    - --ignore-exit) ignore_exit=1;;
    - --comments) comments=1;;
    - --no-comments) comments=0;;
    - --diagnostic-string) diag_string=$2; shift;;
    - --) shift; break;;
    - -*) usage_error "invalid option: '$1'";;
    - esac
    - shift
    -done
    -
    -test $# -gt 0 || usage_error "missing test command"
    -
    -case $expect_failure in
    - yes) expect_failure=1;;
    - *) expect_failure=0;;
    -esac
    -
    -if test $color_tests = yes; then
    - init_colors='
    - color_map["red"]="" # Red.
    - color_map["grn"]="" # Green.
    - color_map["lgn"]="" # Light green.
    - color_map["blu"]="" # Blue.
    - color_map["mgn"]="" # Magenta.
    - color_map["std"]="" # No color.
    - color_for_result["ERROR"] = "mgn"
    - color_for_result["PASS"] = "grn"
    - color_for_result["XPASS"] = "red"
    - color_for_result["FAIL"] = "red"
    - color_for_result["XFAIL"] = "lgn"
    - color_for_result["SKIP"] = "blu"'
    -else
    - init_colors=''
    -fi
    -
    -# :; is there to work around a bug in bash 3.2 (and earlier) which
    -# does not always set '$?' properly on redirection failure.
    -# See the Autoconf manual for more details.
    -:;{
    - (
    - # Ignore common signals (in this subshell only!), to avoid potential
    - # problems with Korn shells. Some Korn shells are known to propagate
    - # to themselves signals that have killed a child process they were
    - # waiting for; this is done at least for SIGINT (and usually only for
    - # it, in truth). Without the `trap' below, such a behaviour could
    - # cause a premature exit in the current subshell, e.g., in case the
    - # test command it runs gets terminated by a SIGINT. Thus, the awk
    - # script we are piping into would never seen the exit status it
    - # expects on its last input line (which is displayed below by the
    - # last `echo $?' statement), and would thus die reporting an internal
    - # error.
    - # For more information, see the Autoconf manual and the threads:
    - # <http://lists.gnu.org/archive/html/bug-autoconf/2011-09/msg00004.html>
    - # <http://mail.opensolaris.org/pipermail/ksh93-integration-discuss/2009-February/004121.html>
    - trap : 1 3 2 13 15
    - if test $merge -gt 0; then
    - exec 2>&1
    - else
    - exec 2>&3
    - fi
    - "$@"
    - echo $?
    - ) | LC_ALL=C ${AM_TAP_AWK-awk} \
    - -v me="$me" \
    - -v test_script_name="$test_name" \
    - -v log_file="$log_file" \
    - -v trs_file="$trs_file" \
    - -v expect_failure="$expect_failure" \
    - -v merge="$merge" \
    - -v ignore_exit="$ignore_exit" \
    - -v comments="$comments" \
    - -v diag_string="$diag_string" \
    -'
    -# FIXME: the usages of "cat >&3" below could be optimized when using
    -# FIXME: GNU awk, and/on on systems that supports /dev/fd/.
    -
    -# Implementation note: in what follows, `result_obj` will be an
    -# associative array that (partly) simulates a TAP result object
    -# from the `TAP::Parser` perl module.
    -
    -## ----------- ##
    -## FUNCTIONS ##
    -## ----------- ##
    -
    -function fatal(msg)
    -{
    - print me ": " msg | "cat >&2"
    - exit 1
    -}
    -
    -function abort(where)
    -{
    - fatal("internal error " where)
    -}
    -
    -# Convert a boolean to a "yes"/"no" string.
    -function yn(bool)
    -{
    - return bool ? "yes" : "no";
    -}
    -
    -function add_test_result(result)
    -{
    - if (!test_results_index)
    - test_results_index = 0
    - test_results_list[test_results_index] = result
    - test_results_index += 1
    - test_results_seen[result] = 1;
    -}
    -
    -# Whether the test script should be re-run by "make recheck".
    -function must_recheck()
    -{
    - for (k in test_results_seen)
    - if (k != "XFAIL" && k != "PASS" && k != "SKIP")
    - return 1
    - return 0
    -}
    -
    -# Whether the content of the log file associated to this test should
    -# be copied into the "global" test-suite.log.
    -function copy_in_global_log()
    -{
    - for (k in test_results_seen)
    - if (k != "PASS")
    - return 1
    - return 0
    -}
    -
    -# FIXME: this can certainly be improved ...
    -function get_global_test_result()
    -{
    - if ("ERROR" in test_results_seen)
    - return "ERROR"
    - if ("FAIL" in test_results_seen || "XPASS" in test_results_seen)
    - return "FAIL"
    - all_skipped = 1
    - for (k in test_results_seen)
    - if (k != "SKIP")
    - all_skipped = 0
    - if (all_skipped)
    - return "SKIP"
    - return "PASS";
    -}
    -
    -function stringify_result_obj(result_obj)
    -{
    - if (result_obj["is_unplanned"] || result_obj["number"] != testno)
    - return "ERROR"
    -
    - if (plan_seen == LATE_PLAN)
    - return "ERROR"
    -
    - if (result_obj["directive"] == "TODO")
    - return result_obj["is_ok"] ? "XPASS" : "XFAIL"
    -
    - if (result_obj["directive"] == "SKIP")
    - return result_obj["is_ok"] ? "SKIP" : COOKED_FAIL;
    -
    - if (length(result_obj["directive"]))
    - abort("in function stringify_result_obj()")
    -
    - return result_obj["is_ok"] ? COOKED_PASS : COOKED_FAIL
    -}
    -
    -function decorate_result(result)
    -{
    - color_name = color_for_result[result]
    - if (color_name)
    - return color_map[color_name] "" result "" color_map["std"]
    - # If we are not using colorized output, or if we do not know how
    - # to colorize the given result, we should return it unchanged.
    - return result
    -}
    -
    -function report(result, details)
    -{
    - if (result ~ /^(X?(PASS|FAIL)|SKIP|ERROR)/)
    - {
    - msg = ": " test_script_name
    - add_test_result(result)
    - }
    - else if (result == "#")
    - {
    - msg = " " test_script_name ":"
    - }
    - else
    - {
    - abort("in function report()")
    - }
    - if (length(details))
    - msg = msg " " details
    - # Output on console might be colorized.
    - print decorate_result(result) msg
    - # Log the result in the log file too, to help debugging (this is
    - # especially true when said result is a TAP error or "Bail out!").
    - print result msg | "cat >&3";
    -}
    -
    -function testsuite_error(error_message)
    -{
    - report("ERROR", "- " error_message)
    -}
    -
    -function handle_tap_result()
    -{
    - details = result_obj["number"];
    - if (length(result_obj["description"]))
    - details = details " " result_obj["description"]
    -
    - if (plan_seen == LATE_PLAN)
    - {
    - details = details " # AFTER LATE PLAN";
    - }
    - else if (result_obj["is_unplanned"])
    - {
    - details = details " # UNPLANNED";
    - }
    - else if (result_obj["number"] != testno)
    - {
    - details = sprintf("%s # OUT-OF-ORDER (expecting %d)",
    - details, testno);
    - }
    - else if (result_obj["directive"])
    - {
    - details = details " # " result_obj["directive"];
    - if (length(result_obj["explanation"]))
    - details = details " " result_obj["explanation"]
    - }
    -
    - report(stringify_result_obj(result_obj), details)
    -}
    -
    -# `skip_reason` should be empty whenever planned > 0.
    -function handle_tap_plan(planned, skip_reason)
    -{
    - planned += 0 # Avoid getting confused if, say, `planned` is "00"
    - if (length(skip_reason) && planned > 0)
    - abort("in function handle_tap_plan()")
    - if (plan_seen)
    - {
    - # Error, only one plan per stream is acceptable.
    - testsuite_error("multiple test plans")
    - return;
    - }
    - planned_tests = planned
    - # The TAP plan can come before or after *all* the TAP results; we speak
    - # respectively of an "early" or a "late" plan. If we see the plan line
    - # after at least one TAP result has been seen, assume we have a late
    - # plan; in this case, any further test result seen after the plan will
    - # be flagged as an error.
    - plan_seen = (testno >= 1 ? LATE_PLAN : EARLY_PLAN)
    - # If testno > 0, we have an error ("too many tests run") that will be
    - # automatically dealt with later, so do not worry about it here. If
    - # $plan_seen is true, we have an error due to a repeated plan, and that
    - # has already been dealt with above. Otherwise, we have a valid "plan
    - # with SKIP" specification, and should report it as a particular kind
    - # of SKIP result.
    - if (planned == 0 && testno == 0)
    - {
    - if (length(skip_reason))
    - skip_reason = "- " skip_reason;
    - report("SKIP", skip_reason);
    - }
    -}
    -
    -function extract_tap_comment(line)
    -{
    - if (index(line, diag_string) == 1)
    - {
    - # Strip leading `diag_string` from `line`.
    - line = substr(line, length(diag_string) + 1)
    - # And strip any leading and trailing whitespace left.
    - sub("^[ \t]*", "", line)
    - sub("[ \t]*$", "", line)
    - # Return what is left (if any).
    - return line;
    - }
    - return "";
    -}
    -
    -# When this function is called, we know that line is a TAP result line,
    -# so that it matches the (perl) RE "^(not )?ok\b".
    -function setup_result_obj(line)
    -{
    - # Get the result, and remove it from the line.
    - result_obj["is_ok"] = (substr(line, 1, 2) == "ok" ? 1 : 0)
    - sub("^(not )?ok[ \t]*", "", line)
    -
    - # If the result has an explicit number, get it and strip it; otherwise,
    - # automatically assing the next progresive number to it.
    - if (line ~ /^[0-9]+$/ || line ~ /^[0-9]+[^a-zA-Z0-9_]/)
    - {
    - match(line, "^[0-9]+")
    - # The final `+ 0` is to normalize numbers with leading zeros.
    - result_obj["number"] = substr(line, 1, RLENGTH) + 0
    - line = substr(line, RLENGTH + 1)
    - }
    - else
    - {
    - result_obj["number"] = testno
    - }
    -
    - if (plan_seen == LATE_PLAN)
    - # No further test results are acceptable after a "late" TAP plan
    - # has been seen.
    - result_obj["is_unplanned"] = 1
    - else if (plan_seen && testno > planned_tests)
    - result_obj["is_unplanned"] = 1
    - else
    - result_obj["is_unplanned"] = 0
    -
    - # Strip trailing and leading whitespace.
    - sub("^[ \t]*", "", line)
    - sub("[ \t]*$", "", line)
    -
    - # This will have to be corrected if we have a "TODO"/"SKIP" directive.
    - result_obj["description"] = line
    - result_obj["directive"] = ""
    - result_obj["explanation"] = ""
    -
    - if (index(line, "#") == 0)
    - return # No possible directive, nothing more to do.
    -
    - # Directives are case-insensitive.
    - rx = "[ \t]*#[ \t]*([tT][oO][dD][oO]|[sS][kK][iI][pP])[ \t]*"
    -
    - # See whether we have the directive, and if yes, where.
    - pos = match(line, rx "$")
    - if (!pos)
    - pos = match(line, rx "[^a-zA-Z0-9_]")
    -
    - # If there was no TAP directive, we have nothing more to do.
    - if (!pos)
    - return
    -
    - # Let`s now see if the TAP directive has been escaped. For example:
    - # escaped: ok \# SKIP
    - # not escaped: ok \\# SKIP
    - # escaped: ok \\\\\# SKIP
    - # not escaped: ok \ # SKIP
    - if (substr(line, pos, 1) == "#")
    - {
    - bslash_count = 0
    - for (i = pos; i > 1 && substr(line, i - 1, 1) == "\\"; i--)
    - bslash_count += 1
    - if (bslash_count % 2)
    - return # Directive was escaped.
    - }
    -
    - # Strip the directive and its explanation (if any) from the test
    - # description.
    - result_obj["description"] = substr(line, 1, pos - 1)
    - # Now remove the test description from the line, that has been dealt
    - # with already.
    - line = substr(line, pos)
    - # Strip the directive, and save its value (normalized to upper case).
    - sub("^[ \t]*#[ \t]*", "", line)
    - result_obj["directive"] = toupper(substr(line, 1, 4))
    - line = substr(line, 5)
    - # Now get the explanation for the directive (if any), with leading
    - # and trailing whitespace removed.
    - sub("^[ \t]*", "", line)
    - sub("[ \t]*$", "", line)
    - result_obj["explanation"] = line
    -}
    -
    -function get_test_exit_message(status)
    -{
    - if (status == 0)
    - return ""
    - if (status !~ /^[1-9][0-9]*$/)
    - abort("getting exit status")
    - if (status < 127)
    - exit_details = ""
    - else if (status == 127)
    - exit_details = " (command not found?)"
    - else if (status >= 128 && status <= 255)
    - exit_details = sprintf(" (terminated by signal %d?)", status - 128)
    - else if (status > 256 && status <= 384)
    - # We used to report an "abnormal termination" here, but some Korn
    - # shells, when a child process die due to signal number n, can leave
    - # in $? an exit status of 256+n instead of the more standard 128+n.
    - # Apparently, both behaviours are allowed by POSIX (2008), so be
    - # prepared to handle them both. See also Austing Group report ID
    - # 0000051 <http://www.austingroupbugs.net/view.php?id=51>
    - exit_details = sprintf(" (terminated by signal %d?)", status - 256)
    - else
    - # Never seen in practice.
    - exit_details = " (abnormal termination)"
    - return sprintf("exited with status %d%s", status, exit_details)
    -}
    -
    -function write_test_results()
    -{
    - print ":global-test-result: " get_global_test_result() > trs_file
    - print ":recheck: " yn(must_recheck()) > trs_file
    - print ":copy-in-global-log: " yn(copy_in_global_log()) > trs_file
    - for (i = 0; i < test_results_index; i += 1)
    - print ":test-result: " test_results_list[i] > trs_file
    - close(trs_file);
    -}
    -
    -BEGIN {
    -
    -## ------- ##
    -## SETUP ##
    -## ------- ##
    -
    -'"$init_colors"'
    -
    -# Properly initialized once the TAP plan is seen.
    -planned_tests = 0
    -
    -COOKED_PASS = expect_failure ? "XPASS": "PASS";
    -COOKED_FAIL = expect_failure ? "XFAIL": "FAIL";
    -
    -# Enumeration-like constants to remember which kind of plan (if any)
    -# has been seen. It is important that NO_PLAN evaluates "false" as
    -# a boolean.
    -NO_PLAN = 0
    -EARLY_PLAN = 1
    -LATE_PLAN = 2
    -
    -testno = 0 # Number of test results seen so far.
    -bailed_out = 0 # Whether a "Bail out!" directive has been seen.
    -
    -# Whether the TAP plan has been seen or not, and if yes, which kind
    -# it is ("early" is seen before any test result, "late" otherwise).
    -plan_seen = NO_PLAN
    -
    -## --------- ##
    -## PARSING ##
    -## --------- ##
    -
    -is_first_read = 1
    -
    -while (1)
    - {
    - # Involutions required so that we are able to read the exit status
    - # from the last input line.
    - st = getline
    - if (st < 0) # I/O error.
    - fatal("I/O error while reading from input stream")
    - else if (st == 0) # End-of-input
    - {
    - if (is_first_read)
    - abort("in input loop: only one input line")
    - break
    - }
    - if (is_first_read)
    - {
    - is_first_read = 0
    - nextline = $0
    - continue
    - }
    - else
    - {
    - curline = nextline
    - nextline = $0
    - $0 = curline
    - }
    - # Copy any input line verbatim into the log file.
    - print | "cat >&3"
    - # Parsing of TAP input should stop after a "Bail out!" directive.
    - if (bailed_out)
    - continue
    -
    - # TAP test result.
    - if ($0 ~ /^(not )?ok$/ || $0 ~ /^(not )?ok[^a-zA-Z0-9_]/)
    - {
    - testno += 1
    - setup_result_obj($0)
    - handle_tap_result()
    - }
    - # TAP plan (normal or "SKIP" without explanation).
    - else if ($0 ~ /^1\.\.[0-9]+[ \t]*$/)
    - {
    - # The next two lines will put the number of planned tests in $0.
    - sub("^1\\.\\.", "")
    - sub("[^0-9]*$", "")
    - handle_tap_plan($0, "")
    - continue
    - }
    - # TAP "SKIP" plan, with an explanation.
    - else if ($0 ~ /^1\.\.0+[ \t]*#/)
    - {
    - # The next lines will put the skip explanation in $0, stripping
    - # any leading and trailing whitespace. This is a little more
    - # tricky in truth, since we want to also strip a potential leading
    - # "SKIP" string from the message.
    - sub("^[^#]*#[ \t]*(SKIP[: \t][ \t]*)?", "")
    - sub("[ \t]*$", "");
    - handle_tap_plan(0, $0)
    - }
    - # "Bail out!" magic.
    - # Older versions of prove and TAP::Harness (e.g., 3.17) did not
    - # recognize a "Bail out!" directive when preceded by leading
    - # whitespace, but more modern versions (e.g., 3.23) do. So we
    - # emulate the latter, "more modern" behaviour.
    - else if ($0 ~ /^[ \t]*Bail out!/)
    - {
    - bailed_out = 1
    - # Get the bailout message (if any), with leading and trailing
    - # whitespace stripped. The message remains stored in `$0`.
    - sub("^[ \t]*Bail out![ \t]*", "");
    - sub("[ \t]*$", "");
    - # Format the error message for the
    - bailout_message = "Bail out!"
    - if (length($0))
    - bailout_message = bailout_message " " $0
    - testsuite_error(bailout_message)
    - }
    - # Maybe we have too look for dianogtic comments too.
    - else if (comments != 0)
    - {
    - comment = extract_tap_comment($0);
    - if (length(comment))
    - report("#", comment);
    - }
    - }
    -
    -## -------- ##
    -## FINISH ##
    -## -------- ##
    -
    -# A "Bail out!" directive should cause us to ignore any following TAP
    -# error, as well as a non-zero exit status from the TAP producer.
    -if (!bailed_out)
    - {
    - if (!plan_seen)
    - {
    - testsuite_error("missing test plan")
    - }
    - else if (planned_tests != testno)
    - {
    - bad_amount = testno > planned_tests ? "many" : "few"
    - testsuite_error(sprintf("too %s tests run (expected %d, got %d)",
    - bad_amount, planned_tests, testno))
    - }
    - if (!ignore_exit)
    - {
    - # Fetch exit status from the last line.
    - exit_message = get_test_exit_message(nextline)
    - if (exit_message)
    - testsuite_error(exit_message)
    - }
    - }
    -
    -write_test_results()
    -
    -exit 0
    -
    -} # End of "BEGIN" block.
    -'
    -
    -# TODO: document that we consume the file descriptor 3 :-(
    -} 3>"$log_file"
    -
    -test $? -eq 0 || fatal "I/O or internal error"
    -
    -# Local Variables:
    -# mode: shell-script
    -# sh-indentation: 2
    -# eval: (add-hook 'write-file-hooks 'time-stamp)
    -# time-stamp-start: "scriptversion="
    -# time-stamp-format: "%:y-%02m-%02d.%02H"
    -# time-stamp-time-zone: "UTC"
    -# time-stamp-end: "; # UTC"
    -# End:
    --- a/tap-test Thu Oct 05 21:24:11 2017 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,5 +0,0 @@
    -#! /bin/sh
    -
    -# run a GTest in tap mode. The test binary is passed as $1
    -
    -$1 -k --tap