WIP: Adding --libs=
This commit is contained in:
parent
fac2aaf6b6
commit
2636054316
@ -907,21 +907,25 @@ run2(FuzzyID, RunArgs) ->
|
||||
Error -> Error
|
||||
end.
|
||||
|
||||
|
||||
run3(PackageID, RunArgs) ->
|
||||
case fetch(PackageID) of
|
||||
ok -> run4(PackageID, RunArgs);
|
||||
Error -> Error
|
||||
end.
|
||||
|
||||
|
||||
run4(PackageID, RunArgs) ->
|
||||
Dir = zx_lib:ppath(lib, PackageID),
|
||||
{ok, Meta} = zx_lib:read_project_meta(Dir),
|
||||
Type = maps:get(type, Meta),
|
||||
Deps = maps:get(deps, Meta),
|
||||
ok = prepare([PackageID | Deps]),
|
||||
execute(Type, PackageID, Meta, Dir, RunArgs).
|
||||
case pre_prep(Meta, RunArgs) of
|
||||
{Type, Deps, NewArgs} -> run5(Type, PackageID, Meta, Dir, Deps, NewArgs);
|
||||
Error -> Error
|
||||
end.
|
||||
|
||||
run5(Type, PackageID, Meta, Dir, Deps, NewArgs) ->
|
||||
case prepare([PackageID | Deps]) of
|
||||
ok -> execute(Type, PackageID, Meta, Dir, NewArgs);
|
||||
Error -> Error
|
||||
end.
|
||||
|
||||
|
||||
-spec resolve_version(PackageID) -> Result
|
||||
@ -1001,6 +1005,72 @@ run_project(ProjectDir, ExecDir, RunArgs) ->
|
||||
Error
|
||||
end.
|
||||
|
||||
|
||||
-spec pre_prep(Meta, RunArgs) -> {Type, Deps, NewArgs} | {error, term()}
|
||||
when Meta :: zx_zsp:meta(),
|
||||
RunArgs :: [string()],
|
||||
Type :: package_type(),
|
||||
Deps :: [package_id()],
|
||||
NewArgs :: [string()].
|
||||
|
||||
pre_prep(Meta, ["--libs=" ++ LibString | Args]) ->
|
||||
pre_prep2(Meta, lib_split(LibString), RunArgs);
|
||||
pre_prep(Meta, RunArgs) ->
|
||||
pre_prep(Meta, [], RunArgs).
|
||||
|
||||
lib_split(String) ->
|
||||
lib_split(String, [], []).
|
||||
|
||||
lib_split([$: | Rest], Dep, Deps) ->
|
||||
{Next, NewDeps} = dep_split(Rest, lists:reverse(Dep), [], Deps),
|
||||
lib_split(Next, [], NewDeps);
|
||||
lib_split([C | Rest], Dep, Deps) ->
|
||||
lib_split(Rest, [C | Dep], Deps);
|
||||
lib_split([], [], Deps) ->
|
||||
Deps.
|
||||
|
||||
dep_split([$, | Rest], Dep, Dir, Deps) ->
|
||||
{Rest, [{Dep, lists:reverse(Dir)} | Deps]};
|
||||
dep_split([C | Rest], Dep, Dir, Deps) ->
|
||||
dep_split(Rest, Dep, [C | Dir], Deps);
|
||||
dep_split([], Dep, Dir, Deps) ->
|
||||
{[], [{Dep, lists:reverse(Dir)} | Deps]}.
|
||||
|
||||
pre_prep2(Meta, LocalDeps, RunArgs) ->
|
||||
Type = maps:get(type, Meta),
|
||||
Deps = maps:get(deps, Meta),
|
||||
NewDeps = pre_prep3(Deps, LocalDeps),
|
||||
{Type, NewDeps, RunArgs}.
|
||||
|
||||
|
||||
pre_prep3(Deps, [{Dep, Dir} | Rest]) ->
|
||||
case zx_lib:package_id(Dep) of
|
||||
{ok, PackageID} -> pre_prep4(Deps, PackageID, Dir, Rest);
|
||||
Error -> Error
|
||||
end;
|
||||
pre_prep3(Deps, []) ->
|
||||
{ok, Deps}.
|
||||
|
||||
pre_prep4(Deps, {Realm, Name, _}, Dir, Rest) ->
|
||||
case file:set_cwd(Dir) of
|
||||
ok ->
|
||||
Scrub =
|
||||
fun(D = {R, N, _}, Acc) ->
|
||||
case R == Realm and N == Name of
|
||||
true -> Acc;
|
||||
false -> [D | Acc]
|
||||
end
|
||||
end,
|
||||
NewDeps = Scrub(Deps, []),
|
||||
true = os:putenv(Name ++ "_include", filename:join(Dir, "include")),
|
||||
ok = zx_lib:build(),
|
||||
pre_prep3(NewDeps, Rest);
|
||||
Error = {error, enoent} ->
|
||||
ok = tell(error, "Dir ~p does not exist!", [Dir]),
|
||||
Error
|
||||
end.
|
||||
|
||||
|
||||
-spec prepare([zx:package_id()]) -> ok.
|
||||
%% @private
|
||||
%% Execution prep common to all packages.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user