Thu, 30 Oct 2008 22:40:49 +0000
Build everything with the *_DISABLE_DEPRECATED flags set. This allows us
to detect when we're still using deprecated functions internally (and by
extension, when we've deprecated something we shouldn't have). In the
course of developing this changeset, I fixed a few such cases.
Given that the plan is to switch from PURPLE_HIDE_STRUCTS to
PURPLE_DISABLE_DEPRECATED as each struct is fully dealt with, this will
also ensure we have no regressions on the struct hiding work.
Deprecated functions are still available to the respective .c file, to
avoid missing prototype errors. Also, Perl and DBus undef the
*_DISABLE_DEPRECATED defines as appropriate so that deprecated functions
will still be exported to Perl plugins and via DBus. (Otherwise, we'd
be breaking backwards compatibility.)
#include "module.h" #include "../perl-handlers.h" MODULE = Purple::Cmd PACKAGE = Purple::Cmd PREFIX = purple_cmd_ PROTOTYPES: ENABLE BOOT: { HV *status_stash = gv_stashpv("Purple::Cmd::Status", 1); HV *ret_stash = gv_stashpv("Purple::Cmd::Return", 1); HV *p_stash = gv_stashpv("Purple::Cmd::Priority", 1); HV *flag_stash = gv_stashpv("Purple::Cmd::Flag", 1); static const constiv *civ, status_const_iv[] = { #define const_iv(name) {#name, (IV)PURPLE_CMD_STATUS_##name} const_iv(OK), const_iv(FAILED), const_iv(NOT_FOUND), const_iv(WRONG_ARGS), const_iv(WRONG_PRPL), const_iv(WRONG_TYPE), }; static const constiv ret_const_iv[] = { #undef const_iv #define const_iv(name) {#name, (IV)PURPLE_CMD_RET_##name} const_iv(OK), const_iv(FAILED), const_iv(CONTINUE), }; static const constiv p_const_iv[] = { #undef const_iv #define const_iv(name) {#name, (IV)PURPLE_CMD_P_##name} const_iv(VERY_LOW), const_iv(LOW), const_iv(DEFAULT), const_iv(PRPL), const_iv(PLUGIN), const_iv(ALIAS), const_iv(HIGH), const_iv(VERY_HIGH), }; static const constiv flag_const_iv[] = { #undef const_iv #define const_iv(name) {#name, (IV)PURPLE_CMD_FLAG_##name} const_iv(IM), const_iv(CHAT), const_iv(PRPL_ONLY), const_iv(ALLOW_WRONG_ARGS), }; for (civ = status_const_iv + sizeof(status_const_iv) / sizeof(status_const_iv[0]); civ-- > status_const_iv;) newCONSTSUB(status_stash, (char *)civ->name, newSViv(civ->iv)); for (civ = ret_const_iv + sizeof(ret_const_iv) / sizeof(ret_const_iv[0]); civ-- > ret_const_iv;) newCONSTSUB(ret_stash, (char *)civ->name, newSViv(civ->iv)); for (civ = p_const_iv + sizeof(p_const_iv) / sizeof(p_const_iv[0]); civ-- > p_const_iv;) newCONSTSUB(p_stash, (char *)civ->name, newSViv(civ->iv)); for (civ = flag_const_iv + sizeof(flag_const_iv) / sizeof(flag_const_iv[0]); civ-- > flag_const_iv;) newCONSTSUB(flag_stash, (char *)civ->name, newSViv(civ->iv)); } void purple_cmd_help(conv, command) Purple::Conversation conv const gchar *command PREINIT: GList *l, *ll; PPCODE: for (l = ll = purple_cmd_help(conv, command); l != NULL; l = l->next) { XPUSHs(sv_2mortal(newSVpv(l->data, 0))); } g_list_free(ll); void purple_cmd_list(conv) Purple::Conversation conv PREINIT: GList *l, *ll; PPCODE: for (l = ll = purple_cmd_list(conv); l != NULL; l = l->next) { XPUSHs(sv_2mortal(newSVpv(l->data, 0))); } g_list_free(ll); Purple::Cmd::Id purple_cmd_register(plugin, command, args, priority, flag, prpl_id, func, helpstr, data = 0) Purple::Plugin plugin const gchar *command const gchar *args Purple::Cmd::Priority priority Purple::Cmd::Flag flag const gchar *prpl_id SV *func const gchar *helpstr SV *data CODE: RETVAL = purple_perl_cmd_register(plugin, command, args, priority, flag, prpl_id, func, helpstr, data); OUTPUT: RETVAL void purple_cmd_unregister(id) Purple::Cmd::Id id CODE: purple_perl_cmd_unregister(id);