123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- <?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>
|