GtkSharp/CakeScripts/GAssembly.cake

81 lines
2.4 KiB
Plaintext
Raw Normal View History

2017-10-22 23:25:13 +00:00
using System;
using P = System.IO.Path;
using F = System.IO.File;
2017-10-22 23:25:13 +00:00
public class GAssembly
{
private ICakeContext Cake;
2017-10-22 23:25:13 +00:00
public bool Init { get; private set; }
public string Name { get; private set; }
public string Dir { get; private set; }
public string GDir { get; private set; }
public string Csproj { get; private set; }
public string RawApi { get; private set; }
public string Metadata { get; private set; }
public string[] Deps { get; set; }
2017-10-22 23:25:13 +00:00
public string ExtraArgs { get; set; }
public GAssembly(string name)
{
Cake = Settings.Cake;
Deps = new string[0];
2017-10-22 23:25:13 +00:00
Name = name;
Dir = P.Combine("Source", "Libs", name);
GDir = P.Combine(Dir, "Generated");
var temppath = P.Combine(Dir, name);
Csproj = temppath + ".csproj";
2017-11-13 18:36:15 +00:00
RawApi = temppath + "-api.xml";
2017-10-22 23:25:13 +00:00
Metadata = temppath + ".metadata";
}
public void Prepare()
{
Cake.CreateDirectory(GDir);
2017-11-13 18:36:15 +00:00
var tempapi = P.Combine(GDir, Name + "-api.xml");
Cake.CopyFile(RawApi, tempapi);
2017-11-13 18:36:15 +00:00
// Metadata file found, time to generate some stuff!!!
if (Cake.FileExists(Metadata))
2017-10-22 23:25:13 +00:00
{
// Fixup API file
var symfile = P.Combine(Dir, Name + "-symbols.xml");
Cake.DotNetCoreExecute("BuildOutput/Tools/GapiFixup.dll",
"--metadata=" + Metadata + " " + "--api=" + tempapi +
(Cake.FileExists(symfile) ? " --symbols=" + symfile : string.Empty)
);
2017-10-22 23:25:13 +00:00
var extraargs = ExtraArgs + " ";
2017-10-22 23:25:13 +00:00
// Locate APIs to include
foreach(var dep in Deps)
2017-10-22 23:25:13 +00:00
{
2017-11-13 18:36:15 +00:00
var ipath = P.Combine("Source", "Libs", dep, "Generated", dep + "-api.xml");
2017-10-22 23:25:13 +00:00
if (Cake.FileExists(ipath))
extraargs += " --include=" + ipath + " ";
2017-10-22 23:25:13 +00:00
}
// Generate code
Cake.DotNetCoreExecute("BuildOutput/Tools/GapiCodegen.dll",
2017-10-22 23:25:13 +00:00
"--outdir=" + GDir + " " +
2018-01-18 17:01:04 +00:00
"--schema=Source/Libs/Shared/Gapi.xsd " +
extraargs + " " +
2017-10-22 23:25:13 +00:00
"--assembly-name=" + Name + " " +
"--generate=" + tempapi
);
}
Init = true;
}
public void Clean()
{
if (Cake.DirectoryExists(GDir))
Cake.DeleteDirectory(GDir, new DeleteDirectorySettings { Recursive = true, Force = true });
2017-10-22 23:25:13 +00:00
}
}