mirror of
https://github.com/vishapoberon/vipak.git
synced 2026-04-05 20:42:26 +00:00
builds, but there are issues.
This commit is contained in:
parent
8bedfc1689
commit
81b0414238
3 changed files with 199 additions and 134 deletions
|
|
@ -67,6 +67,7 @@ buildThis:
|
||||||
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkResolver.Mod
|
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkResolver.Mod
|
||||||
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkJsonDepRetriever.Mod
|
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkJsonDepRetriever.Mod
|
||||||
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkInstaller.Mod
|
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkInstaller.Mod
|
||||||
|
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkLocalBuilder.Mod
|
||||||
cd $(BUILD) && $(VOC) $(mkfile_dir_path)/src/vipak.Mod -cm
|
cd $(BUILD) && $(VOC) $(mkfile_dir_path)/src/vipak.Mod -cm
|
||||||
cd $(BUILD) && gcc -o vipak *.o -static -L/opt/voc/lib -lvoc-O2 /opt/voc/lib/libvoc-O2.a -L. -lmbedtls -lmbedcrypto -lmbedx509 libmbedcrypto.a libmbedtls.a libmbedx509.a
|
cd $(BUILD) && gcc -o vipak *.o -static -L/opt/voc/lib -lvoc-O2 /opt/voc/lib/libvoc-O2.a -L. -lmbedtls -lmbedcrypto -lmbedx509 libmbedcrypto.a libmbedtls.a libmbedx509.a
|
||||||
@echo "________________________________________"
|
@echo "________________________________________"
|
||||||
|
|
|
||||||
188
src/vipak.Mod
188
src/vipak.Mod
|
|
@ -1,88 +1,7 @@
|
||||||
MODULE vipak;
|
MODULE vipak;
|
||||||
IMPORT Texts, Strings, Oberon, Out,
|
IMPORT Texts, Strings, Oberon, Out,
|
||||||
vpkConf, vpkLogger, vpkSyncer, vpkInstaller, vpkdepTree, opts, StringList;
|
vpkConf, vpkLogger, vpkSyncer, vpkInstaller, vpkdepTree, opts, StringList,
|
||||||
(*
|
vpkLocalBuilder;
|
||||||
PROCEDURE processArgs(VAR package, prefix, tree: ARRAY OF CHAR; deps, sync: BOOLEAN);
|
|
||||||
VAR
|
|
||||||
options: opts.Options;
|
|
||||||
foptions: opts.Options;
|
|
||||||
opt, fopt: opts.Option;
|
|
||||||
BEGIN
|
|
||||||
|
|
||||||
options := opts.createOptions();
|
|
||||||
foptions := opts.createOptions();
|
|
||||||
|
|
||||||
opt := opts.createOpt();
|
|
||||||
opts.setOptName(opt, "-p");
|
|
||||||
opts.setOptLName(opt, "--package");
|
|
||||||
opts.setOptHasVal(opt, TRUE);
|
|
||||||
opts.setOptDesc(opt, "package name to download");
|
|
||||||
opts.setOptRequired(opt, FALSE);
|
|
||||||
options.add(options, opt);
|
|
||||||
|
|
||||||
opt := opts.createOpt();
|
|
||||||
opts.setOptName(opt, "-d");
|
|
||||||
opts.setOptLName(opt, "--showdeps");
|
|
||||||
opts.setOptHasVal(opt, FALSE);
|
|
||||||
opts.setOptDesc(opt, "only resolve and show dependencies, do not fetch");
|
|
||||||
opts.setOptRequired(opt, FALSE);
|
|
||||||
options.add(options, opt);
|
|
||||||
|
|
||||||
opts.setOptRequired(opt, FALSE);
|
|
||||||
options.add(options, opt);
|
|
||||||
|
|
||||||
opt := opts.createOpt();
|
|
||||||
opts.setOptName(opt, "-s");
|
|
||||||
opts.setOptLName(opt, "--sync");
|
|
||||||
opts.setOptHasVal(opt, FALSE);
|
|
||||||
opts.setOptDesc(opt, "sync the package tree");
|
|
||||||
opts.setOptRequired(opt, FALSE);
|
|
||||||
options.add(options, opt);
|
|
||||||
|
|
||||||
opt := opts.createOpt();
|
|
||||||
opts.setOptName(opt, "-P");
|
|
||||||
opts.setOptLName(opt, "--prefix");
|
|
||||||
opts.setOptHasVal(opt, TRUE);
|
|
||||||
opts.setOptDesc(opt, "where to download and build packages");
|
|
||||||
opts.setOptRequired(opt, FALSE);
|
|
||||||
options.add(options, opt);
|
|
||||||
|
|
||||||
opt := opts.createOpt();
|
|
||||||
opts.setOptName(opt, "-t");
|
|
||||||
opts.setOptLName(opt, "--tree");
|
|
||||||
opts.setOptHasVal(opt, TRUE);
|
|
||||||
opts.setOptDesc(opt, "override the default package description tree");
|
|
||||||
opts.setOptRequired(opt, FALSE);
|
|
||||||
options.add(options, opt);
|
|
||||||
|
|
||||||
foptions := opts.populateOptions(options);
|
|
||||||
IF opts.reqsSatisfied(options, foptions) THEN
|
|
||||||
Out.String("required options provided"); Out.Ln;
|
|
||||||
ELSE
|
|
||||||
Out.String("required options not provided"); Out.Ln;
|
|
||||||
opts.showHelp(options);
|
|
||||||
HALT(3);
|
|
||||||
END;
|
|
||||||
Out.Ln;
|
|
||||||
|
|
||||||
COPY("", package); COPY("", prefix); COPY("", tree);
|
|
||||||
deps := FALSE; sync := FALSE;
|
|
||||||
|
|
||||||
fopt := opts.createOpt();
|
|
||||||
fopt := opts.findOpt("-d", foptions);
|
|
||||||
IF fopt # NIL THEN deps := TRUE END;
|
|
||||||
|
|
||||||
fopt := opts.createOpt();
|
|
||||||
fopt := opts.findOpt("-s", foptions);
|
|
||||||
IF fopt # NIL THEN sync := TRUE END;
|
|
||||||
|
|
||||||
|
|
||||||
opts.valOfOpt("-p", foptions, package);
|
|
||||||
opts.valOfOpt("-P", foptions, prefix);
|
|
||||||
opts.valOfOpt("-t", foptions, tree);
|
|
||||||
|
|
||||||
END processArgs;
|
|
||||||
*)
|
|
||||||
|
|
||||||
PROCEDURE msgnopkg(VAR options: opts.Options);
|
PROCEDURE msgnopkg(VAR options: opts.Options);
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
@ -92,8 +11,8 @@ END msgnopkg;
|
||||||
|
|
||||||
PROCEDURE main;
|
PROCEDURE main;
|
||||||
VAR
|
VAR
|
||||||
deps, sync, fetch, ask: BOOLEAN;
|
deps, sync, fetch, ask, local, init, withDeps: BOOLEAN;
|
||||||
package, prefix, pkgTree: ARRAY 128 OF CHAR;
|
package, prefix, pkgTree, localFile: ARRAY 128 OF CHAR;
|
||||||
|
|
||||||
options: opts.Options;
|
options: opts.Options;
|
||||||
foptions: opts.Options;
|
foptions: opts.Options;
|
||||||
|
|
@ -134,7 +53,7 @@ BEGIN
|
||||||
opts.setOptName(opt, "-a");
|
opts.setOptName(opt, "-a");
|
||||||
opts.setOptLName(opt, "--ask");
|
opts.setOptLName(opt, "--ask");
|
||||||
opts.setOptHasVal(opt, FALSE);
|
opts.setOptHasVal(opt, FALSE);
|
||||||
opts.setOptDesc(opt, "only resolve and fetch, do not build");
|
opts.setOptDesc(opt, "ask before proceeding with build/fetch");
|
||||||
opts.setOptRequired(opt, FALSE);
|
opts.setOptRequired(opt, FALSE);
|
||||||
options.add(options, opt);
|
options.add(options, opt);
|
||||||
|
|
||||||
|
|
@ -162,6 +81,31 @@ BEGIN
|
||||||
opts.setOptRequired(opt, FALSE);
|
opts.setOptRequired(opt, FALSE);
|
||||||
options.add(options, opt);
|
options.add(options, opt);
|
||||||
|
|
||||||
|
(* New local build options *)
|
||||||
|
opt := opts.createOpt();
|
||||||
|
opts.setOptName(opt, "-l");
|
||||||
|
opts.setOptLName(opt, "--local");
|
||||||
|
opts.setOptHasVal(opt, TRUE);
|
||||||
|
opts.setOptDesc(opt, "build local project from specified vipak.json file");
|
||||||
|
opts.setOptRequired(opt, FALSE);
|
||||||
|
options.add(options, opt);
|
||||||
|
|
||||||
|
opt := opts.createOpt();
|
||||||
|
opts.setOptName(opt, "-i");
|
||||||
|
opts.setOptLName(opt, "--init");
|
||||||
|
opts.setOptHasVal(opt, FALSE);
|
||||||
|
opts.setOptDesc(opt, "create default vipak.json in current directory");
|
||||||
|
opts.setOptRequired(opt, FALSE);
|
||||||
|
options.add(options, opt);
|
||||||
|
|
||||||
|
opt := opts.createOpt();
|
||||||
|
opts.setOptName(opt, "-w");
|
||||||
|
opts.setOptLName(opt, "--with-deps");
|
||||||
|
opts.setOptHasVal(opt, FALSE);
|
||||||
|
opts.setOptDesc(opt, "also build dependencies when building local project");
|
||||||
|
opts.setOptRequired(opt, FALSE);
|
||||||
|
options.add(options, opt);
|
||||||
|
|
||||||
foptions := opts.populateOptions(options);
|
foptions := opts.populateOptions(options);
|
||||||
IF opts.reqsSatisfied(options, foptions) THEN
|
IF opts.reqsSatisfied(options, foptions) THEN
|
||||||
Out.String("required options provided"); Out.Ln;
|
Out.String("required options provided"); Out.Ln;
|
||||||
|
|
@ -172,9 +116,9 @@ BEGIN
|
||||||
END;
|
END;
|
||||||
Out.Ln;
|
Out.Ln;
|
||||||
|
|
||||||
COPY("", package); COPY("", prefix); COPY("", pkgTree);
|
COPY("", package); COPY("", prefix); COPY("", pkgTree); COPY("vipak.json", localFile);
|
||||||
deps := FALSE; sync := FALSE;
|
deps := FALSE; sync := FALSE; fetch := FALSE; ask := FALSE;
|
||||||
fetch := FALSE; ask := FALSE;
|
local := FALSE; init := FALSE; withDeps := FALSE;
|
||||||
|
|
||||||
fopt := opts.createOpt();
|
fopt := opts.createOpt();
|
||||||
fopt := opts.findOpt("-d", foptions);
|
fopt := opts.findOpt("-d", foptions);
|
||||||
|
|
@ -184,7 +128,6 @@ BEGIN
|
||||||
fopt := opts.findOpt("-a", foptions);
|
fopt := opts.findOpt("-a", foptions);
|
||||||
IF fopt # NIL THEN ask := TRUE END;
|
IF fopt # NIL THEN ask := TRUE END;
|
||||||
|
|
||||||
|
|
||||||
fopt := opts.createOpt();
|
fopt := opts.createOpt();
|
||||||
fopt := opts.findOpt("-f", foptions);
|
fopt := opts.findOpt("-f", foptions);
|
||||||
IF fopt # NIL THEN fetch := TRUE END;
|
IF fopt # NIL THEN fetch := TRUE END;
|
||||||
|
|
@ -193,6 +136,17 @@ BEGIN
|
||||||
fopt := opts.findOpt("-s", foptions);
|
fopt := opts.findOpt("-s", foptions);
|
||||||
IF fopt # NIL THEN sync := TRUE END;
|
IF fopt # NIL THEN sync := TRUE END;
|
||||||
|
|
||||||
|
fopt := opts.createOpt();
|
||||||
|
fopt := opts.findOpt("-l", foptions);
|
||||||
|
IF fopt # NIL THEN local := TRUE END;
|
||||||
|
|
||||||
|
fopt := opts.createOpt();
|
||||||
|
fopt := opts.findOpt("-i", foptions);
|
||||||
|
IF fopt # NIL THEN init := TRUE END;
|
||||||
|
|
||||||
|
fopt := opts.createOpt();
|
||||||
|
fopt := opts.findOpt("-w", foptions);
|
||||||
|
IF fopt # NIL THEN withDeps := TRUE END;
|
||||||
|
|
||||||
opts.valOfOpt("-p", foptions, package);
|
opts.valOfOpt("-p", foptions, package);
|
||||||
opts.valOfOpt("-P", foptions, prefix);
|
opts.valOfOpt("-P", foptions, prefix);
|
||||||
|
|
@ -203,10 +157,18 @@ BEGIN
|
||||||
IF pkgTree = "" THEN
|
IF pkgTree = "" THEN
|
||||||
Out.String(" will use the default package tree location"); Out.Ln;
|
Out.String(" will use the default package tree location"); Out.Ln;
|
||||||
END;
|
END;
|
||||||
|
opts.valOfOpt("-l", foptions, localFile);
|
||||||
|
|
||||||
IF pkgTree # "" THEN vpkConf.setTreeDir(pkgTree) END;
|
IF pkgTree # "" THEN vpkConf.setTreeDir(pkgTree) END;
|
||||||
|
|
||||||
IF sync THEN
|
(* Handle new local build functionality *)
|
||||||
|
IF init THEN
|
||||||
|
Out.String("Initializing new vipak project..."); Out.Ln;
|
||||||
|
vpkLocalBuilder.init
|
||||||
|
ELSIF local THEN
|
||||||
|
Out.String("Building local project from: "); Out.String(localFile); Out.Ln;
|
||||||
|
vpkLocalBuilder.buildLocal(localFile, withDeps)
|
||||||
|
ELSIF sync THEN
|
||||||
vpkSyncer.sync
|
vpkSyncer.sync
|
||||||
ELSE
|
ELSE
|
||||||
IF package # "" THEN
|
IF package # "" THEN
|
||||||
|
|
@ -224,48 +186,6 @@ BEGIN
|
||||||
|
|
||||||
END main;
|
END main;
|
||||||
|
|
||||||
(*
|
|
||||||
PROCEDURE help();
|
|
||||||
BEGIN
|
|
||||||
vpkLogger.Log("HelpText");
|
|
||||||
Out.String("Vipack sync - syncing git tree and local tree"); Out.Ln;
|
|
||||||
Out.String("vipackConf.json path -> $HOME/.vipack/vipackConf.json"); Out.Ln;
|
|
||||||
Out.String("vipak tree path -> $HOME/.vipak/vipatsar")
|
|
||||||
END help;
|
|
||||||
|
|
||||||
PROCEDURE main();
|
|
||||||
VAR
|
|
||||||
S: Texts.Scanner;
|
|
||||||
unit, command: ARRAY 64 OF CHAR; (* because Texts.Scanner.s is 64 bytes long*)
|
|
||||||
BEGIN
|
|
||||||
(* this could go to vpkConf init section,
|
|
||||||
but here it is more visible. though may be it doesn't have to be *)
|
|
||||||
IF ~vpkConf.configured() THEN vpkConf.mkDefConfig END;
|
|
||||||
|
|
||||||
(* Getting 1 argument and outputting it *)
|
|
||||||
Texts.OpenScanner(S, Oberon.Par.text, Oberon.Par.pos);
|
|
||||||
Texts.Scan(S);
|
|
||||||
|
|
||||||
command := S.s;
|
|
||||||
|
|
||||||
IF Strings.Match(command, "") OR Strings.Match(command, "help")THEN
|
|
||||||
help;
|
|
||||||
ELSE
|
|
||||||
|
|
||||||
IF command = "sync" THEN
|
|
||||||
vpkSyncer.sync;
|
|
||||||
END;
|
|
||||||
|
|
||||||
IF command = "install" THEN
|
|
||||||
Texts.Scan(S);
|
|
||||||
unit := S.s;
|
|
||||||
vpkInstaller.install(unit);
|
|
||||||
END;
|
|
||||||
|
|
||||||
END;
|
|
||||||
END main;
|
|
||||||
*)
|
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
main
|
main
|
||||||
END vipak.
|
END vipak.
|
||||||
|
|
@ -5,6 +5,9 @@ IMPORT Strings, Out,
|
||||||
CONST
|
CONST
|
||||||
ErrmessSize = 4096;
|
ErrmessSize = 4096;
|
||||||
|
|
||||||
|
VAR
|
||||||
|
currentLocalProjectFile: ARRAY 256 OF CHAR;
|
||||||
|
|
||||||
PROCEDURE ToLower(VAR stringVar: ARRAY OF CHAR);
|
PROCEDURE ToLower(VAR stringVar: ARRAY OF CHAR);
|
||||||
VAR
|
VAR
|
||||||
i: INTEGER;
|
i: INTEGER;
|
||||||
|
|
@ -399,4 +402,145 @@ BEGIN
|
||||||
RETURN 0;
|
RETURN 0;
|
||||||
END getDeps;
|
END getDeps;
|
||||||
|
|
||||||
|
PROCEDURE setLocalProjectFile*(VAR filename: ARRAY OF CHAR);
|
||||||
|
BEGIN
|
||||||
|
COPY(filename, currentLocalProjectFile);
|
||||||
|
END setLocalProjectFile;
|
||||||
|
|
||||||
|
PROCEDURE getBuildInfoFromFile*(VAR d: vpkdepTree.Tdep; VAR k, v: StringList.TStringList; VAR filename: ARRAY OF CHAR): BOOLEAN;
|
||||||
|
VAR
|
||||||
|
jsonstr, errstr: strUtils.pstring;
|
||||||
|
tree, buildValue, command, file: Json.Value;
|
||||||
|
rootObj, buildStep: Json.Obj;
|
||||||
|
buildArray: Json.Arr;
|
||||||
|
cm, fl, bl, cmLower, flLower: Json.jString;
|
||||||
|
b: BOOLEAN;
|
||||||
|
BEGIN
|
||||||
|
k := NIL; v := NIL;
|
||||||
|
b := FALSE;
|
||||||
|
jsonstr := NIL;
|
||||||
|
|
||||||
|
(* Read from specified file instead of package tree *)
|
||||||
|
vpkStorage.fileToString(filename, jsonstr);
|
||||||
|
|
||||||
|
IF jsonstr # NIL THEN
|
||||||
|
NEW(errstr, ErrmessSize);
|
||||||
|
b := Json.Parse(tree, jsonstr^, errstr^);
|
||||||
|
IF b THEN
|
||||||
|
IF tree IS Json.Obj THEN
|
||||||
|
rootObj := tree(Json.Obj);
|
||||||
|
NEW(bl, Strings.Length(vpkSettings.bldType) + 1); (* +1 for 0X *)
|
||||||
|
COPY(vpkSettings.bldType, bl^);
|
||||||
|
IF Json.ObjSelect(buildValue, rootObj, bl) THEN
|
||||||
|
IF buildValue IS Json.Arr THEN
|
||||||
|
buildArray := buildValue(Json.Arr);
|
||||||
|
WHILE buildArray # NIL DO
|
||||||
|
buildStep := buildArray.value(Json.Obj);
|
||||||
|
NEW(cm, Strings.Length(vpkSettings.bldCommand) + 1); (* +1 for 0X *)
|
||||||
|
NEW(fl, Strings.Length(vpkSettings.bldFile) + 1); (* +1 for 0X *)
|
||||||
|
COPY(vpkSettings.bldCommand, cm^);
|
||||||
|
COPY(vpkSettings.bldFile, fl^);
|
||||||
|
|
||||||
|
(* Handle build steps (same logic as original getBuildInfo) *)
|
||||||
|
IF Json.ObjSelect(command, buildStep, cm) & Json.ObjSelect(file, buildStep, fl) THEN
|
||||||
|
IF (command IS Json.Str) & (file IS Json.Str) THEN
|
||||||
|
IF k = NIL THEN k := StringList.Create() END;
|
||||||
|
IF v = NIL THEN v := StringList.Create() END;
|
||||||
|
k.AppendString(k, command(Json.Str).str^);
|
||||||
|
v.AppendString(v, file(Json.Str).str^);
|
||||||
|
ELSE
|
||||||
|
Out.String("command and file must be strings"); Out.Ln;
|
||||||
|
HALT(5);
|
||||||
|
END;
|
||||||
|
ELSE
|
||||||
|
Out.String("Failed to select 'command' or 'file' from build step"); Out.Ln;
|
||||||
|
END;
|
||||||
|
buildArray := buildArray.next;
|
||||||
|
END;
|
||||||
|
ELSE
|
||||||
|
Out.String("Build section is not an array."); Out.Ln;
|
||||||
|
END;
|
||||||
|
ELSE
|
||||||
|
Out.String("Build section not found."); Out.Ln;
|
||||||
|
END;
|
||||||
|
ELSE
|
||||||
|
Out.String("JSON root is not an object."); Out.Ln;
|
||||||
|
END;
|
||||||
|
ELSE
|
||||||
|
Out.String("JSON parsing failed: "); Out.String(errstr^); Out.Ln;
|
||||||
|
END;
|
||||||
|
ELSE
|
||||||
|
Out.String("No JSON string provided."); Out.Ln;
|
||||||
|
END;
|
||||||
|
RETURN b;
|
||||||
|
END getBuildInfoFromFile;
|
||||||
|
|
||||||
|
PROCEDURE getDepsFromFile*(VAR d: vpkdepTree.Tdep; VAR depstrlist: StringList.TStringList): LONGINT;
|
||||||
|
VAR
|
||||||
|
jsonstr, errstr: strUtils.pstring;
|
||||||
|
tree, depsValue, singleDep: Json.Value;
|
||||||
|
rootObj, depObj: Json.Obj;
|
||||||
|
depName, depVersion: Json.jString;
|
||||||
|
foundDepSection: BOOLEAN;
|
||||||
|
filename: ARRAY 128 OF CHAR;
|
||||||
|
BEGIN
|
||||||
|
depstrlist := NIL;
|
||||||
|
jsonstr := NIL;
|
||||||
|
|
||||||
|
(* For local projects, read from current directory's vipak.json *)
|
||||||
|
IF currentLocalProjectFile = "" THEN
|
||||||
|
COPY("vipak.json", filename);
|
||||||
|
ELSE
|
||||||
|
COPY(currentLocalProjectFile, filename);
|
||||||
|
END;
|
||||||
|
vpkStorage.fileToString(filename, jsonstr);
|
||||||
|
|
||||||
|
IF jsonstr # NIL THEN
|
||||||
|
NEW(errstr, ErrmessSize);
|
||||||
|
IF Json.Parse(tree, jsonstr^, errstr^) THEN
|
||||||
|
IF tree IS Json.Obj THEN
|
||||||
|
rootObj := tree(Json.Obj);
|
||||||
|
(* searching for dependencies section *)
|
||||||
|
foundDepSection := FALSE;
|
||||||
|
REPEAT
|
||||||
|
IF rootObj.name^ = vpkSettings.depTypKey THEN
|
||||||
|
foundDepSection := TRUE;
|
||||||
|
END;
|
||||||
|
IF ~foundDepSection THEN rootObj := rootObj.next END
|
||||||
|
UNTIL (rootObj = NIL) OR foundDepSection;
|
||||||
|
IF foundDepSection THEN
|
||||||
|
WHILE rootObj # NIL DO
|
||||||
|
depsValue := rootObj.value;
|
||||||
|
IF depsValue # NIL THEN
|
||||||
|
IF depsValue IS Json.Obj THEN
|
||||||
|
singleDep := depsValue(Json.Obj);
|
||||||
|
WHILE singleDep # NIL DO
|
||||||
|
IF singleDep IS Json.Obj THEN
|
||||||
|
depObj := singleDep(Json.Obj);
|
||||||
|
depName := depObj.name;
|
||||||
|
depVersion := depObj.value(Json.Str).str;
|
||||||
|
IF depstrlist = NIL THEN depstrlist := StringList.Create() END;
|
||||||
|
depstrlist.AppendString(depstrlist, depName^);
|
||||||
|
singleDep := depObj.next; (* Move to the next dependency *)
|
||||||
|
END;
|
||||||
|
END; (* End of inner WHILE loop for dependencies *)
|
||||||
|
RETURN depstrlist.Count;
|
||||||
|
END; (* End of IF depsValue IS Json.Obj *)
|
||||||
|
END;
|
||||||
|
rootObj := rootObj.next; (* Move to the next JSON object *)
|
||||||
|
END; (* End of WHILE rootObj # NIL loop *)
|
||||||
|
ELSE
|
||||||
|
RETURN 0; (* found no dependencies *)
|
||||||
|
END;
|
||||||
|
END; (* End of IF tree IS Json.Obj *)
|
||||||
|
ELSE
|
||||||
|
Out.String("JSON parsing failed: "); Out.String(errstr^); Out.Ln;
|
||||||
|
END; (* End of IF Json.Parse *)
|
||||||
|
ELSE
|
||||||
|
Out.String("local project file not found: "); Out.String(filename); Out.Ln;
|
||||||
|
RETURN -1; (* No such JSON file found *)
|
||||||
|
END; (* End of IF jsonstr # NIL *)
|
||||||
|
RETURN 0;
|
||||||
|
END getDepsFromFile;
|
||||||
|
|
||||||
END vpkJsonDepRetriever.
|
END vpkJsonDepRetriever.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue