diff options
author | Eric B Merritt <[email protected]> | 2013-04-05 14:31:17 -0700 |
---|---|---|
committer | Eric B Merritt <[email protected]> | 2013-04-05 14:31:29 -0700 |
commit | a96ae5dc597cbc01515c75fea9f41a6d79be91b3 (patch) | |
tree | baeea4d5ff0d4ed6492d825e36a40c78aca83c4a | |
parent | a55808420959bae0d9097ab97bc96e1fc4b4d19b (diff) | |
download | relx-a96ae5dc597cbc01515c75fea9f41a6d79be91b3.tar.gz relx-a96ae5dc597cbc01515c75fea9f41a6d79be91b3.tar.bz2 relx-a96ae5dc597cbc01515c75fea9f41a6d79be91b3.zip |
support both R14 'behaviours' and R15+ 'callback info'
-rw-r--r-- | Makefile | 3 | ||||
-rw-r--r-- | rebar.config.script | 15 | ||||
-rw-r--r-- | src/rcl_provider.erl | 18 |
3 files changed, 34 insertions, 2 deletions
@@ -81,8 +81,7 @@ $(DEPS_PLT): --apps erts kernel stdlib -r deps dialyzer: $(DEPS_PLT) - dialyzer --plt $(DEPS_PLT) --fullpath -Wrace_conditions \ - -I include -pa $(CURDIR)/ebin --src src + dialyzer --fullpath --plt $(DEPS_PLT) -I include -Wrace_conditions -r ./ebin typer: typer --plt $(DEPS_PLT) -r ./src diff --git a/rebar.config.script b/rebar.config.script new file mode 100644 index 0000000..c19a751 --- /dev/null +++ b/rebar.config.script @@ -0,0 +1,15 @@ +{match, [ErtsNumber]} = re:run(erlang:system_info(otp_release), "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/rcl_provider.erl b/src/rcl_provider.erl index 750b96e..4d8f044 100644 --- a/src/rcl_provider.erl +++ b/src/rcl_provider.erl @@ -41,10 +41,28 @@ -opaque t() :: {?MODULE, module()}. + +-ifdef(have_callback_support). + -callback init(rcl_state:t()) -> {ok, rcl_state:t()} | relcool:error(). -callback do(rcl_state:t()) -> {ok, rcl_state:t()} | relcool:error(). -callback format_error(Reason::term()) -> iolist(). +-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) -> + [{init, 1}, + {do, 1}, + {format_error, 1}]; +behaviour_info(_) -> + undefined. + +-endif. + %%%=================================================================== %%% API %%%=================================================================== |