using Actions; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Build { public static class Dependencies { static readonly string APR_VERSION = "1.7.5"; static readonly string APU_VERSION = "1.6.3"; static readonly string PY3C_VERSION = "1.1"; static readonly string SERF_VERSION = "1.3.10"; static readonly string ZLIB_VERSION = "1.2.8"; static readonly string SQLITE_VERSION = "3.39.4"; static readonly int SQLITE_VERSION_REL_YEAR = 2022; static readonly string APACHE_MIRROR = "https://archive.apache.org/dist"; public static async Task DownloadIfNotExist(string url, string outPath) { string? result = outPath; if (!File.Exists(outPath)) { Console.Write($"Downloading: {url}"); result = await Download.FileFromUrl(url, outPath); Console.WriteLine($" Done"); } else { Console.WriteLine($"Skip downloading: {url}"); } return result; } public static async Task GetZLib(string dir) { var ZLIB = $"zlib-{ZLIB_VERSION}"; var archiveFile = await DownloadIfNotExist($"https://github.com/madler/zlib/archive/refs/tags/v{ZLIB_VERSION}.tar.gz", Path.Combine(dir, $"{ZLIB}.tar.gz")); Archive.UnpackTarGz(archiveFile, dir); return Path.Combine(dir, ZLIB); } public static async Task GetSqlite(string dir) { var SQLITE_VERSION_LIST = SQLITE_VERSION.Split("."); var SQLITE = string.Format("sqlite-amalgamation-{0}{1}{2}00", SQLITE_VERSION_LIST[0], SQLITE_VERSION_LIST[1].PadLeft(2, '0'), SQLITE_VERSION_LIST[2].PadLeft(2, '0')); var archiveFile = await DownloadIfNotExist($"https://www.sqlite.org/{SQLITE_VERSION_REL_YEAR}/{SQLITE}.zip", Path.Combine(dir, $"{SQLITE}.zip")); Archive.UnpackZip(archiveFile, dir); return Path.Combine(dir, $"{SQLITE}"); } public static async Task GetSerf(string dir) { var SERF = $"serf-{SERF_VERSION}"; var archiveFile = await DownloadIfNotExist($"https://archive.apache.org/dist/serf/{SERF}.tar.bz2", Path.Combine(dir, $"{SERF}.tar.bz2")); Archive.UnpackTarBz2(archiveFile, dir); return Path.Combine(dir, $"{SERF}"); } public static async Task GetExpat(string dir) { var archiveFile = await DownloadIfNotExist($"https://github.com/libexpat/libexpat/releases/download/R_2_6_4/expat-win64bin-2.6.4.zip", Path.Combine(dir, $"expat-win64bin-2.6.4.zip")); var resultDir = Path.Combine(dir, "expat-win64bin-2.6.4"); Directory.CreateDirectory(resultDir); Archive.UnpackZip(archiveFile, resultDir); return Path.Combine(dir, resultDir); } public static async Task GetOpenssl(string dir) { var archiveFile = await DownloadIfNotExist($"https://github.com/openssl/openssl/releases/download/openssl-3.2.3/openssl-3.2.3.tar.gz", Path.Combine(dir, $"openssl-3.2.3.tar.gz")); Archive.UnpackTarGz(archiveFile, dir); return Path.Combine(dir, $"openssl-3.2.3"); } public static async Task GetApr(string dir) { var APR = $"apr-{APR_VERSION}"; var archiveFile = await DownloadIfNotExist($"{APACHE_MIRROR}/apr/{APR}.tar.bz2", Path.Combine(dir, $"{APR}.tar.bz2")); Archive.UnpackTarBz2(archiveFile, dir); return Path.Combine(dir, $"{APR}"); } public static async Task GetAprUtil(string dir) { var APR_UTIL = $"apr-util-{APU_VERSION}"; var archiveFile = await DownloadIfNotExist($"{APACHE_MIRROR}/apr/{APR_UTIL}.tar.bz2", Path.Combine(dir, $"{APR_UTIL}.tar.bz2")); Archive.UnpackTarBz2(archiveFile, dir); return Path.Combine(dir, $"{APR_UTIL}"); } public static async Task GetSubversion(string projectRootDir) { return Path.GetFullPath(Path.Combine(projectRootDir, "..", "subversion")); } } }