diff options
author | Dave Smith <dizzyd@dizzyd.com> | 2012-10-30 19:23:08 -0700 |
---|---|---|
committer | Dave Smith <dizzyd@dizzyd.com> | 2012-10-30 19:23:08 -0700 |
commit | 08c510130e18faaa1b0e0cf5a9222cc24ee4908a (patch) | |
tree | 7ea71e717e801149c037157e1cc3d3f2d122e512 /src/rebar_require_vsn.erl | |
parent | 27a1bbb9dae7aad81e0ccf2912530dd98156b024 (diff) | |
parent | a78e6cd740d996c8397d6f1cedd9e595dd3e4b6e (diff) |
Merge pull request #243 from evanmcc/pevm_min_otp_version
Add support for minimum OTP versions
Diffstat (limited to 'src/rebar_require_vsn.erl')
-rw-r--r-- | src/rebar_require_vsn.erl | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/rebar_require_vsn.erl b/src/rebar_require_vsn.erl index 327f75c..83cb79d 100644 --- a/src/rebar_require_vsn.erl +++ b/src/rebar_require_vsn.erl @@ -67,4 +67,33 @@ check_versions(Config) -> nomatch -> ?ABORT("OTP release ~s does not match required regex ~s\n", [erlang:system_info(otp_release), OtpRegex]) + end, + + case rebar_config:get(Config, require_min_otp_vsn, undefined) of + undefined -> ?DEBUG("Min OTP version unconfigured~n", []); + MinOtpVsn -> + {MinMaj, MinMin} = version_tuple(MinOtpVsn, "configured"), + {OtpMaj, OtpMin} = version_tuple(erlang:system_info(otp_release), + "OTP Release"), + case {OtpMaj, OtpMin} >= {MinMaj, MinMin} of + true -> + ?DEBUG("~s satisfies the requirement for vsn ~s~n", + [erlang:system_info(otp_release), + MinOtpVsn]); + false -> + ?ABORT("OTP release ~s or later is required, you have: ~s~n", + [MinOtpVsn, + erlang:system_info(otp_release)]) + end + end. + +version_tuple(OtpRelease, Type) -> + case re:run(OtpRelease, "R(\\d+)B?-?(\\d+)?", [{capture, all, list}]) of + {match, [_Full, Maj, Min]} -> + {list_to_integer(Maj), list_to_integer(Min)}; + {match, [_Full, Maj]} -> + {list_to_integer(Maj), 0}; + nomatch -> + ?ABORT("Cannot parse ~s version string: ~s~n", + [Type, OtpRelease]) end. |