*
This commit is contained in:
@@ -3,3 +3,5 @@
|
|||||||
/Build/.vs
|
/Build/.vs
|
||||||
/DependenciesBuild
|
/DependenciesBuild
|
||||||
/DependenciesSource
|
/DependenciesSource
|
||||||
|
/Downloads
|
||||||
|
/BuildOutput
|
||||||
|
|||||||
+95
-65
@@ -12,7 +12,7 @@ using static System.Runtime.InteropServices.JavaScript.JSType;
|
|||||||
|
|
||||||
|
|
||||||
class Application {
|
class Application {
|
||||||
|
public static bool SkipBuildDeps = false;
|
||||||
static string GetCurrentFileDir([CallerFilePath]string callerFilePath = null) {
|
static string GetCurrentFileDir([CallerFilePath]string callerFilePath = null) {
|
||||||
return Path.GetDirectoryName(callerFilePath);
|
return Path.GetDirectoryName(callerFilePath);
|
||||||
}
|
}
|
||||||
@@ -22,37 +22,45 @@ class Application {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void BuildZLib(string zlib, string installDir) {
|
static string BuildZLib(string zlib, string installDir) {
|
||||||
var buildDir = TempDirectory.New();
|
var installPrefix = Path.Combine(installDir, "zlib");
|
||||||
var cmake = Find.Executable("cmake");
|
if (!SkipBuildDeps) {
|
||||||
var ninja = Find.Executable("ninja");
|
var buildDir = TempDirectory.New();
|
||||||
var configResult = cmake.Run($"-G \"Ninja\" -DCMAKE_INSTALL_PREFIX={Path.Combine(installDir, "zlib")} -DCMAKE_BUILD_TYPE=RELEASE {zlib}", buildDir);
|
var cmake = Find.Executable("cmake");
|
||||||
var buildResult = ninja.Run("", buildDir);
|
var ninja = Find.Executable("ninja");
|
||||||
var installResult = ninja.Run("install", buildDir);
|
var configResult = cmake.Run($"-G \"Ninja\" -DCMAKE_INSTALL_PREFIX={installPrefix} -DCMAKE_BUILD_TYPE=RELEASE {zlib}", buildDir);
|
||||||
|
var buildResult = ninja.Run("", buildDir);
|
||||||
|
var installResult = ninja.Run("install", buildDir);
|
||||||
|
}
|
||||||
|
return installPrefix;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void BuildOpenssl(string source, string installDir) {
|
static string BuildOpenssl(string source, string installDir) {
|
||||||
var tmpDir = TempDirectory.New();
|
|
||||||
|
|
||||||
var perl = Find.Executable("perl");
|
|
||||||
if (perl == null) {
|
|
||||||
throw new Exception("Perl not found but required for OpenSSL build");
|
|
||||||
}
|
|
||||||
|
|
||||||
var nasm = Find.Executable("nasm");
|
|
||||||
if (nasm == null) {
|
|
||||||
throw new Exception("Nasm not found but required for OpenSSL build");
|
|
||||||
}
|
|
||||||
|
|
||||||
var installPrefix = Path.Combine(installDir, "openssl").Replace("\\", "/");
|
var installPrefix = Path.Combine(installDir, "openssl").Replace("\\", "/");
|
||||||
var configFilePath = Path.Combine(source, "Configure").Replace("\\", "/");
|
if (!SkipBuildDeps) {
|
||||||
|
var tmpDir = TempDirectory.New();
|
||||||
|
|
||||||
var configureResult = perl.Run($"{configFilePath} VC-WIN64A enable-capieng --prefix={installPrefix} --openssldir={installPrefix}", tmpDir);
|
var perl = Find.Executable("perl");
|
||||||
|
if (perl == null) {
|
||||||
|
throw new Exception("Perl not found but required for OpenSSL build");
|
||||||
|
}
|
||||||
|
|
||||||
var nmake = Find.Executable("nmake");
|
var nasm = Find.Executable("nasm");
|
||||||
|
if (nasm == null) {
|
||||||
|
throw new Exception("Nasm not found but required for OpenSSL build");
|
||||||
|
}
|
||||||
|
|
||||||
var buildResult = nmake.Run("", tmpDir);
|
|
||||||
var installResult = nmake.Run("install", tmpDir);
|
var configFilePath = Path.Combine(source, "Configure").Replace("\\", "/");
|
||||||
|
|
||||||
|
var configureResult = perl.Run($"{configFilePath} VC-WIN64A enable-capieng --prefix={installPrefix} --openssldir={installPrefix}", tmpDir);
|
||||||
|
|
||||||
|
var nmake = Find.Executable("nmake");
|
||||||
|
|
||||||
|
var buildResult = nmake.Run("", tmpDir);
|
||||||
|
var installResult = nmake.Run("install", tmpDir);
|
||||||
|
}
|
||||||
|
return installPrefix;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -63,43 +71,57 @@ class Application {
|
|||||||
var ninja = Find.Executable("ninja");
|
var ninja = Find.Executable("ninja");
|
||||||
var installPrefix = Path.Combine(installDir, "apr").Replace("\\", "/");
|
var installPrefix = Path.Combine(installDir, "apr").Replace("\\", "/");
|
||||||
|
|
||||||
var configResult = cmake.Run($"-DCMAKE_INSTALL_PREFIX={installPrefix} -G \"Ninja\" -DAPR_INSTALL_PRIVATE_H=ON -DCMAKE_BUILD_TYPE=RELEASE -DAPR_BUILD_STATIC=ON {source}", tmpDir);
|
if (!SkipBuildDeps) {
|
||||||
var buildResult = ninja.Run("", tmpDir);
|
var configResult = cmake.Run($"-DCMAKE_INSTALL_PREFIX={installPrefix} -G \"Ninja\" -DAPR_INSTALL_PRIVATE_H=ON -DCMAKE_BUILD_TYPE=RELEASE -DAPR_BUILD_STATIC=ON {source}", tmpDir);
|
||||||
var installResult = ninja.Run("install", tmpDir);
|
var buildResult = ninja.Run("", tmpDir);
|
||||||
|
var installResult = ninja.Run("install", tmpDir);
|
||||||
|
}
|
||||||
|
|
||||||
return installPrefix;
|
return installPrefix;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void BuildAprUtil(string source, string expatLibDir, string installDir) {
|
static string BuildAprUtil(string source, string expatLibDir, string installDir) {
|
||||||
var tmpDir = TempDirectory.New();
|
|
||||||
|
|
||||||
var cmake = Find.Executable("cmake");
|
|
||||||
var ninja = Find.Executable("ninja");
|
|
||||||
var installPrefix = Path.Combine(installDir, "apr").Replace("\\", "/");
|
var installPrefix = Path.Combine(installDir, "apr").Replace("\\", "/");
|
||||||
|
if (!SkipBuildDeps) {
|
||||||
|
var tmpDir = TempDirectory.New();
|
||||||
|
|
||||||
var expatLibPath = Path.Combine(expatLibDir, "Bin", "libexpat.lib").Replace("\\", "/");
|
var cmake = Find.Executable("cmake");
|
||||||
var expatIncPath = Path.Combine(expatLibDir, "Source", "lib").Replace("\\", "/");
|
var ninja = Find.Executable("ninja");
|
||||||
var opensslPath = Path.Combine(installDir, "openssl").Replace("\\", "/");
|
|
||||||
|
|
||||||
var configResult = cmake.Run($"-DCMAKE_INSTALL_PREFIX={installPrefix} -G \"Ninja\" -DAPR_INSTALL_PRIVATE_H=ON -DCMAKE_BUILD_TYPE=RELEASE -DEXPAT_LIBRARY={expatLibPath} -DEXPAT_INCLUDE_DIR={expatIncPath} -DAPU_HAVE_CRYPTO=ON -DOPENSSL_ROOT_DIR={opensslPath} {source}", tmpDir);
|
|
||||||
var buildResult = ninja.Run("", tmpDir);
|
var expatLibPath = Path.Combine(expatLibDir, "Bin", "libexpat.lib").Replace("\\", "/");
|
||||||
var installResult = ninja.Run("install", tmpDir);
|
var expatIncPath = Path.Combine(expatLibDir, "Source", "lib").Replace("\\", "/");
|
||||||
|
var opensslPath = Path.Combine(installDir, "openssl").Replace("\\", "/");
|
||||||
|
|
||||||
|
var configResult = cmake.Run($"-DCMAKE_INSTALL_PREFIX={installPrefix} -G \"Ninja\" -DAPR_INSTALL_PRIVATE_H=ON -DCMAKE_BUILD_TYPE=RELEASE -DEXPAT_LIBRARY={expatLibPath} -DEXPAT_INCLUDE_DIR={expatIncPath} -DAPU_HAVE_CRYPTO=ON -DOPENSSL_ROOT_DIR={opensslPath} {source}", tmpDir);
|
||||||
|
var buildResult = ninja.Run("", tmpDir);
|
||||||
|
var installResult = ninja.Run("install", tmpDir);
|
||||||
|
}
|
||||||
|
return installPrefix;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void BuildSerf(string source, string installDir) {
|
static string BuildSerf(string source, string installDir) {
|
||||||
var scons = Find.Executable("scons");
|
|
||||||
var installPrefix = Path.Combine(installDir, "serf").Replace("\\", "/");
|
var installPrefix = Path.Combine(installDir, "serf").Replace("\\", "/");
|
||||||
var libinstallPrefix = Path.Combine(installPrefix, "lib").Replace("\\", "/");
|
if (!SkipBuildDeps) {
|
||||||
|
var scons = Find.Executable("scons");
|
||||||
|
|
||||||
var aprPath = Path.Combine(installDir, "apr").Replace("\\", "/");
|
var libinstallPrefix = Path.Combine(installPrefix, "lib").Replace("\\", "/");
|
||||||
var aprUtilPath = Path.Combine(installDir, "apr").Replace("\\", "/");
|
|
||||||
var zlibPath = Path.Combine(installDir, "zlib").Replace("\\", "/");
|
var aprPath = Path.Combine(installDir, "apr").Replace("\\", "/");
|
||||||
var opensslPath = Path.Combine(installDir, "openssl").Replace("\\", "/");
|
var aprUtilPath = Path.Combine(installDir, "apr").Replace("\\", "/");
|
||||||
//
|
var zlibPath = Path.Combine(installDir, "zlib").Replace("\\", "/");
|
||||||
scons.Run($"APR={aprPath} APU={aprUtilPath} ZLIB={zlibPath} OPENSSL={opensslPath} SOURCE_LAYOUT=0 TARGET_ARCH=X64 MSVC_VERSION=2022 PREFIX={installPrefix} LIBDIR={libinstallPrefix}", source);
|
var opensslPath = Path.Combine(installDir, "openssl").Replace("\\", "/");
|
||||||
scons.Run("install", source);
|
//
|
||||||
|
scons.Run($"APR={aprPath} APU={aprUtilPath} ZLIB={zlibPath} OPENSSL={opensslPath} SOURCE_LAYOUT=0 TARGET_ARCH=X64 MSVC_VERSION=2022 PREFIX={installPrefix} LIBDIR={libinstallPrefix}", source);
|
||||||
|
scons.Run("install", source);
|
||||||
|
}
|
||||||
|
return installPrefix;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void FixAprForSerf(string installDir) {
|
static void FixAprForSerf(string installDir) {
|
||||||
|
if (SkipBuildDeps) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
var aprPath = Path.Combine(installDir, "apr");
|
var aprPath = Path.Combine(installDir, "apr");
|
||||||
var incPath = Path.Combine(aprPath, "include");
|
var incPath = Path.Combine(aprPath, "include");
|
||||||
|
|
||||||
@@ -116,6 +138,9 @@ class Application {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void PatchSerf(string serfSource) {
|
static void PatchSerf(string serfSource) {
|
||||||
|
if (SkipBuildDeps) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
var sconstructPath = Path.Combine(serfSource, "SConstruct");
|
var sconstructPath = Path.Combine(serfSource, "SConstruct");
|
||||||
|
|
||||||
|
|
||||||
@@ -136,15 +161,14 @@ class Application {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static string BuildSubversion(string svnSource, string sqlSource, string installDir, string expatDir) {
|
static string BuildSubversion(string svnSource, string sqlSource, string aprInstallDir, string serfInstallDir, string zlibInstallDir, string opensslInstallDir, string expatDir, string svnInstallPrefix) {
|
||||||
var aprPath = Path.Combine(installDir, "apr").Replace("\\", "/");
|
var aprPath = aprInstallDir.Replace("\\", "/");
|
||||||
var serfPath = Path.Combine(installDir, "serf").Replace("\\", "/");
|
var serfPath = serfInstallDir.Replace("\\", "/");
|
||||||
var zlibPath = Path.Combine(installDir, "zlib").Replace("\\", "/");
|
var zlibPath = zlibInstallDir.Replace("\\", "/");
|
||||||
var opensslPath = Path.Combine(installDir, "openssl").Replace("\\", "/");
|
var opensslPath = opensslInstallDir.Replace("\\", "/");
|
||||||
string libPaths = $"{aprPath};{serfPath};{zlibPath}";
|
string libPaths = $"{aprPath};{serfPath};{zlibPath}";
|
||||||
string expatBinDir = Path.Combine(expatDir,"Bin");
|
string expatBinDir = Path.Combine(expatDir,"Bin");
|
||||||
string expatIncDir = Path.Combine(expatDir, "Source/lib");
|
string expatIncDir = Path.Combine(expatDir, "Source/lib");
|
||||||
string installPrefix = Path.Combine(installDir, "subversion");
|
|
||||||
|
|
||||||
List<string> args = new List<string>();
|
List<string> args = new List<string>();
|
||||||
args.Add("-G \"Ninja\"");
|
args.Add("-G \"Ninja\"");
|
||||||
@@ -160,13 +184,17 @@ class Application {
|
|||||||
args.Add($"-DSVN_ENABLE_SVNXX=ON");
|
args.Add($"-DSVN_ENABLE_SVNXX=ON");
|
||||||
args.Add($"-DSVN_ENABLE_NLS=OFF");
|
args.Add($"-DSVN_ENABLE_NLS=OFF");
|
||||||
args.Add($"-DZLIB_USE_STATIC_LIBS=ON");
|
args.Add($"-DZLIB_USE_STATIC_LIBS=ON");
|
||||||
args.Add($"-DCMAKE_INSTALL_PREFIX={installPrefix}");
|
args.Add($"-DCMAKE_INSTALL_PREFIX={svnInstallPrefix}");
|
||||||
args.Add($"{svnSource}");
|
args.Add($"{svnSource}");
|
||||||
|
|
||||||
var argsString = string.Join(" ", args);
|
var argsString = string.Join(" ", args);
|
||||||
|
|
||||||
var cmake = Find.Executable("cmake");
|
var cmake = Find.Executable("cmake");
|
||||||
var ninja = Find.Executable("ninja");
|
var ninja = Find.Executable("ninja");
|
||||||
|
var python = Find.Executable("python");
|
||||||
|
|
||||||
|
var genCmakeResult = python.Run("gen-make.py -t cmake", svnSource);
|
||||||
|
// python gen-make.py -t cmake
|
||||||
|
|
||||||
var tmpDir = TempDirectory.New();
|
var tmpDir = TempDirectory.New();
|
||||||
var configResult = cmake.Run(argsString, tmpDir);
|
var configResult = cmake.Run(argsString, tmpDir);
|
||||||
@@ -174,10 +202,12 @@ class Application {
|
|||||||
var buildResult = ninja.Run("", tmpDir);
|
var buildResult = ninja.Run("", tmpDir);
|
||||||
var installResult = ninja.Run("install", tmpDir);
|
var installResult = ninja.Run("install", tmpDir);
|
||||||
|
|
||||||
return installPrefix;
|
return svnInstallPrefix;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task<int> Main() {
|
public static async Task<int> Main() {
|
||||||
|
SkipBuildDeps = false;
|
||||||
|
|
||||||
VisualStudio.SetupEnvironment(CpuArchitecture.x64);
|
VisualStudio.SetupEnvironment(CpuArchitecture.x64);
|
||||||
|
|
||||||
var projectRootDir = GetProjectRootDir();
|
var projectRootDir = GetProjectRootDir();
|
||||||
@@ -185,8 +215,8 @@ class Application {
|
|||||||
|
|
||||||
var depsSourceDirectory = Path.Combine(projectRootDir, "Downloads");
|
var depsSourceDirectory = Path.Combine(projectRootDir, "Downloads");
|
||||||
Directory.CreateDirectory(depsSourceDirectory);
|
Directory.CreateDirectory(depsSourceDirectory);
|
||||||
var tempDir = TempDirectory.New();
|
|
||||||
var depsBuildDirectory = Path.Combine(tempDir, "DependenciesBuild");
|
var depsBuildDirectory = Path.Combine(projectRootDir, "BuildOutput");
|
||||||
Directory.CreateDirectory(depsBuildDirectory);
|
Directory.CreateDirectory(depsBuildDirectory);
|
||||||
|
|
||||||
var svn = await Dependencies.GetSubversion(projectRootDir);
|
var svn = await Dependencies.GetSubversion(projectRootDir);
|
||||||
@@ -198,18 +228,18 @@ class Application {
|
|||||||
var openssl = await Dependencies.GetOpenssl(depsSourceDirectory);
|
var openssl = await Dependencies.GetOpenssl(depsSourceDirectory);
|
||||||
var expat = await Dependencies.GetExpat(depsSourceDirectory);
|
var expat = await Dependencies.GetExpat(depsSourceDirectory);
|
||||||
|
|
||||||
BuildOpenssl(openssl, depsBuildDirectory);
|
var opensslInstallDir = BuildOpenssl(openssl, depsBuildDirectory);
|
||||||
BuildZLib(zLib, depsBuildDirectory);
|
var zlibInstallDir = BuildZLib(zLib, depsBuildDirectory);
|
||||||
var aprInstallDir = BuildApr(apr, depsBuildDirectory);
|
var aprInstallDir = BuildApr(apr, depsBuildDirectory);
|
||||||
BuildAprUtil(aprUtil, expat, depsBuildDirectory);
|
BuildAprUtil(aprUtil, expat, depsBuildDirectory);
|
||||||
FixAprForSerf(depsBuildDirectory);
|
FixAprForSerf(depsBuildDirectory);
|
||||||
PatchSerf(serf);
|
PatchSerf(serf);
|
||||||
BuildSerf(serf, depsBuildDirectory);
|
var serfInstallDir = BuildSerf(serf, depsBuildDirectory);
|
||||||
var svnInstallDir = BuildSubversion(svn, sqLite, tempDir, expat);
|
var svnInstallDir = BuildSubversion(svn, sqLite, aprInstallDir, serfInstallDir, zlibInstallDir, opensslInstallDir, expat, Path.Combine(depsBuildDirectory, "subversion"));
|
||||||
|
|
||||||
CopyLibraries(Path.Combine(aprInstallDir, "bin"), svnInstallDir);
|
CopyLibraries(Path.Combine(aprInstallDir, "bin"), svnInstallDir);
|
||||||
CopyLibraries(Path.Combine(expat, "Bin"), svnInstallDir);
|
CopyLibraries(Path.Combine(expat, "Bin"), svnInstallDir);
|
||||||
CopyLibraries(Path.Combine(openssl, "bin"), svnInstallDir);
|
CopyLibraries(Path.Combine(opensslInstallDir, "bin"), svnInstallDir);
|
||||||
|
|
||||||
Console.WriteLine($"SVN install directory: {svnInstallDir}");
|
Console.WriteLine($"SVN install directory: {svnInstallDir}");
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user