Fri, 15 Dec 2017 03:52:01 +0000
Merged in rw_grim/pidgin (pull request #277)
Move to using GOptionContext to make it easier to share command line arguements
--- a/doc/reference/libpurple/libpurple-docs.xml Fri Dec 15 03:03:21 2017 +0000 +++ b/doc/reference/libpurple/libpurple-docs.xml Fri Dec 15 03:52:01 2017 +0000 @@ -58,6 +58,7 @@ <xi:include href="xml/nat-pmp.xml" /> <xi:include href="xml/network.xml" /> <xi:include href="xml/notify.xml" /> + <xi:include href="xml/options.xml" /> <xi:include href="xml/plugins.xml" /> <xi:include href="xml/prefs.xml" /> <xi:include href="xml/pluginpref.xml" />
--- a/finch/libfinch.c Fri Dec 15 03:03:21 2017 +0000 +++ b/finch/libfinch.c Fri Dec 15 03:52:01 2017 +0000 @@ -29,6 +29,7 @@ #include "glibcompat.h" #include "log.h" #include "notify.h" +#include "options.h" #include "plugins.h" #include "protocol.h" #include "pounce.h" @@ -146,9 +147,6 @@ {"config", 'c', 0, G_OPTION_ARG_FILENAME, &opt_config_dir_arg, _("use DIR for config files"), _("DIR")}, - {"debug", 'd', 0, - G_OPTION_ARG_NONE, &debug_enabled, - _("print debugging messages to stderr"), NULL}, {"nologin", 'n', 0, G_OPTION_ARG_NONE, &opt_nologin, _("don't automatically login"), NULL}, @@ -170,6 +168,9 @@ g_option_context_set_summary(context, DISPLAY_VERSION); g_option_context_add_main_entries(context, option_entries, PACKAGE); + g_option_context_add_group(context, purple_get_option_group()); + g_option_context_add_group(context, gplugin_get_option_group()); + #ifdef G_OS_WIN32 /* Handle Unicode filenames on Windows. See GOptionContext docs. */ args = g_win32_get_command_line();
--- a/libpurple/meson.build Fri Dec 15 03:03:21 2017 +0000 +++ b/libpurple/meson.build Fri Dec 15 03:52:01 2017 +0000 @@ -39,6 +39,7 @@ 'nat-pmp.c', 'network.c', 'notify.c', + 'options.c', 'plugins.c', 'pluginpref.c', 'pounce.c', @@ -118,6 +119,7 @@ 'nat-pmp.h', 'network.h', 'notify.h', + 'options.h', 'plugins.h', 'pluginpref.h', 'pounce.h',
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/options.c Fri Dec 15 03:52:01 2017 +0000 @@ -0,0 +1,96 @@ +/* purple + * + * 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 "internal.h" + +#include "options.h" + +#include "network.h" + +/****************************************************************************** + * Callbacks + *****************************************************************************/ +static gboolean +debug_cb(const gchar *option_name, const gchar *value, + gpointer data, GError **error) +{ + purple_debug_set_enabled(TRUE); + + if (purple_strequal(value, "colored")) { + purple_debug_set_colored(TRUE); + } + + return TRUE; +} + +static gboolean +force_online_cb(const gchar *option_name, const gchar *value, + gpointer data, GError **error) +{ + purple_network_force_online(); + + return TRUE; +} + +/****************************************************************************** + * API + *****************************************************************************/ + +/** + * purple_get_option_group: + * + * Returns a #GOptionGroup for the commandline arguments recognized by + * LibPurple. You should add this option group to your #GOptionContext with + * g_option_context_add_group(), if you are using g_option_context_parse() to + * parse your commandline arguments. + * + * Return Value: (transfer full): a #GOptionGroup for the commandline arguments + * recognized by LibPurple. + */ +GOptionGroup * +purple_get_option_group(void) { + GOptionGroup *group = NULL; + GOptionEntry entries[] = { + { + "debug", 'd', G_OPTION_FLAG_OPTIONAL_ARG, + G_OPTION_ARG_CALLBACK, &debug_cb, + _("print debugging messages to stdout"), + _("[colored]") + }, { + "force-online", 'f', 0, + G_OPTION_ARG_NONE, &force_online_cb, + _("force online, regardless of network status"), + NULL + }, + }; + + group = g_option_group_new( + "libpurple", + _("LibPurple options"), + _("Show LibPurple Options"), + NULL, + NULL + ); + + g_option_group_add_entries(group, entries); + + return group; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/options.h Fri Dec 15 03:52:01 2017 +0000 @@ -0,0 +1,42 @@ +/* purple + * + * 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 + */ + +#ifndef PURPLE_OPTIONS_H +#define PURPLE_OPTIONS_H + +/** + * SECTION:options + * @section_id: libpurple-options + * @short_description: <filename>options.h</filename> + * @title: Options API + * + * The functions defined here are to help in handling command line options. + */ + +#include <glib.h> + +G_BEGIN_DECLS + +GOptionGroup *purple_get_option_group(void); + +G_END_DECLS + +#endif /* PURPLE_OPTIONS_H */
--- a/pidgin/libpidgin.c Fri Dec 15 03:03:21 2017 +0000 +++ b/pidgin/libpidgin.c Fri Dec 15 03:52:01 2017 +0000 @@ -33,6 +33,7 @@ #include "log.h" #include "network.h" #include "notify.h" +#include "options.h" #include "prefs.h" #include "protocol.h" #include "pounce.h" @@ -375,25 +376,10 @@ purple_blist_set_visible(TRUE); } -static gboolean debug_colored = FALSE; -static gboolean debug_enabled = FALSE; static gboolean opt_login = FALSE; static gchar *opt_login_arg = NULL; static gboolean -debug_opt_arg_func(const gchar *option_name, const gchar *value, - gpointer data, GError **error) -{ - debug_enabled = TRUE; - - if (purple_strequal(value, "colored")) { - debug_colored = TRUE; - } - - return TRUE; -} - -static gboolean login_opt_arg_func(const gchar *option_name, const gchar *value, gpointer data, GError **error) { @@ -408,7 +394,6 @@ int pidgin_start(int argc, char *argv[]) { GApplication *app; - gboolean opt_force_online = FALSE; gboolean opt_nologin = FALSE; gboolean opt_version = FALSE; gboolean opt_si = TRUE; /* Check for single instance? */ @@ -441,13 +426,6 @@ {"config", 'c', 0, G_OPTION_ARG_FILENAME, &opt_config_dir_arg, _("use DIR for config files"), _("DIR")}, - {"debug", 'd', G_OPTION_FLAG_OPTIONAL_ARG, - G_OPTION_ARG_CALLBACK, &debug_opt_arg_func, - _("print debugging messages to stdout"), - _("[colored]")}, - {"force-online", 'f', 0, - G_OPTION_ARG_NONE, &opt_force_online, - _("force online, regardless of network status"), NULL}, {"login", 'l', G_OPTION_FLAG_OPTIONAL_ARG, G_OPTION_ARG_CALLBACK, &login_opt_arg_func, _("enable specified account(s) (optional argument NAME\n" @@ -468,11 +446,8 @@ {NULL} }; - debug_colored = FALSE; #ifdef DEBUG - debug_enabled = TRUE; -#else - debug_enabled = FALSE; + purple_debug_set_enabled(TRUE); #endif #ifdef ENABLE_NLS @@ -594,6 +569,8 @@ g_free(summary); g_option_context_add_main_entries(context, option_entries, PACKAGE); + g_option_context_add_group(context, purple_get_option_group()); + g_option_context_add_group(context, gplugin_get_option_group()); g_option_context_add_group(context, gtk_get_option_group(TRUE)); #ifdef G_OS_WIN32 @@ -646,11 +623,6 @@ * Fire up this baby. */ - if (g_getenv("PIDGIN_DEBUG_COLORED") != NULL) - debug_colored = TRUE; - purple_debug_set_enabled(debug_enabled); - purple_debug_set_colored(debug_colored); - app = G_APPLICATION(gtk_application_new("im.pidgin.Pidgin", G_APPLICATION_NON_UNIQUE)); @@ -741,11 +713,6 @@ g_free(opt_config_dir_arg); opt_config_dir_arg = NULL; - /* This needs to be before purple_blist_show() so the - * statusbox gets the forced online status. */ - if (opt_force_online) - purple_network_force_online(); - /* * We want to show the blist early in the init process so the * user feels warm and fuzzy (not cold and prickley).