Skip to content

Commit

Permalink
Merge pull request #2937 from ferd/otp-28-readiness
Browse files Browse the repository at this point in the history
OTP-28 readiness (part 1)
  • Loading branch information
ferd authored Feb 19, 2025
2 parents 5495da1 + 36ce564 commit 9311637
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 30 deletions.
2 changes: 1 addition & 1 deletion apps/rebar/rebar.config
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@

{edoc_opts, [preprocess]}.

%% Use OTP 23+ when dialyzing rebar3
%% Use the newest OTP when dialyzing rebar3
{dialyzer, [
{warnings, [unknown]},
{plt_extra_apps, [parsetools, public_key]}
Expand Down
1 change: 1 addition & 0 deletions apps/rebar/src/rebar.app.src.script
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
compiler,
crypto,
syntax_tools,
parsetools,
tools,
eunit,
common_test,
Expand Down
34 changes: 17 additions & 17 deletions apps/rebar/src/rebar_prv_common_test.erl
Original file line number Diff line number Diff line change
Expand Up @@ -430,20 +430,20 @@ inject_ct_state(State, {ok, Tests}) ->
inject_ct_state(State, Tests, [App|Rest], Acc) ->
case inject(rebar_app_info:opts(App), State, Tests) of
{error, _} = Error -> Error;
NewOpts ->
{ok, NewOpts} ->
NewApp = rebar_app_info:opts(App, NewOpts),
inject_ct_state(State, Tests, Rest, [NewApp|Acc])
end;
inject_ct_state(State, Tests, [], Acc) ->
case inject(rebar_state:opts(State), State, Tests) of
{error, _} = Error -> Error;
NewOpts ->
{ok, NewOpts} ->
{ok, {rebar_state:opts(State, NewOpts), lists:reverse(Acc)}}
end.

opts(Opts, Key, Default) ->
case rebar_opts:get(Opts, Key, Default) of
Vs when is_list(Vs) -> Vs;
Vs when is_list(Vs) -> {ok, Vs};
Wrong ->
?PRV_ERROR({badconfig, {"Value `~p' of option `~p' must be a list", {Wrong, Key}}})
end.
Expand All @@ -454,18 +454,18 @@ erl_opts(Opts, State, Tests) ->
%% append `ct_compile_opts` to app defined `erl_opts`
ErlOpts = opts(Opts, erl_opts, []),
CTOpts = opts(Opts, ct_compile_opts, []),
case add_transforms(append(CTOpts, ErlOpts), State) of
case add_transforms(maybe_append(CTOpts, ErlOpts), State) of
{error, _} = Error -> Error;
NewErlOpts -> first_files(rebar_opts:set(Opts, erl_opts, NewErlOpts), Tests)
{ok, NewErlOpts} -> first_files(rebar_opts:set(Opts, erl_opts, NewErlOpts), Tests)
end.

first_files(Opts, Tests) ->
%% append `ct_first_files` to app defined `erl_first_files`
FirstFiles = opts(Opts, erl_first_files, []),
CTFirstFiles = opts(Opts, ct_first_files, []),
case append(CTFirstFiles, FirstFiles) of
{error, _} = Error -> Error;
NewFirstFiles -> include_files(rebar_opts:set(Opts, erl_first_files, NewFirstFiles), Tests)
case maybe_append(CTFirstFiles, FirstFiles) of
{error, _} = Error -> Error;
{ok, NewFirstFiles} -> include_files(rebar_opts:set(Opts, erl_first_files, NewFirstFiles), Tests)
end.

include_files(Opts, Tests) ->
Expand All @@ -474,13 +474,13 @@ include_files(Opts, Tests) ->
ErlOpts = opts(Opts, erl_opts, []),
Includes = proplists:get_value(include, Tests, []),
Is = lists:map(fun(I) -> {i, I} end, Includes),
case append(Is, ErlOpts) of
case maybe_append({ok, Is}, ErlOpts) of
{error, _} = Error -> Error;
NewIncludes -> ct_macro(rebar_opts:set(Opts, erl_opts, NewIncludes))
{ok, NewIncludes} -> {ok, ct_macro(rebar_opts:set(Opts, erl_opts, NewIncludes))}
end.

ct_macro(Opts) ->
ErlOpts = opts(Opts, erl_opts, []),
{ok, ErlOpts} = opts(Opts, erl_opts, []),
NewOpts = safe_define_ct_macro(ErlOpts),
rebar_opts:set(Opts, erl_opts, NewOpts).

Expand All @@ -497,17 +497,17 @@ test_defined([{d, 'COMMON_TEST', true}|_]) -> true;
test_defined([_|Rest]) -> test_defined(Rest);
test_defined([]) -> false.

append({error, _} = Error, _) -> Error;
append(_, {error, _} = Error) -> Error;
append(A, B) -> A ++ B.
maybe_append({error, _} = Error, _) -> Error;
maybe_append(_, {error, _} = Error) -> Error;
maybe_append({ok, A}, {ok, B}) -> {ok, A ++ B}.

add_transforms(CTOpts, State) when is_list(CTOpts) ->
add_transforms({ok, CTOpts}, State) when is_list(CTOpts) ->
case readable(State) of
false ->
CTOpts;
{ok, CTOpts};
Other when Other == true; Other == compact ->
ReadableTransform = [{parse_transform, cth_readable_transform}],
(CTOpts -- ReadableTransform) ++ ReadableTransform
{ok, (CTOpts -- ReadableTransform) ++ ReadableTransform}
end;
add_transforms({error, _} = Error, _State) -> Error.

Expand Down
24 changes: 12 additions & 12 deletions apps/rebar/src/rebar_prv_eunit.erl
Original file line number Diff line number Diff line change
Expand Up @@ -259,19 +259,19 @@ inject_eunit_state(_State, Error) -> Error.
inject_eunit_state(State, [App|Rest], Acc) ->
case inject(rebar_app_info:opts(App)) of
{error, _} = Error -> Error;
NewOpts ->
{ok, NewOpts} ->
NewApp = rebar_app_info:opts(App, NewOpts),
inject_eunit_state(State, Rest, [NewApp|Acc])
end;
inject_eunit_state(State, [], Acc) ->
case inject(rebar_state:opts(State)) of
{error, _} = Error -> Error;
NewOpts -> {ok, {rebar_state:opts(State, NewOpts), lists:reverse(Acc)}}
{ok, NewOpts} -> {ok, {rebar_state:opts(State, NewOpts), lists:reverse(Acc)}}
end.

opts(Opts, Key, Default) ->
case rebar_opts:get(Opts, Key, Default) of
Vs when is_list(Vs) -> Vs;
Vs when is_list(Vs) -> {ok, Vs};
Wrong ->
?PRV_ERROR({badconfig, {"Value `~p' of option `~p' must be a list", {Wrong, Key}}})
end.
Expand All @@ -282,22 +282,22 @@ erl_opts(Opts) ->
%% append `eunit_compile_opts` to app defined `erl_opts`
ErlOpts = opts(Opts, erl_opts, []),
EUnitOpts = opts(Opts, eunit_compile_opts, []),
case append(EUnitOpts, ErlOpts) of
case maybe_append(EUnitOpts, ErlOpts) of
{error, _} = Error -> Error;
NewErlOpts -> first_files(rebar_opts:set(Opts, erl_opts, NewErlOpts))
{ok, NewErlOpts} -> first_files(rebar_opts:set(Opts, erl_opts, NewErlOpts))
end.

first_files(Opts) ->
%% append `eunit_first_files` to app defined `erl_first_files`
FirstFiles = opts(Opts, erl_first_files, []),
EUnitFirstFiles = opts(Opts, eunit_first_files, []),
case append(EUnitFirstFiles, FirstFiles) of
{error, _} = Error -> Error;
NewFirstFiles -> eunit_macro(rebar_opts:set(Opts, erl_first_files, NewFirstFiles))
case maybe_append(EUnitFirstFiles, FirstFiles) of
{error, _} = Error -> Error;
{ok, NewFirstFiles} -> {ok, eunit_macro(rebar_opts:set(Opts, erl_first_files, NewFirstFiles))}
end.

eunit_macro(Opts) ->
ErlOpts = opts(Opts, erl_opts, []),
{ok, ErlOpts} = opts(Opts, erl_opts, []),
NewOpts = safe_define_eunit_macro(ErlOpts),
rebar_opts:set(Opts, erl_opts, NewOpts).

Expand All @@ -314,9 +314,9 @@ test_defined([{d, 'EUNIT', true}|_]) -> true;
test_defined([_|Rest]) -> test_defined(Rest);
test_defined([]) -> false.

append({error, _} = Error, _) -> Error;
append(_, {error, _} = Error) -> Error;
append(A, B) -> A ++ B.
maybe_append({error, _} = Error, _) -> Error;
maybe_append(_, {error, _} = Error) -> Error;
maybe_append({ok, A}, {ok, B}) -> {ok, A ++ B}.

test_dirs(State, Apps, []) -> rebar_state:project_apps(State, Apps);
test_dirs(State, Apps, [{dir, Dir}|Rest]) ->
Expand Down
1 change: 1 addition & 0 deletions rebar.config
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
{erl_opts, [debug_info, nowarn_export_all]},
%% Ignore deps known to generate warnings
{dialyzer, [{warnings, [no_unknown]},
{plt_extra_apps, [parsetools, public_key]},
{exclude_apps, [cth_readable, erlware_commons, relx]}]}
]},
%% Duplicated from apps/rebar3:
Expand Down

0 comments on commit 9311637

Please sign in to comment.