forked from Mirrors/freeswitch
133 lines
5.0 KiB
XML
133 lines
5.0 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<Project DefaultTargets="Build" InitialTargets="GitVersion" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
<PropertyGroup>
|
|
<GitSkipCache>true</GitSkipCache>
|
|
</PropertyGroup>
|
|
<ImportGroup Label="PropertySheets">
|
|
<Import Project="basedir.props" Condition=" '$(BaseDirImported)' == ''"/>
|
|
<Import Project="Setup\GitInfo\GitInfo.targets" />
|
|
</ImportGroup>
|
|
|
|
<PropertyGroup>
|
|
<switch_versionPropsImported>true</switch_versionPropsImported>
|
|
</PropertyGroup>
|
|
|
|
<UsingTask TaskName="SwitchVersionTask"
|
|
TaskFactory="CodeTaskFactory"
|
|
AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
|
|
<ParameterGroup>
|
|
<commits Required="true" />
|
|
<revision Required="true" />
|
|
</ParameterGroup>
|
|
<Task>
|
|
<Reference Include="Microsoft.Build" />
|
|
<Reference Include="Microsoft.Build.Framework" />
|
|
<Code Type="Class" Language="cs">
|
|
<![CDATA[
|
|
using System;
|
|
using System.IO;
|
|
using System.Collections.Generic;
|
|
using System.Text.RegularExpressions;
|
|
using Microsoft.Build.Framework;
|
|
|
|
public class SwitchVersionTask : Microsoft.Build.Utilities.Task
|
|
{
|
|
[Required]
|
|
public string revision { get; set; }
|
|
public string commits { get; set; }
|
|
|
|
private string basedir;
|
|
private string TemplatePath;
|
|
private string DestinationPath;
|
|
|
|
public override bool Execute()
|
|
{
|
|
basedir = Path.GetFullPath(@"$(BaseDir)");
|
|
|
|
int commit_count = 0;
|
|
Int32.TryParse(commits, out commit_count);
|
|
|
|
Log.LogMessage(MessageImportance.High,
|
|
"Parsing FreeSWITCH version.");
|
|
|
|
string ConfigureAC = File.ReadAllText(@"$(BaseDir)configure.ac");
|
|
string pattern = @"AC_SUBST\((SWITCH_VERSION_[A-Z_]+),.*\[(.*)\]\)";
|
|
|
|
Dictionary<string, string> v = new Dictionary<string, string>();
|
|
|
|
string year = DateTime.UtcNow.Year.ToString();
|
|
v.Add("SWITCH_VERSION_YEAR", year);
|
|
|
|
foreach (Match m in Regex.Matches(ConfigureAC, pattern)) {
|
|
string value = m.Groups[2].Value.Trim();
|
|
if (value.Contains("-")) {
|
|
string[] tokens = value.Split('-');
|
|
value = tokens[0];
|
|
}
|
|
var name = m.Groups[1].Value.Trim();
|
|
value = value.Trim();
|
|
|
|
if (name.StartsWith("SWITCH_VERSION_REVISION")) {
|
|
if (string.IsNullOrWhiteSpace(value)) {
|
|
value = revision;
|
|
}
|
|
|
|
if (name != "SWITCH_VERSION_REVISION_HUMAN") {
|
|
value = "~" + value;
|
|
|
|
if (commit_count > 0) {
|
|
value = "-dev-"+ commits + value;
|
|
} else {
|
|
value = "-release" + value;
|
|
}
|
|
}
|
|
}
|
|
v.Add(name, value);
|
|
Log.LogMessage(MessageImportance.High, name + " = '" + value + "'");
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
Log.LogMessage(MessageImportance.High,
|
|
"Generating switch_version.h");
|
|
|
|
TemplatePath = basedir + @"src\include\switch_version.h.template";
|
|
DestinationPath = basedir + @"src\include\switch_version.h";
|
|
|
|
string template = File.ReadAllText(TemplatePath);
|
|
foreach (var version_bit in v) {
|
|
template = template.Replace("@" + version_bit.Key + "@", version_bit.Value);
|
|
}
|
|
|
|
File.WriteAllText(DestinationPath, template);
|
|
|
|
//---------------------------------------------------------
|
|
Log.LogMessage(MessageImportance.High,
|
|
"Generating switch_version.inc");
|
|
|
|
TemplatePath = @"$(ProjectDir)\switch_version.inc.template";
|
|
DestinationPath = @"$(ProjectDir)\switch_version.inc";
|
|
|
|
template = File.ReadAllText(TemplatePath);
|
|
foreach (var version_bit in v) {
|
|
template = template.Replace("@" + version_bit.Key + "@", version_bit.Value);
|
|
}
|
|
|
|
File.WriteAllText(DestinationPath, template);
|
|
|
|
//---------------------------------------------------------
|
|
|
|
return true;
|
|
}
|
|
}
|
|
]]>
|
|
</Code>
|
|
</Task>
|
|
</UsingTask>
|
|
|
|
<Target Name="SwitchVersionTarget" BeforeTargets="CustomBuild;Build">
|
|
<SwitchVersionTask commits="$(GitCommits)" revision="$(GitCommit)">
|
|
</SwitchVersionTask>
|
|
</Target>
|
|
|
|
</Project>
|