WIP: Adding --libs=
This commit is contained in:
parent
fac2aaf6b6
commit
2636054316
@ -907,21 +907,25 @@ run2(FuzzyID, RunArgs) ->
|
|||||||
Error -> Error
|
Error -> Error
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
|
||||||
run3(PackageID, RunArgs) ->
|
run3(PackageID, RunArgs) ->
|
||||||
case fetch(PackageID) of
|
case fetch(PackageID) of
|
||||||
ok -> run4(PackageID, RunArgs);
|
ok -> run4(PackageID, RunArgs);
|
||||||
Error -> Error
|
Error -> Error
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
|
||||||
run4(PackageID, RunArgs) ->
|
run4(PackageID, RunArgs) ->
|
||||||
Dir = zx_lib:ppath(lib, PackageID),
|
Dir = zx_lib:ppath(lib, PackageID),
|
||||||
{ok, Meta} = zx_lib:read_project_meta(Dir),
|
{ok, Meta} = zx_lib:read_project_meta(Dir),
|
||||||
Type = maps:get(type, Meta),
|
case pre_prep(Meta, RunArgs) of
|
||||||
Deps = maps:get(deps, Meta),
|
{Type, Deps, NewArgs} -> run5(Type, PackageID, Meta, Dir, Deps, NewArgs);
|
||||||
ok = prepare([PackageID | Deps]),
|
Error -> Error
|
||||||
execute(Type, PackageID, Meta, Dir, RunArgs).
|
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
|
-spec resolve_version(PackageID) -> Result
|
||||||
@ -1001,6 +1005,72 @@ run_project(ProjectDir, ExecDir, RunArgs) ->
|
|||||||
Error
|
Error
|
||||||
end.
|
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.
|
-spec prepare([zx:package_id()]) -> ok.
|
||||||
%% @private
|
%% @private
|
||||||
%% Execution prep common to all packages.
|
%% Execution prep common to all packages.
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user