var name = "Tesses.CrossLang.ShellPackage-1.0.0.0-prod.crvm"; func main(args) { create_archive(); if(args.Count > 1 && args[1] == "install") { install(); } } func install() { var d = Env.CrossLangConfig; FS.Local.CreateDirectory(d); var sdfs = FS.SubdirFilesystem(FS.Local, d); var strm = FS.Local.OpenFile(name,"rb"); FS.ExtractArchive(strm, sdfs); sdfs.Close(); strm.Close(); } func create_archive() { var tmpFS = FS.SubdirFilesystem(FS.Local,"crosslang_shell_archive_maker/tmp"); func copyFile(src,dest) { if(!FS.Local.FileExists(src)) return; var srcF = FS.Local.OpenFile(src,"rb"); var destF = tmpFS.OpenFile(dest,"wb"); srcF.CopyTo(destF); srcF.Close(); destF.Close(); } var r = Path.Root(); var shell = r / "Shell"; tmpFS.CreateDirectory(shell); copyFile("Tesses.CrossLang.Shell/bin/Tesses.CrossLang.Args-1.0.0.0-prod.crvm", shell / "Tesses.CrossLang.Args-1.0.0.0-prod.crvm"); copyFile("Tesses.CrossLang.Shell/bin/Tesses.CrossLang.BuildEssentials-1.0.0.0-prod.crvm", shell / "Tesses.CrossLang.BuildEssentials-1.0.0.0-prod.crvm"); copyFile("Tesses.CrossLang.Shell/bin/Tesses.CrossLang.Shell-1.0.0.0-prod.crvm", shell / "Shell.crvm"); var templates = r / "Templates"; tmpFS.CreateDirectory(templates); copyFile("Templates/compiletool/bin/Tesses.CrossLang.Template.CompileTool-1.0.0.0-prod.crvm", templates / "compiletool.crvm"); copyFile("Templates/console/bin/Tesses.CrossLang.Template.Console-1.0.0.0-prod.crvm", templates / "console.crvm"); copyFile("Templates/lib/bin/Tesses.CrossLang.Template.Library-1.0.0.0-prod.crvm", templates / "lib.crvm"); copyFile("Templates/template/bin/Tesses.CrossLang.Template.Template-1.0.0.0-prod.crvm", templates / "template.crvm"); copyFile("Templates/web/bin/Tesses.CrossLang.Template.Website-1.0.0.0-prod.crvm", templates / "web.crvm"); copyFile("Templates/tool/bin/Tesses.CrossLang.Template.Tool-1.0.0.0-prod.crvm", templates / "tool.crvm"); var packageCache = r / "PackageCache"; tmpFS.CreateDirectory(packageCache); tmpFS.CreateDirectory(packageCache / "Tesses.CrossLang.Args"); tmpFS.CreateDirectory(packageCache / "Tesses.CrossLang.BuildEssentials"); tmpFS.CreateDirectory(packageCache / "Tesses.CrossLang.Markup"); copyFile("Tesses.CrossLang.Args/bin/Tesses.CrossLang.Args-1.0.0.0-prod.crvm", packageCache / "Tesses.CrossLang.Args" / "1.0.0.0-prod"); copyFile("Tesses.CrossLang.BuildEssentials/bin/Tesses.CrossLang.BuildEssentials-1.0.0.0-prod.crvm", packageCache / "Tesses.CrossLang.BuildEssentials" / "1.0.0.0-prod"); copyFile("Tesses.CrossLang.Markup/bin/Tesses.CrossLang.Markup-1.0.0.0-prod.crvm", packageCache / "Tesses.CrossLang.Markup" / "1.0.0.0-prod"); var installer = FS.Local.OpenFile(name, "wb"); var ifo = { type = "archive", maintainer = "Mike Nolan", repo = "https://onedev.site.tesses.net/CrossLang/CrossLangExtras", homepage = "https://crosslang.tesseslanguage.com/" }; FS.CreateArchive(tmpFS,installer, "Tesses.CrossLang.ShellPackage","1.0.0.0-prod", Json.Encode(ifo)); installer.Close(); tmpFS.Close(); FS.Local.DeleteDirectroyRecurse("crosslang_shell_archive_maker/tmp"); }