From 0c0947a24166bc2660fcc6dbc8d5a49d9a3a99a5 Mon Sep 17 00:00:00 2001 From: Christophe Romain Date: Wed, 11 Feb 2015 12:08:16 +0100 Subject: [PATCH] Add compatibility macros for deprecated types (thanks to Alexey) --- configure.ac | 2 ++ include/ejabberd.hrl | 23 +++++++++++++++++++++-- include/mod_muc_room.hrl | 18 ++++++++++-------- include/pubsub.hrl | 2 ++ m4/erlang-extra.m4 | 17 +++++++++++++++++ rebar.config.script | 2 ++ src/ejabberd_odbc.erl | 2 +- src/ejabberd_s2s_in.erl | 2 +- src/ejabberd_s2s_out.erl | 2 +- src/eldap.erl | 4 ++-- src/jlib.erl | 3 ++- src/mod_irc_connection.erl | 4 ++-- src/mod_ping.erl | 2 +- vars.config.in | 1 + 14 files changed, 65 insertions(+), 19 deletions(-) diff --git a/configure.ac b/configure.ac index 8715c86ba..edd65747a 100644 --- a/configure.ac +++ b/configure.ac @@ -235,6 +235,8 @@ if test "$ENABLEUSER" != ""; then AC_SUBST([INSTALLUSER], [$ENABLEUSER]) fi +ERLANG_DEPRECATED_TYPES_CHECK + AC_SUBST(hipe) AC_SUBST(roster_gateway_workaround) AC_SUBST(transient_supervisors) diff --git a/include/ejabberd.hrl b/include/ejabberd.hrl index 6e21836ae..0e5ba1b20 100644 --- a/include/ejabberd.hrl +++ b/include/ejabberd.hrl @@ -18,8 +18,9 @@ %%% %%%---------------------------------------------------------------------- -%% This macro returns a string of the ejabberd version running, e.g. "2.3.4" -%% If the ejabberd application description isn't loaded, returns atom: undefined +-ifndef(EJABBERD_HRL). +-define(EJABBERD_HRL, true). + -define(VERSION, ejabberd_config:get_version()). -define(MYHOSTS, ejabberd_config:get_myhosts()). @@ -49,3 +50,21 @@ -type scram() :: #scram{}. -define(SCRAM_DEFAULT_ITERATION_COUNT, 4096). + +-ifdef(ERL_DEPRECATED_TYPES). + +-define(TDICT, dict()). +-define(TGB_TREE, gb_tree()). +-define(TGB_SET, gb_set()). +-define(TQUEUE, queue()). + +-else. + +-define(TDICT, dict:dict()). +-define(TGB_TREE, gb_trees:tree()). +-define(TGB_SET, gb_set:set()). +-define(TQUEUE, queue:queue()). + +-endif. + +-endif. diff --git a/include/mod_muc_room.hrl b/include/mod_muc_room.hrl index 9220da41a..6f170269d 100644 --- a/include/mod_muc_room.hrl +++ b/include/mod_muc_room.hrl @@ -18,6 +18,8 @@ %%% %%%---------------------------------------------------------------------- +-include("ejabberd.hrl"). + -define(MAX_USERS_DEFAULT, 200). -define(SETS, gb_sets). @@ -26,7 +28,7 @@ -record(lqueue, { - queue :: queue(), + queue :: ?TQUEUE, len :: integer(), max :: integer() }). @@ -58,8 +60,8 @@ voice_request_min_interval = 1800 :: non_neg_integer(), max_users = ?MAX_USERS_DEFAULT :: non_neg_integer() | none, logging = false :: boolean(), - vcard = <<"">> :: boolean(), - captcha_whitelist = (?SETS):empty() :: gb_set() + vcard = <<"">> :: binary(), + captcha_whitelist = (?SETS):empty() :: ?TGB_SET }). -type config() :: #config{}. @@ -92,18 +94,18 @@ access = {none,none,none,none} :: {atom(), atom(), atom(), atom()}, jid = #jid{} :: jid(), config = #config{} :: config(), - users = (?DICT):new() :: dict(), + users = (?DICT):new() :: ?TDICT, last_voice_request_time = treap:empty() :: treap:treap(), - robots = (?DICT):new() :: dict(), - nicks = (?DICT):new() :: dict(), - affiliations = (?DICT):new() :: dict(), + robots = (?DICT):new() :: ?TDICT, + nicks = (?DICT):new() :: ?TDICT, + affiliations = (?DICT):new() :: ?TDICT, history :: lqueue(), subject = <<"">> :: binary(), subject_author = <<"">> :: binary(), just_created = false :: boolean(), activity = treap:empty() :: treap:treap(), room_shaper = none :: shaper:shaper(), - room_queue = queue:new() :: queue() + room_queue = queue:new() :: ?TQUEUE }). -record(muc_online_users, {us = {<<>>, <<>>} :: {binary(), binary()}, diff --git a/include/pubsub.hrl b/include/pubsub.hrl index bfbba7c55..3be41e3fd 100644 --- a/include/pubsub.hrl +++ b/include/pubsub.hrl @@ -23,6 +23,8 @@ %%% This file contains pubsub types definition. %%% ==================================================================== +-include("ejabberd.hrl"). + %% ------------------------------- %% Pubsub constants -define(ERR_EXTENDED(E, C), diff --git a/m4/erlang-extra.m4 b/m4/erlang-extra.m4 index 4a7311bad..f658057b5 100644 --- a/m4/erlang-extra.m4 +++ b/m4/erlang-extra.m4 @@ -84,3 +84,20 @@ EOF AC_MSG_RESULT([ok]) fi ]) dnl ERLANG_VERSION_CHECK + +AC_DEFUN([ERLANG_DEPRECATED_TYPES_CHECK], +[ AC_MSG_CHECKING([whether Erlang is using deprecated types]) + cat > conftest.erl < /dev/null 2>&1; then + AC_MSG_RESULT([no]) + AC_SUBST(erlang_deprecated_types, false) + else + AC_MSG_RESULT([yes]) + AC_SUBST(erlang_deprecated_types, true) + fi +]) diff --git a/rebar.config.script b/rebar.config.script index 64398f33e..606fd4bb8 100644 --- a/rebar.config.script +++ b/rebar.config.script @@ -24,6 +24,8 @@ Macros = lists:flatmap( [{d, 'mssql'}]; ({lager, true}) -> [{d, 'LAGER'}]; + ({erlang_deprecated_types, true}) -> + [{d, 'ERL_DEPRECATED_TYPES'}]; (_) -> [] end, Cfg), diff --git a/src/ejabberd_odbc.erl b/src/ejabberd_odbc.erl index 9cf30f53e..5828912d5 100644 --- a/src/ejabberd_odbc.erl +++ b/src/ejabberd_odbc.erl @@ -62,7 +62,7 @@ start_interval = 0 :: non_neg_integer(), host = <<"">> :: binary(), max_pending_requests_len :: non_neg_integer(), - pending_requests = {0, queue:new()} :: {non_neg_integer(), queue()}}). + pending_requests = {0, queue:new()} :: {non_neg_integer(), ?TQUEUE}}). -define(STATE_KEY, ejabberd_odbc_state). diff --git a/src/ejabberd_s2s_in.erl b/src/ejabberd_s2s_in.erl index 7afac4715..1b40f03c2 100644 --- a/src/ejabberd_s2s_in.erl +++ b/src/ejabberd_s2s_in.erl @@ -58,7 +58,7 @@ server = <<"">> :: binary(), authenticated = false :: boolean(), auth_domain = <<"">> :: binary(), - connections = (?DICT):new() :: dict(), + connections = (?DICT):new() :: ?TDICT, timer = make_ref() :: reference()}). %-define(DBGFSM, true). diff --git a/src/ejabberd_s2s_out.erl b/src/ejabberd_s2s_out.erl index 3445023ed..97164326d 100644 --- a/src/ejabberd_s2s_out.erl +++ b/src/ejabberd_s2s_out.erl @@ -77,7 +77,7 @@ try_auth = true :: boolean(), myname = <<"">> :: binary(), server = <<"">> :: binary(), - queue = queue:new() :: queue(), + queue = queue:new() :: ?TQUEUE, delay_to_retry = undefined_delay :: undefined_delay | non_neg_integer(), new = false :: false | binary(), verify = false :: false | {pid(), binary(), binary()}, diff --git a/src/eldap.erl b/src/eldap.erl index c07ddc07b..5e084b01b 100644 --- a/src/eldap.erl +++ b/src/eldap.erl @@ -139,8 +139,8 @@ passwd = <<"">> :: binary(), id = 0 :: non_neg_integer(), bind_timer = make_ref() :: reference(), - dict = dict:new() :: dict(), - req_q = queue:new() :: queue()}). + dict = dict:new() :: ?TDICT, + req_q = queue:new() :: ?TQUEUE}). %%%---------------------------------------------------------------------- %%% API diff --git a/src/jlib.erl b/src/jlib.erl index 2c0f30b3f..76886a7dc 100644 --- a/src/jlib.erl +++ b/src/jlib.erl @@ -57,6 +57,7 @@ %% TODO: Remove once XEP-0091 is Obsolete %% TODO: Remove once XEP-0091 is Obsolete +-include("ejabberd.hrl"). -include("jlib.hrl"). -export_type([jid/0]). @@ -972,7 +973,7 @@ i2l(L, N) when is_binary(L) -> _ -> i2l(<<$0, L/binary>>, N) end. --spec queue_drop_while(fun((term()) -> boolean()), queue()) -> queue(). +-spec queue_drop_while(fun((term()) -> boolean()), ?TQUEUE) -> ?TQUEUE. queue_drop_while(F, Q) -> case queue:peek(Q) of diff --git a/src/mod_irc_connection.erl b/src/mod_irc_connection.erl index c31adf754..2180ebd2b 100644 --- a/src/mod_irc_connection.erl +++ b/src/mod_irc_connection.erl @@ -51,12 +51,12 @@ encoding = <<"">> :: binary(), port = 0 :: inet:port_number(), password = <<"">> :: binary(), - queue = queue:new() :: queue(), + queue = queue:new() :: ?TQUEUE, user = #jid{} :: jid(), host = <<"">> :: binary(), server = <<"">> :: binary(), nick = <<"">> :: binary(), - channels = dict:new() :: dict(), + channels = dict:new() :: ?TDICT, nickchannel :: binary(), mod = mod_irc :: atom(), inbuf = <<"">> :: binary(), diff --git a/src/mod_ping.erl b/src/mod_ping.erl index 87cf6e015..f493dccb8 100644 --- a/src/mod_ping.erl +++ b/src/mod_ping.erl @@ -63,7 +63,7 @@ send_pings = ?DEFAULT_SEND_PINGS :: boolean(), ping_interval = ?DEFAULT_PING_INTERVAL :: non_neg_integer(), timeout_action = none :: none | kill, - timers = (?DICT):new() :: dict()}). + timers = (?DICT):new() :: ?TDICT}). %%==================================================================== %% API diff --git a/vars.config.in b/vars.config.in index 7621d1390..2efa449ae 100644 --- a/vars.config.in +++ b/vars.config.in @@ -14,6 +14,7 @@ {db_type, @db_type@}. {debug, @debug@}. {hipe, @hipe@}. +{erlang_deprecated_types, @erlang_deprecated_types@}. %% Ad-hoc directories with source files {tools, @tools@}.