mirror of
https://github.com/vishapoberon/vipak.git
synced 2026-04-05 20:42:26 +00:00
building almost done.
This commit is contained in:
parent
277e8aa9a5
commit
39503ad331
4 changed files with 96 additions and 5 deletions
|
|
@ -1,5 +1,5 @@
|
||||||
MODULE vpkEnv;
|
MODULE vpkEnv;
|
||||||
IMPORT Files, Platform, Strings, Out, vpkSettings, vpkFiles;
|
IMPORT Files, Platform, Strings, Out, vpkSettings, vpkFiles, StringList;
|
||||||
|
|
||||||
VAR
|
VAR
|
||||||
conf, confDir : ARRAY 256 OF CHAR;
|
conf, confDir : ARRAY 256 OF CHAR;
|
||||||
|
|
@ -12,6 +12,11 @@ BEGIN
|
||||||
END;
|
END;
|
||||||
END getHome;
|
END getHome;
|
||||||
|
|
||||||
|
PROCEDURE getGraphName*(VAR grname: ARRAY OF CHAR);
|
||||||
|
BEGIN
|
||||||
|
COPY (vpkSettings.graphName, grname);
|
||||||
|
END getGraphName;
|
||||||
|
|
||||||
PROCEDURE createIfNotThere*(VAR fileName: ARRAY OF CHAR);
|
PROCEDURE createIfNotThere*(VAR fileName: ARRAY OF CHAR);
|
||||||
BEGIN
|
BEGIN
|
||||||
IF ~vpkFiles.ExistsByName(fileName) THEN
|
IF ~vpkFiles.ExistsByName(fileName) THEN
|
||||||
|
|
@ -22,6 +27,23 @@ BEGIN
|
||||||
|
|
||||||
END createIfNotThere;
|
END createIfNotThere;
|
||||||
|
|
||||||
|
PROCEDURE getSrcRelPath*(VAR depName, path0: ARRAY OF CHAR): StringList.pstring;
|
||||||
|
VAR
|
||||||
|
p: StringList.pstring;
|
||||||
|
len: INTEGER;
|
||||||
|
BEGIN
|
||||||
|
len := 9 + Strings.Length(depName) + Strings.Length(path0);
|
||||||
|
(* 5 chars are ../, /, /, plus a couple of chars *)
|
||||||
|
NEW(p, len);
|
||||||
|
COPY("../", p^);
|
||||||
|
Strings.Append(vpkSettings.vpkDepDir, p^);
|
||||||
|
Strings.Append("/", p^);
|
||||||
|
Strings.Append(depName, p^);
|
||||||
|
Strings.Append("/", p^);
|
||||||
|
Strings.Append(path0, p^);
|
||||||
|
RETURN p;
|
||||||
|
END getSrcRelPath;
|
||||||
|
|
||||||
PROCEDURE mkConfDirPath(home: ARRAY OF CHAR; VAR path: ARRAY OF CHAR);
|
PROCEDURE mkConfDirPath(home: ARRAY OF CHAR; VAR path: ARRAY OF CHAR);
|
||||||
BEGIN
|
BEGIN
|
||||||
confDir := home;
|
confDir := home;
|
||||||
|
|
@ -59,6 +81,16 @@ BEGIN
|
||||||
Strings.Append("/", path);
|
Strings.Append("/", path);
|
||||||
END mkPkgDirPath;
|
END mkPkgDirPath;
|
||||||
|
|
||||||
|
PROCEDURE mkBldDirPath*(VAR prefix, builddir: ARRAY OF CHAR);
|
||||||
|
BEGIN
|
||||||
|
COPY(prefix, builddir);
|
||||||
|
createIfNotThere(builddir);
|
||||||
|
Strings.Append("/", builddir);
|
||||||
|
Strings.Append(vpkSettings.vpkBldDir, builddir);
|
||||||
|
createIfNotThere(builddir);
|
||||||
|
Strings.Append("/", builddir);
|
||||||
|
END mkBldDirPath;
|
||||||
|
|
||||||
PROCEDURE setConfFileName;
|
PROCEDURE setConfFileName;
|
||||||
VAR
|
VAR
|
||||||
home: ARRAY 128 OF CHAR;
|
home: ARRAY 128 OF CHAR;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
MODULE vpkInstaller;
|
MODULE vpkInstaller;
|
||||||
IMPORT Out, StringList, vpkResolver, vpkdepTree, vpkDot, vpkSettings, vpkJsonDepRetriever, vpkSyncer;
|
IMPORT Out, StringList, vpkResolver, vpkdepTree, vpkDot, vpkEnv, vpkJsonDepRetriever, vpkSyncer, Platform;
|
||||||
|
|
||||||
PROCEDURE resolve*(VAR unit: ARRAY OF CHAR): vpkdepTree.TdepTree;
|
PROCEDURE resolve*(VAR unit: ARRAY OF CHAR): vpkdepTree.TdepTree;
|
||||||
VAR
|
VAR
|
||||||
|
|
@ -7,7 +7,9 @@ VAR
|
||||||
lst: StringList.TStringList;
|
lst: StringList.TStringList;
|
||||||
dep: vpkdepTree.Tdep;
|
dep: vpkdepTree.Tdep;
|
||||||
i : LONGINT;
|
i : LONGINT;
|
||||||
|
graphName : ARRAY 32 OF CHAR;
|
||||||
BEGIN
|
BEGIN
|
||||||
|
vpkEnv.getGraphName(graphName);
|
||||||
Out.Ln; Out.String("resolving dependencies..."); Out.Ln;
|
Out.Ln; Out.String("resolving dependencies..."); Out.Ln;
|
||||||
tree := vpkResolver.resolve(unit, vpkJsonDepRetriever.getDeps);
|
tree := vpkResolver.resolve(unit, vpkJsonDepRetriever.getDeps);
|
||||||
Out.String(" done! (:"); Out.Ln; Out.Ln;
|
Out.String(" done! (:"); Out.Ln; Out.Ln;
|
||||||
|
|
@ -15,7 +17,7 @@ BEGIN
|
||||||
Out.String("dependency graph:"); Out.Ln;
|
Out.String("dependency graph:"); Out.Ln;
|
||||||
Out.String("-----------------"); Out.Ln;
|
Out.String("-----------------"); Out.Ln;
|
||||||
StringList.DumpOut(lst);
|
StringList.DumpOut(lst);
|
||||||
lst.Dump(lst, vpkSettings.graphName);
|
lst.Dump(lst, graphName);
|
||||||
Out.String("-----------------"); Out.Ln;
|
Out.String("-----------------"); Out.Ln;
|
||||||
Out.String("(use 'dot -Tpng deps.dot > deps.png' to get the graph image)"); Out.Ln; Out.Ln;
|
Out.String("(use 'dot -Tpng deps.dot > deps.png' to get the graph image)"); Out.Ln; Out.Ln;
|
||||||
Out.String("dependencies will be installed in the following order:"); Out.Ln;
|
Out.String("dependencies will be installed in the following order:"); Out.Ln;
|
||||||
|
|
@ -50,16 +52,44 @@ PROCEDURE build*(VAR package, prefix, tree: ARRAY OF CHAR);
|
||||||
VAR
|
VAR
|
||||||
depTree: vpkdepTree.TdepTree;
|
depTree: vpkdepTree.TdepTree;
|
||||||
dep: vpkdepTree.Tdep;
|
dep: vpkdepTree.Tdep;
|
||||||
i: LONGINT;
|
i, j: LONGINT;
|
||||||
URI: ARRAY 128 OF CHAR;
|
URI: ARRAY 128 OF CHAR;
|
||||||
typ: ARRAY 16 OF CHAR;
|
typ: ARRAY 16 OF CHAR;
|
||||||
|
keys, values: StringList.TStringList;
|
||||||
|
k, v: StringList.pstring;
|
||||||
|
b: BOOLEAN;
|
||||||
|
builddir: ARRAY 512 OF CHAR;
|
||||||
|
cmd, srcPath: StringList.pstring;
|
||||||
|
chdirRes: INTEGER;
|
||||||
BEGIN
|
BEGIN
|
||||||
|
vpkEnv.mkBldDirPath(prefix, builddir);
|
||||||
|
b := FALSE;
|
||||||
depTree := resolve(package);
|
depTree := resolve(package);
|
||||||
i := 0;
|
i := 0;
|
||||||
REPEAT
|
REPEAT
|
||||||
dep := vpkdepTree.Get(depTree, i);
|
dep := vpkdepTree.Get(depTree, i);
|
||||||
vpkJsonDepRetriever.getURIandType(dep, URI, typ);
|
vpkJsonDepRetriever.getURIandType(dep, URI, typ);
|
||||||
vpkSyncer.fetch(dep.name^, URI, typ, prefix);
|
vpkSyncer.fetch(dep.name^, URI, typ, prefix);
|
||||||
|
b := vpkJsonDepRetriever.getBuildInfo(dep, keys, values);
|
||||||
|
IF b THEN
|
||||||
|
j := 0;
|
||||||
|
REPEAT
|
||||||
|
k := keys.GetString(keys, j);
|
||||||
|
v := values.GetString(values, j);
|
||||||
|
Out.Int(j, 0); Out.String(": "); Out.String(k^); Out.Ln;
|
||||||
|
Out.Int(j, 0); Out.String(": "); Out.String(v^); Out.Ln;
|
||||||
|
chdirRes := Platform.Chdir(builddir);
|
||||||
|
IF chdirRes # 0 THEN
|
||||||
|
Out.String("failed to change directory to "); Out.String(builddir); Out.Ln; Out.String("this should never happen."); Out.Ln; HALT(66);
|
||||||
|
END;
|
||||||
|
srcPath := vpkEnv.getSrcRelPath(dep.name^, v^);
|
||||||
|
Out.String(srcPath^); Out.Ln;
|
||||||
|
INC(j)
|
||||||
|
UNTIL j = keys.Count - 1;
|
||||||
|
ELSE
|
||||||
|
Out.String("no build info found for the package: "); Out.String(dep.name^); Out.Ln;
|
||||||
|
HALT(67);
|
||||||
|
END;
|
||||||
INC(i);
|
INC(i);
|
||||||
UNTIL i = depTree.Count;
|
UNTIL i = depTree.Count;
|
||||||
END build;
|
END build;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,33 @@
|
||||||
MODULE vpkJsonDepRetriever;
|
MODULE vpkJsonDepRetriever;
|
||||||
IMPORT Out, StringList, strutils, vpkJsonParser, vpkStorage, vpkSettings, vpkdepTree;
|
IMPORT Out, StringList, strutils, vpkJsonParser, vpkStorage, vpkSettings, vpkdepTree;
|
||||||
|
|
||||||
|
PROCEDURE getBuildInfo*(VAR d: vpkdepTree.Tdep; VAR k, v: StringList.TStringList): BOOLEAN;
|
||||||
|
VAR
|
||||||
|
p: strutils.pstring;
|
||||||
|
jsonRecord, build : vpkJsonParser.JsonTypePointer;
|
||||||
|
keys, values: StringList.TStringList;
|
||||||
|
b: BOOLEAN;
|
||||||
|
BEGIN
|
||||||
|
b := FALSE;
|
||||||
|
p := NIL;
|
||||||
|
vpkStorage.json2pstring(d.name^, p);
|
||||||
|
IF p # NIL THEN
|
||||||
|
jsonRecord := vpkJsonParser.Create(p^);
|
||||||
|
build := jsonRecord.GetNonTerminal(jsonRecord, vpkSettings.bldType);
|
||||||
|
IF build # NIL THEN
|
||||||
|
keys := NIL; values := NIL;
|
||||||
|
build.GetTerminalKeys(build, keys);
|
||||||
|
build.GetTerminalValues(build, values);
|
||||||
|
k := keys; v := values;
|
||||||
|
RETURN TRUE
|
||||||
|
ELSE
|
||||||
|
RETURN FALSE
|
||||||
|
END
|
||||||
|
ELSE
|
||||||
|
RETURN FALSE
|
||||||
|
END;
|
||||||
|
END getBuildInfo;
|
||||||
|
|
||||||
PROCEDURE getURIandType*(VAR d: vpkdepTree.Tdep; VAR URI: ARRAY OF CHAR; VAR type: ARRAY OF CHAR);
|
PROCEDURE getURIandType*(VAR d: vpkdepTree.Tdep; VAR URI: ARRAY OF CHAR; VAR type: ARRAY OF CHAR);
|
||||||
VAR
|
VAR
|
||||||
jsonRecord, remote: vpkJsonParser.JsonTypePointer;
|
jsonRecord, remote: vpkJsonParser.JsonTypePointer;
|
||||||
|
|
@ -21,7 +48,7 @@ BEGIN
|
||||||
i := 0;
|
i := 0;
|
||||||
REPEAT
|
REPEAT
|
||||||
k := keys.GetString(keys, i);
|
k := keys.GetString(keys, i);
|
||||||
v := keys.GetString(values, i);
|
v := values.GetString(values, i);
|
||||||
IF k^ = vpkSettings.rmtTypKey THEN COPY(v^, type) END;
|
IF k^ = vpkSettings.rmtTypKey THEN COPY(v^, type) END;
|
||||||
IF k^ = vpkSettings.rmtTreeKey THEN COPY(v^, URI) END;
|
IF k^ = vpkSettings.rmtTreeKey THEN COPY(v^, URI) END;
|
||||||
INC(i);
|
INC(i);
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ CONST
|
||||||
vpkTreeDir* = "vipackTree";
|
vpkTreeDir* = "vipackTree";
|
||||||
vpkPkgDir* = "vpkLocal";
|
vpkPkgDir* = "vpkLocal";
|
||||||
vpkDepDir* = "deps";
|
vpkDepDir* = "deps";
|
||||||
|
vpkBldDir* = "build";
|
||||||
|
|
||||||
graphName* = "deps.dot";
|
graphName* = "deps.dot";
|
||||||
|
|
||||||
|
|
@ -16,6 +17,7 @@ CONST
|
||||||
rmtTypHttpsVal* = "https";
|
rmtTypHttpsVal* = "https";
|
||||||
rmtTypGemiVal* = "gemini";
|
rmtTypGemiVal* = "gemini";
|
||||||
rmtTreeKey* = "path";
|
rmtTreeKey* = "path";
|
||||||
|
bldType* = "Build";
|
||||||
defTreeVal* = "https://github.com/vishaps/vipackTree";
|
defTreeVal* = "https://github.com/vishaps/vipackTree";
|
||||||
confTreeVal* = defTreeVal;
|
confTreeVal* = defTreeVal;
|
||||||
defTypVal* = rmtTypGitVal;
|
defTypVal* = rmtTypGitVal;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue