freeswitch/w32/switch_version.props

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>