From 95f723e1e043eaa948807c9e5572d9f948ad3585 Mon Sep 17 00:00:00 2001 From: Eric Merritt Date: Mon, 3 Dec 2012 11:15:52 -0500 Subject: [PATCH] make erlware_commons work on pre-R15 releases Signed-off-by: Jordan Wilberding --- .travis.yml | 6 ++++-- Makefile | 4 ++-- rebar.config.script | 15 +++++++++++++++ src/ec_dictionary.erl | 23 +++++++++++++++++++++++ 4 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 rebar.config.script diff --git a/.travis.yml b/.travis.yml index 35c5897..efd1082 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,11 @@ -language: erlang +=nlanguage: erlang otp_release: - R15B02 - R15B01 - R15B - + - R14B04 + - R14B03 + - R14B02 before_script: "make get-deps" script: "make" branches: diff --git a/Makefile b/Makefile index ab8b307..538bc3e 100644 --- a/Makefile +++ b/Makefile @@ -39,7 +39,7 @@ $(ERLWARE_COMMONS_PLT): --apps erts kernel stdlib eunit -r deps dialyzer: $(ERLWARE_COMMONS_PLT) - dialyzer --fullpath --plt $(ERLWARE_COMMONS_PLT) -Wrace_conditions --src src + dialyzer --fullpath --plt $(ERLWARE_COMMONS_PLT) -Wrace_conditions -r ./ebin typer: typer --plt $(ERLWARE_COMMONS_PLT) -r ./src @@ -64,4 +64,4 @@ distclean: clean rm -rf $(ERLWARE_COMMONS_PLT) rm -rvf $(CURDIR)/deps/* -rebuild: distclean all +rebuild: distclean get-deps all diff --git a/rebar.config.script b/rebar.config.script new file mode 100644 index 0000000..1d5996c --- /dev/null +++ b/rebar.config.script @@ -0,0 +1,15 @@ +{match, [ErtsNumber]} = re:run("R15B02", "R(\\d+).+", [{capture, [1], list}]), +ErtsVsn = erlang:list_to_integer(ErtsNumber), +Opts1 = case lists:keysearch(erl_opts, 1, CONFIG) of + {value, {erl_opts, Opts0}} -> + Opts0; + false -> + [] + end, +Opts2 = if + ErtsVsn >= 15 -> + [{d, have_callback_support} | Opts1]; + true -> + Opts1 + end, +lists:keystore(erl_opts, 1, CONFIG, {erl_opts, Opts2}). diff --git a/src/ec_dictionary.erl b/src/ec_dictionary.erl index 1061665..416df72 100644 --- a/src/ec_dictionary.erl +++ b/src/ec_dictionary.erl @@ -41,6 +41,8 @@ -type key(T) :: T. -type value(T) :: T. +-ifdef(have_callback_support). + -callback new() -> any(). -callback has_key(key(any()), any()) -> boolean(). -callback get(key(any()), any()) -> any(). @@ -52,6 +54,27 @@ -callback from_list([{key(any()), value(any())}]) -> any(). -callback keys(any()) -> [key(any())]. +-else. + +%% In the case where R14 or lower is being used to compile the system +%% we need to export a behaviour info +-export([behaviour_info/1]). +-spec behaviour_info(atom()) -> [{atom(), arity()}] | undefined. +behaviour_info(callbacks) -> + [{new, 0}, + {has_key, 2}, + {get, 2}, + {add, 3}, + {remove, 2}, + {has_value, 2}, + {size, 1}, + {to_list, 1}, + {from_list, 1}, + {keys, 1}]; +behaviour_info(_Other) -> + undefined. +-endif. + %%%=================================================================== %%% API %%%===================================================================