Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:24
erlang
0219-Add-app-file-runtime_dependencies-test-and...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0219-Add-app-file-runtime_dependencies-test-and-incorrect.patch of Package erlang
From fc2c4fc4739ad07e03df2c9ef6d558161ce100d1 Mon Sep 17 00:00:00 2001 From: Kjell Winblad <kjellwinblad@gmail.com> Date: Fri, 7 May 2021 16:03:01 +0200 Subject: [PATCH] Add app-file runtime_dependencies test and incorrect dependencies fixes This commit adds a test case to check that app files for the Erlang/OTP applications specifies correct versions for the dependencies in the runtime_dependencies field. The test is designed to work on the Erlang/OTP team's test servers as it assumes that all released applications are installed in particular places and that all app versions have been increased in the correct way (which is done by scripts in the Erlang/OTP team's test infrastructure). The test uses xref to try to find undefined function calls in all Erlang/OTP applications. When running xref to test an application, `xref`'s library path is set to point to folders containing beam-files for the applications that are specified as the minimum correct versions by the `runtime_dependencies` field in the application's app file. This commit also bumps the versions of several dependencies that the test found to have incorrect versiosn so they instead get the first version of the dependencies that makes the test pass. --- erts/test/Makefile | 2 + erts/test/otp_SUITE.erl | 327 ++++++++++++++++++++++- erts/test/otp_SUITE_data/.keep | 0 lib/asn1/src/asn1.app.src | 2 +- lib/common_test/src/common_test.app.src | 10 +- lib/common_test/src/test_server.erl | 15 +- lib/common_test/src/test_server_ctrl.erl | 23 +- lib/common_test/src/test_server_node.erl | 2 +- lib/compiler/src/compiler.app.src | 4 +- lib/crypto/src/crypto.app.src | 2 +- lib/debugger/src/debugger.app.src | 2 +- lib/diameter/src/diameter.app.src | 2 +- lib/edoc/src/edoc.app.src | 2 +- lib/eldap/src/eldap.app.src | 2 +- lib/erl_docgen/src/erl_docgen.app.src | 2 +- lib/inets/src/inets_app/inets.app.src | 4 +- lib/kernel/src/kernel.app.src | 2 +- lib/observer/src/observer.app.src | 2 +- lib/os_mon/src/os_mon.app.src | 2 +- lib/parsetools/src/parsetools.app.src | 2 +- lib/public_key/src/public_key.app.src | 2 +- lib/sasl/src/sasl.app.src | 2 +- lib/snmp/src/app/snmp.app.src | 2 +- lib/ssh/src/ssh.app.src | 2 +- lib/ssl/src/ssl.app.src | 4 +- lib/stdlib/src/stdlib.app.src | 2 +- lib/wx/src/wx.app.src | 2 +- 27 files changed, 390 insertions(+), 35 deletions(-) create mode 100644 erts/test/otp_SUITE_data/.keep diff --git a/erts/test/Makefile b/erts/test/Makefile index 1fe230adaf..f3831d2bbb 100644 --- a/erts/test/Makefile +++ b/erts/test/Makefile @@ -84,6 +84,8 @@ release_tests_spec: opt $(INSTALL_DATA) system.spec system.dynspec system_smoke.spec \ $(ERL_FILES) $(TARGET_FILES) "$(RELSYSDIR)" chmod -R u+w "$(RELSYSDIR)" + cp "$(ERL_TOP)/otp_versions.table" "$(ERL_TOP)/erts/test/otp_SUITE_data" + cp "$(ERL_TOP)/make/otp_version_tickets" "$(ERL_TOP)/erts/test/otp_SUITE_data" tar cf - *_SUITE_data utils | (cd "$(RELSYSDIR)"; tar xf -) release_docs_spec: diff --git a/erts/test/otp_SUITE.erl b/erts/test/otp_SUITE.erl index c222d708ce..54decdb57c 100644 --- a/erts/test/otp_SUITE.erl +++ b/erts/test/otp_SUITE.erl @@ -27,7 +27,8 @@ call_to_size_1/1,call_to_now_0/1,strong_components/1, erl_file_encoding/1,xml_file_encoding/1, runtime_dependencies_functions/1, - runtime_dependencies_modules/1]). + runtime_dependencies_modules/1, + test_runtime_dependencies_versions/1]). -include_lib("common_test/include/ct.hrl"). @@ -35,15 +36,17 @@ suite() -> [{ct_hooks,[ts_install_cth]}, - {timetrap, {minutes, 10}}]. + {timetrap, {minutes, 30}}]. -all() -> +all() -> [undefined_functions, deprecated_not_in_obsolete, obsolete_but_not_deprecated, call_to_deprecated, call_to_size_1, call_to_now_0, strong_components, erl_file_encoding, xml_file_encoding, runtime_dependencies_functions, - runtime_dependencies_modules]. + runtime_dependencies_modules, + test_runtime_dependencies_versions +]. init_per_suite(Config) -> Server = start_xref_server(daily_xref, functions), @@ -533,3 +536,319 @@ start_xref_server(Server, Mode) -> end end, Server. + +get_suite_data_dir_path() -> + filename:join(filename:dirname(code:which(?MODULE)), "otp_SUITE_data"). + +get_otp_versions_table_path() -> + filename:join(get_suite_data_dir_path(), "otp_versions.table"). + +get_otp_version_tickets_path() -> + filename:join(get_suite_data_dir_path(), "otp_version_tickets"). + +%% Return a map that maps from app versions to the OTP versions they +%% were last released in. The function makes use of the file +%% "otp_versions.table" and the current code:get_path() to +%% find apps. +get_runtime_dep_to_otp_version_map() -> + %% Find apps in "otp_versions.table" + VersionsTableFile = get_otp_versions_table_path(), + VersionsTableBin = + case file:read_file(VersionsTableFile) of + {ok, Bin} -> Bin; + Error -> ct:fail("Could not read the file ~s which is needed to perform the test. " + "Error: ~p~n", + [VersionsTableFile, Error]) + end, + VersionsTableStr = erlang:binary_to_list(VersionsTableBin), + Lines = lists:reverse(string:tokens(VersionsTableStr, "\n")), + AddVersionsInString = + fun(Map, OTPVersion, AppVersionsString0) -> + AppVersionsString = + lists:flatten(string:replace(AppVersionsString0, "#", "", all)), + AppVersions = string:tokens(AppVersionsString, " "), + lists:foldl( + fun(AppVersion0, MapSoFar) -> + case string:trim(AppVersion0) of + "" -> + MapSoFar; + AppVersion1 -> + maps:put(AppVersion1, OTPVersion, MapSoFar) + end + end, + Map, + AppVersions) + end, + VersionMap0 = + lists:foldl( + fun(Line, MapSoFar) -> + [OTPVersion, AppVersionsString| _] = + string:tokens(Line, ":"), + AddVersionsInString(MapSoFar, + string:trim(OTPVersion), + string:trim(AppVersionsString)) + end, + #{}, + Lines), + %% Find apps in code:get_path() + lists:foldl( + fun(Path, MapSoFar) -> + case filelib:wildcard(filename:join(Path, "*.app")) of + [AppFile] -> + {ok,[{application, App, Info}]} = file:consult(AppFile), + case lists:keyfind(vsn, 1, Info) of + false -> + MapSoFar; + {vsn, VsnStr} -> + AppVsnStr = + erlang:atom_to_list(App) ++ "-" ++ VsnStr, + maps:put(AppVsnStr, {latest, Path}, MapSoFar) + end; + _ -> + MapSoFar + end + end, + VersionMap0, + code:get_path()). + +%% Find runtime dependencies for an app +get_runtime_deps(App) -> + AppFile = code:where_is_file(atom_to_list(App) ++ ".app"), + {ok,[{application, App, Info}]} = file:consult(AppFile), + case lists:keyfind(runtime_dependencies, 1, Info) of + {runtime_dependencies, RDeps} -> + RDeps; + false -> + [] + end. + +%% Given a release dir find the path to the given dependency +find_dep_in_rel_dir(Dep, RelDirRoot) -> + %% The dependencies that we have found are cached to avoid + %% searching through the file system unecessary many times + CacheId = runtime_dep_test_cache, + DepCache = + case erlang:get(CacheId) of + undefined -> #{}; + M-> M + end, + case maps:get(Dep, DepCache, none) of + none -> + DepPaths = filelib:wildcard(filename:join([RelDirRoot, "lib", "**", Dep, "ebin"])), + case DepPaths of + [Path] -> + erlang:put(CacheId, maps:put(Dep, Path, DepCache)), + Path; + _ -> + ErrorMessage = + io_lib:format("ERROR: Could not find ~p in ~p (where it is supposed to be)." + "Found ~p~n", [Dep, RelDirRoot, DepPaths]), + io:format(ErrorMessage), + ct:fail(ErrorMessage) + + end; + Path -> + Path + end. + +%% Get the major OTP version part of an OTP version string +%% Example: OTP-22.0 gives 22 +get_major_version(OtpVersion) -> + [_,MajorVersion|_] = string:tokens(OtpVersion, "-."), + MajorVersion. + +%% Returns the release directory for the oldest available OTP release +%% on the current machine +first_available_otp_rel() -> + %% At least one version less than the current version should be available + SholdBeAvailable = erlang:list_to_integer(erlang:system_info(otp_release)) - 1, + (fun FindOldest(CurrRel, PrevAvailable) -> + case test_server:is_release_available(erlang:integer_to_list(CurrRel)) of + false -> PrevAvailable; + true -> FindOldest(CurrRel-1, erlang:integer_to_list(CurrRel)) + end + end)(SholdBeAvailable, none). + +%% Searches for the oldest available version of Dep +get_oldest_available_version_of_dep(Dep) -> + [DepName, _Version] = string:tokens(Dep, "-"), + FirstAvailableRel = first_available_otp_rel(), + (fun Find(LookInRel) -> + case test_server:is_release_available(LookInRel) of + true -> + RelRoot = find_rel_root(LookInRel), + Options0 = filelib:wildcard(filename:join([RelRoot, "lib", "**", "ebin"])), + Options1 = [Opt || + Opt <- Options0, + string:find(Opt, + filename:join("lib", DepName ++ "-")) =/= nomatch], + GetVersionTuple = + fun(Path) -> + [AppVerStr] = + [C || C <- filename:split(Path), + string:find(C, DepName ++ "-") =/= nomatch], + [_,VerStr] = string:tokens(AppVerStr, "-"), + erlang:list_to_tuple([erlang:list_to_integer(X) || + X <- string:tokens(VerStr, ".")]) + end, + Options2 = + lists:sort(fun(A,B) -> + GetVersionTuple(A) =< GetVersionTuple(B) + end, + Options1), + case Options2 of + [Path|_] -> + Path; + _ -> + NextRelToTry = + erlang:integer_to_list(erlang:list_to_integer(LookInRel)+1), + Find(NextRelToTry) + end; + false -> + ct:fail({could_not_find_dep_anywhere, DepName}) + end + end)(FirstAvailableRel). + +find_rel_root(Rel) -> + case test_server:find_release(Rel) of + not_available -> + not_available; + OtpRelErl -> filename:dirname(filename:dirname(OtpRelErl)) + end. + +%% Find the absoulte paths to RuntimeDeps +get_paths_to_dependencies(App, RuntimeDeps) -> + FirstAvailableOTPRel = first_available_otp_rel(), + FirstAvailableRel = erlang:list_to_integer(FirstAvailableOTPRel), + DepToOtpVerMap = get_runtime_dep_to_otp_version_map(), + lists:foldl( + fun(Dep, SoFar) -> + case maps:get(Dep, DepToOtpVerMap, false) of + false -> + ct:fail(io_lib:format( + "The dependency ~s for ~p could not be found. " + "Have you typed a non-existing version?", + [Dep, App])); + {latest, Path} -> + %% The dependency is in Path (one of the paths returned by code:get_paths()) + [Path | SoFar]; + OtpVersionWithDep -> + OtpMajorVersionWithDep = get_major_version(OtpVersionWithDep), + OtpMajorVersionWithDepInt = erlang:list_to_integer(OtpMajorVersionWithDep), + case find_rel_root(OtpMajorVersionWithDep) of + not_available when FirstAvailableRel > OtpMajorVersionWithDepInt -> + io:format("Warning: Could not find runtime dependency ~p for ~p. " + "~p belongs to ~p but ~p is too old to be available on this machine. " + "Trying to find the oldest available version of ~p...", + [Dep, App, Dep, OtpVersionWithDep, OtpVersionWithDep, Dep]), + [get_oldest_available_version_of_dep(Dep) | SoFar]; + RelDirRoot -> + [find_dep_in_rel_dir(Dep, RelDirRoot) | SoFar] + end + end + end, + [], + RuntimeDeps). + +test_app_runtime_deps_versions(AppPath, App, IgnoredUndefinedFunctions) -> + %% Get a list of all runtime dependencies for app + RuntimeDeps = get_runtime_deps(App), + %% Get paths to the found runtime dependices + DepPaths = get_paths_to_dependencies(App, RuntimeDeps), + XRefSName = test_app_runtime_deps_versions_server, + %% Start xref server and do the test + {ok, _} = xref:start(XRefSName, []), + ok = xref:set_library_path(XRefSName, DepPaths), + Dir = filename:join(AppPath, "ebin"), + {ok, _} = xref:add_directory(XRefSName, Dir), + {ok, UndefinedFunctions0} = xref:analyze(XRefSName, undefined_functions), + xref:stop(XRefSName), + %% Filter out undefined functions that we should ignore + UndefinedFunctions1 = + [F || F <- UndefinedFunctions0, + not maps:get(F, IgnoredUndefinedFunctions, false)], + case UndefinedFunctions1 of + [] -> + ok; + UndefinedFunctions -> + {error_undefined_functions_in_app, App, UndefinedFunctions} + end. + +test_runtime_dependencies_versions_rels(IgnoreApps, AppsToIgnoredUndefinedFunctions) -> + %% Do for every application: + %% 1. Find deps from app file + %% 2. Find where the deps are installed + %% 3. Run xref tests on the apps with the specified dependencies + %% 4. Report error if undefined function + Apps0 = [{Path, list_to_atom(AppName)} + || {match, [Path, AppName]} + <- [re:run(X,"(" ++ code:lib_dir()++"/"++"([^/-]*).*)/ebin", + [{capture,[1,2],list},unicode]) || X <- code:get_path()]], + Apps = [{Path, App} || + {Path, App} <- Apps0, + code:where_is_file(atom_to_list(App) ++ ".app") =/= non_existing], + Res = [test_app_runtime_deps_versions(AppPath, + App, + maps:get(App, AppsToIgnoredUndefinedFunctions, #{})) || + {AppPath, App} <- Apps, not lists:member(App, IgnoreApps)], + BadRes = [R || R <- Res, R =/= ok], + case BadRes =:= [] of + true -> ok; + _ -> + ct:fail(BadRes) + end. + +is_development_build() -> + {ok, FileContentBin} = file:read_file(get_otp_version_tickets_path()), + "DEVELOPMENT" =:= string:trim(erlang:binary_to_list(FileContentBin), both, "\n "). + +test_runtime_dependencies_versions(_Config) -> + ReleasesDir = "/usr/local/otp/releases", + IgnoreApps = [], + AppsToIgnoredUndefinedFunctions = + #{eunit => + %% Intentional call to nonexisting function + #{{eunit_test, nonexisting_function, 0} => true}, + diameter => + %% The following functions are optional dependencies for diameter + #{{dbg,ctp,0} => true, + {dbg,p,2} => true, + {dbg,stop_clear,0} => true, + {dbg,trace_port,2} => true, + {dbg,tracer,2} => true, + {erl_prettypr,format,1} => true, + {erl_syntax,form_list,1} => true}, + common_test => + %% ftp:start/0 has been part of the ftp application from + %% the beginning so it is unclear why xref report this + %% as undefined + #{{ftp,start,0} => true}}, + case {erlang:element(1, os:type()) =:= unix, + not is_development_build(), + filelib:is_dir(ReleasesDir), + filelib:is_file(get_otp_versions_table_path()), + first_available_otp_rel() =/= none} of + {true, true, true, true, true} -> + test_runtime_dependencies_versions_rels(IgnoreApps, + AppsToIgnoredUndefinedFunctions); + {_, _ ,_, false, _} -> {skip, + "Could not find the file \"otp_versions.table\". " + "Check that the test has been built correctly. " + "\"otp_versions.table\" is copied to \"erts/test/otp_SUITE_data\" " + "by the makefile \"erts/test/Makefile\""}; + {_, false , _, _, _} -> {skip, + "This test case is designed to run in the Erlang/OTP teams " + "test system for nightly tests. The test case depend on that " + "app versions have been set correctly by scripts that " + "are executed before creating builds for the nightly tests."}; + {_, _ ,false, _, _} -> {skip, "Can not do the tests without a proper releases dir. " + "Check that " ++ ReleasesDir ++ " is set up correctly."}; + {_, _ , _, _, false} -> + PrevRelNr = erlang:list_to_integer(erlang:system_info(otp_release)) - 1, + PrevRelNrStr = erlang:integer_to_list(PrevRelNr), + {skip, + "Seems like the releases dir is not set up correctly. " + "Is release " ++ PrevRelNrStr ++ " installed in the releases dir? " + "(releases dir = " ++ ReleasesDir ++ ")"}; + {false, _ ,_, _, _} -> {skip, "This test only runs on Unix systems"} + end. diff --git a/erts/test/otp_SUITE_data/.keep b/erts/test/otp_SUITE_data/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/lib/common_test/src/common_test.app.src b/lib/common_test/src/common_test.app.src index 8aa15efa7e..017c409de3 100644 --- a/lib/common_test/src/common_test.app.src +++ b/lib/common_test/src/common_test.app.src @@ -79,20 +79,20 @@ {env, []}, {runtime_dependencies, ["compiler-6.0", - "crypto-3.6", + "crypto-4.5", "debugger-4.1", "erts-7.0", - "ftp-1.0.0", + "ftp-1.0", "inets-6.0", - "kernel-4.0", + "kernel-6.0", "observer-2.1", "runtime_tools-1.8.16", - "sasl-2.4.2", + "sasl-2.5", "snmp-5.1.2", "ssh-4.0", "stdlib-3.5", "syntax_tools-1.7", - "tools-2.8", + "tools-3.2", "xmerl-1.3.8" ]}]}. diff --git a/lib/common_test/src/test_server.erl b/lib/common_test/src/test_server.erl index 9b5fabb718..0d2a89ed82 100644 --- a/lib/common_test/src/test_server.erl +++ b/lib/common_test/src/test_server.erl @@ -39,7 +39,7 @@ -export([m_out_of_n/3,do_times/4,do_times/2]). -export([call_crash/3,call_crash/4,call_crash/5]). -export([temp_name/1]). --export([start_node/3, stop_node/1, wait_for_node/1, is_release_available/1]). +-export([start_node/3, stop_node/1, wait_for_node/1, is_release_available/1, find_release/1]). -export([app_test/1, app_test/2, appup_test/1]). -export([comment/1, make_priv_dir/0]). -export([os_type/0]). @@ -2766,6 +2766,19 @@ is_release_available(Release) -> {test_server_ctrl,is_release_available,[Release]}}, receive {sync_result,R} -> R end. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% find_release(Release) -> PathToReleaseErlFile | not_available +%% Release -> string() +%% +%% Test if a release (such as "r10b") and if so return the path to the +%% release's erl file + +find_release(Release) -> + group_leader() ! {sync_apply, + self(), + {test_server_ctrl,find_release,[Release]}}, + receive {sync_result,R} -> R end. + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% run_on_shielded_node(Fun, CArgs) -> term() diff --git a/lib/common_test/src/test_server_ctrl.erl b/lib/common_test/src/test_server_ctrl.erl index 5ca36affe3..49ea24cc2e 100644 --- a/lib/common_test/src/test_server_ctrl.erl +++ b/lib/common_test/src/test_server_ctrl.erl @@ -62,7 +62,7 @@ %%% TEST_SERVER INTERFACE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -export([print/2, print/3, print/4, print_timestamp/2]). --export([start_node/3, stop_node/1, wait_for_node/1, is_release_available/1]). +-export([start_node/3, stop_node/1, wait_for_node/1, is_release_available/1, find_release/1]). -export([format/1, format/2, format/3, to_string/1]). -export([get_target_info/0]). -export([get_hosts/0]). @@ -962,6 +962,19 @@ handle_call({stop_node, Name}, _From, State) -> handle_call({is_release_available, Release}, _From, State) -> R = test_server_node:is_release_available(Release), + {reply, R, State}; + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% handle_call({find_release,Name}, _, State) -> PathToReleaseErlFile | not_available +%% +%% Find the path of the release's erl file if available + +handle_call({find_release, Release}, _From, State) -> + R = + case test_server_node:is_release_available(Release) of + true -> test_server_node:find_release(Release); + _ -> not_available + end, {reply, R, State}. %%-------------------------------------------------------------------- @@ -5171,6 +5184,14 @@ wait_for_node(Slave) -> is_release_available(Release) -> controller_call({is_release_available,Release}). +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% handle_call({find_release,Name}, _, State) -> PathToReleaseErlFile | not_available +%% +%% Find the path of the release's erl file if available + +find_release(Release) -> + controller_call({find_release,Release}). + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% stop_node(Name) -> ok | {error,Reason} %% diff --git a/lib/common_test/src/test_server_node.erl b/lib/common_test/src/test_server_node.erl index edfb1fbd92..e03337a780 100644 --- a/lib/common_test/src/test_server_node.erl +++ b/lib/common_test/src/test_server_node.erl @@ -26,7 +26,7 @@ %%% %% Test Controller interface --export([is_release_available/1]). +-export([is_release_available/1, find_release/1]). -export([start_tracer_node/2,trace_nodes/2,stop_tracer_node/1]). -export([start_node/5, stop_node/1]). -export([kill_nodes/0, nodedown/1]). diff --git a/lib/compiler/src/compiler.app.src b/lib/compiler/src/compiler.app.src index fe7179b695..08827c66b3 100644 --- a/lib/compiler/src/compiler.app.src +++ b/lib/compiler/src/compiler.app.src @@ -82,5 +82,5 @@ {registered, []}, {applications, [kernel, stdlib]}, {env, []}, - {runtime_dependencies, ["stdlib-3.13","kernel-7.0","erts-11.0", - "crypto-3.6"]}]}. + {runtime_dependencies, ["stdlib-3.15","kernel-7.0","erts-11.0", + "crypto-4.5"]}]}. diff --git a/lib/crypto/src/crypto.app.src b/lib/crypto/src/crypto.app.src index 492aa10e51..202baaec6b 100644 --- a/lib/crypto/src/crypto.app.src +++ b/lib/crypto/src/crypto.app.src @@ -25,6 +25,6 @@ {registered, []}, {applications, [kernel, stdlib]}, {env, [{fips_mode, false}, {rand_cache_size, 896}]}, - {runtime_dependencies, ["erts-9.0","stdlib-3.4","kernel-5.3"]}]}. + {runtime_dependencies, ["erts-9.0","stdlib-3.9","kernel-5.3"]}]}. diff --git a/lib/diameter/src/diameter.app.src b/lib/diameter/src/diameter.app.src index 18202f033e..8819608dc4 100644 --- a/lib/diameter/src/diameter.app.src +++ b/lib/diameter/src/diameter.app.src @@ -38,7 +38,7 @@ {mod, {diameter_app, []}}, {runtime_dependencies, [ "erts-10.0", - "stdlib-2.4", + "stdlib-3.0", "kernel-3.2", "ssl-9.0" %, "syntax-tools-1.6.18" diff --git a/lib/edoc/src/edoc.app.src b/lib/edoc/src/edoc.app.src index 0edee67fce..079be93e9e 100644 --- a/lib/edoc/src/edoc.app.src +++ b/lib/edoc/src/edoc.app.src @@ -26,6 +26,6 @@ {registered,[]}, {applications, [compiler, kernel, stdlib, syntax_tools]}, {env, []}, - {runtime_dependencies, ["xmerl-1.3.7", "syntax_tools-1.6.14", "stdlib-3.15", + {runtime_dependencies, ["xmerl-1.3.7", "syntax_tools-2.0", "stdlib-3.15", "kernel-3.0", "inets-5.10", "erts-6.0"]} ]}. diff --git a/lib/eldap/src/eldap.app.src b/lib/eldap/src/eldap.app.src index 03a7d7c562..032a391936 100644 --- a/lib/eldap/src/eldap.app.src +++ b/lib/eldap/src/eldap.app.src @@ -5,6 +5,6 @@ {registered, []}, {applications, [kernel, stdlib]}, {env, []}, - {runtime_dependencies, ["stdlib-2.0","ssl-5.3.4","kernel-3.0","erts-6.0", + {runtime_dependencies, ["stdlib-3.4","ssl-5.3.4","kernel-3.0","erts-6.0", "asn1-3.0"]} ]}. diff --git a/lib/erl_docgen/src/erl_docgen.app.src b/lib/erl_docgen/src/erl_docgen.app.src index c7b7967a3d..5a6b48bd26 100644 --- a/lib/erl_docgen/src/erl_docgen.app.src +++ b/lib/erl_docgen/src/erl_docgen.app.src @@ -10,6 +10,6 @@ {registered,[]}, {applications, [kernel,stdlib]}, {env, []}, - {runtime_dependencies, ["xmerl-1.3.7","kernel-8.0","stdlib-3.15","edoc-1.0","erts-9.0"]} + {runtime_dependencies, ["xmerl-1.3.7","kernel-8.0","stdlib-3.15","edoc-1.0","erts-11.0"]} ] }. diff --git a/lib/inets/src/inets_app/inets.app.src b/lib/inets/src/inets_app/inets.app.src index 04158ca1b6..c6a43d4a7b 100644 --- a/lib/inets/src/inets_app/inets.app.src +++ b/lib/inets/src/inets_app/inets.app.src @@ -97,5 +97,5 @@ %% If the "new" ssl is used then 'crypto' must be started before inets. {applications,[kernel,stdlib]}, {mod,{inets_app,[]}}, - {runtime_dependencies, ["stdlib-3.5","ssl-5.3.4","runtime_tools-1.8.14", - "mnesia-4.12","kernel-3.0","erts-6.0"]}]}. + {runtime_dependencies, ["stdlib-3.14","ssl-9.0","runtime_tools-1.8.14", + "mnesia-4.12","kernel-6.0","erts-6.0"]}]}. diff --git a/lib/kernel/src/kernel.app.src b/lib/kernel/src/kernel.app.src index 73765455dd..9e6ac9cf03 100644 --- a/lib/kernel/src/kernel.app.src +++ b/lib/kernel/src/kernel.app.src @@ -155,6 +155,6 @@ {shell_docs_ansi,auto} ]}, {mod, {kernel, []}}, - {runtime_dependencies, ["erts-12.3", "stdlib-3.13", "sasl-3.0", "crypto-5.0"]} + {runtime_dependencies, ["erts-12.3", "stdlib-3.15", "sasl-3.0", "crypto-5.0"]} ] }. diff --git a/lib/os_mon/src/os_mon.app.src b/lib/os_mon/src/os_mon.app.src index 894f63e227..1d462e614e 100644 --- a/lib/os_mon/src/os_mon.app.src +++ b/lib/os_mon/src/os_mon.app.src @@ -31,4 +31,4 @@ {start_memsup, true}, {start_os_sup, false}]}, {mod, {os_mon, []}}, - {runtime_dependencies, ["stdlib-2.0","sasl-2.4","kernel-3.0","erts-6.0"]}]}. + {runtime_dependencies, ["stdlib-3.4","sasl-2.4","kernel-3.0","erts-6.0"]}]}. diff --git a/lib/parsetools/src/parsetools.app.src b/lib/parsetools/src/parsetools.app.src index a7b258820a..e67e3e38f2 100644 --- a/lib/parsetools/src/parsetools.app.src +++ b/lib/parsetools/src/parsetools.app.src @@ -12,7 +12,7 @@ {env, [{file_util_search_methods,[{"", ""}, {"ebin", "esrc"}, {"ebin", "src"}]} ] }, - {runtime_dependencies, ["stdlib-2.5","kernel-3.0","erts-6.0"]} + {runtime_dependencies, ["stdlib-3.4","kernel-3.0","erts-6.0"]} ] }. diff --git a/lib/public_key/src/public_key.app.src b/lib/public_key/src/public_key.app.src index 6be7cd3bc4..74d7a28354 100644 --- a/lib/public_key/src/public_key.app.src +++ b/lib/public_key/src/public_key.app.src @@ -15,7 +15,7 @@ {applications, [asn1, crypto, kernel, stdlib]}, {registered, []}, {env, []}, - {runtime_dependencies, ["stdlib-3.5","kernel-3.0","erts-6.0","crypto-3.8", + {runtime_dependencies, ["stdlib-3.5","kernel-3.0","erts-6.0","crypto-4.6", "asn1-3.0"]} ] }. diff --git a/lib/sasl/src/sasl.app.src b/lib/sasl/src/sasl.app.src index 293af504df..6b9b921daf 100644 --- a/lib/sasl/src/sasl.app.src +++ b/lib/sasl/src/sasl.app.src @@ -42,6 +42,6 @@ {applications, [kernel, stdlib]}, {env, []}, {mod, {sasl, []}}, - {runtime_dependencies, ["tools-2.6.14","stdlib-3.4","kernel-5.3", + {runtime_dependencies, ["tools-2.6.14","stdlib-3.4","kernel-6.0", "erts-10.2"]}]}. diff --git a/lib/snmp/src/app/snmp.app.src b/lib/snmp/src/app/snmp.app.src index 6b208456a8..1cc8c44205 100644 --- a/lib/snmp/src/app/snmp.app.src +++ b/lib/snmp/src/app/snmp.app.src @@ -142,4 +142,4 @@ {applications, [kernel, stdlib]}, {mod, {snmp_app, []}}, {runtime_dependencies, ["stdlib-2.5","runtime_tools-1.8.14","mnesia-4.12", - "kernel-8.0","erts-12.0","crypto-3.3"]}]}. + "kernel-8.0","erts-12.0","crypto-4.6"]}]}. diff --git a/lib/ssh/src/ssh.app.src b/lib/ssh/src/ssh.app.src index c7ad417bef..53dbc54071 100644 --- a/lib/ssh/src/ssh.app.src +++ b/lib/ssh/src/ssh.app.src @@ -59,7 +59,7 @@ {mod, {ssh_app, []}}, {runtime_dependencies, [ "crypto-5.0", - "erts-9.0", + "erts-11.0", "kernel-5.3", "public_key-1.6.1", "stdlib-3.15", diff --git a/lib/stdlib/src/stdlib.app.src b/lib/stdlib/src/stdlib.app.src index f03aab50b6..b9456d4796 100644 --- a/lib/stdlib/src/stdlib.app.src +++ b/lib/stdlib/src/stdlib.app.src @@ -111,6 +111,6 @@ dets]}, {applications, [kernel]}, {env, []}, - {runtime_dependencies, ["sasl-3.0","kernel-7.0","erts-12.0","crypto-3.3", + {runtime_dependencies, ["sasl-3.0","kernel-7.0","erts-12.0","crypto-4.5", "compiler-5.0"]} ]}. diff --git a/lib/wx/src/wx.app.src b/lib/wx/src/wx.app.src index 92984f13b5..1091e8acad 100644 --- a/lib/wx/src/wx.app.src +++ b/lib/wx/src/wx.app.src @@ -35,5 +35,5 @@ {registered, []}, {applications, [stdlib, kernel]}, {env, []}, - {runtime_dependencies, ["stdlib-2.0","kernel-3.0","erts-6.0"]} + {runtime_dependencies, ["stdlib-3.13","kernel-3.0","erts-6.0"]} ]}. -- 2.26.2
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor