Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohan Lorensson <lateralusx.github@gmail.com>2019-11-04 10:55:36 +0300
committerGitHub <noreply@github.com>2019-11-04 10:55:36 +0300
commitc0e237b7340a58384e191f7bdc6d954b9585330b (patch)
treeda558696ec6e810199c945f7bd230ffac62972bd /msvc/mono.winconfig.targets
parent137ffe8b7c18d8a153f9311a8b30b53139ee2073 (diff)
Mono NetCore Windows only build/test. (#17646)
Support for Windows Mono NetCore build/test wihtout any need for cygwin/wsl/automake just MSBuild and MSVC. Windows build support mirror technologies used by coreclr/aracade builds msbuild + powershell. Windows only Mono NetCore build, makes a port of existing build.sh and Makefile, implementing a build.ps1 and build.targets. So far full build support + execution of corefx test suite is implemented. Other make file rules can be added when needed. MSVC build runtime seems to hits a couple of additional test failures in corefx test suite that needs to be investigated further. Building NetCore Mono on Windows can now be done without cygwin or wsl. Build depends on regular VS install (or build tools), if xunit summary is requested, python needs to be installed.
Diffstat (limited to 'msvc/mono.winconfig.targets')
-rw-r--r--msvc/mono.winconfig.targets161
1 files changed, 92 insertions, 69 deletions
diff --git a/msvc/mono.winconfig.targets b/msvc/mono.winconfig.targets
index 6eba1cf3842..d8e39ca7ad2 100644
--- a/msvc/mono.winconfig.targets
+++ b/msvc/mono.winconfig.targets
@@ -1,9 +1,70 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <UsingTask TaskName="GetVersionsFromConfigureAC" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
+ <ParameterGroup>
+ <ConfigFileRoot ParameterType="System.String" Required="true" />
+ <MonoVersion ParameterType="System.String" Output="true" />
+ <MonoCorlibVersion ParameterType="System.String" Output="true" />
+ </ParameterGroup>
+ <Task>
+ <Using Namespace="System" />
+ <Using Namespace="System.Text.RegularExpressions" />
+ <Using Namespace="System.IO" />
+ <Code Type="Fragment" Language="cs">
+ <![CDATA[
+ MonoVersion = null;
+ MonoCorlibVersion = null;
+
+ string configureACFile = Path.Combine (ConfigFileRoot, @"configure.ac");
+
+ if (File.Exists (configureACFile))
+ {
+ // These are both fairly arbitrary strings.
+ var monoVersionRegEx = new Regex (@"^AC_INIT\s*\(\s*mono,\s*\[?\s*([^\],\s]+)");
+ var monoCorlibVersionRegEx = new Regex (@"^MONO_CORLIB_VERSION\s*=\s*(\S+)");
+ using (StreamReader reader = new StreamReader (configureACFile))
+ {
+ string line;
+ while ((line = reader.ReadLine ()) != null && (MonoVersion == null || MonoCorlibVersion == null))
+ {
+ var monoVersionMatch = monoVersionRegEx.Match (line);
+ if (monoVersionMatch.Success)
+ {
+ if (MonoVersion != null)
+ {
+ Log.LogError("duplicate MONO_INIT in {0}", configureACFile);
+ }
+ MonoVersion = monoVersionMatch.Groups[1].Value;
+ Log.LogMessage ("{0}:AC_INIT:MONO_VERSION=\"{1}\"", configureACFile, MonoVersion);
+ continue;
+ }
+
+ var monoCorlibVersionMatch = monoCorlibVersionRegEx.Match (line);
+ if (monoCorlibVersionMatch.Success)
+ {
+ if (MonoCorlibVersion != null)
+ {
+ // This is misleading. The loop stops when both found, so duplicates usually not noticed.
+ Log.LogError("duplicate MONO_CORLIB_VERSION in {0}", configureACFile);
+ }
+ MonoCorlibVersion = monoCorlibVersionMatch.Groups[1].Value;
+ Log.LogMessage ("{0}:MONO_CORLIB_VERSION=\"{1}\"", configureACFile, MonoCorlibVersion);
+ continue;
+ }
+ }
+ }
+ }
+ ]]>
+ </Code>
+ </Task>
+ </UsingTask>
+
<UsingTask TaskName="WinConfigSetup" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<ParameterGroup>
<ConfigFileRoot ParameterType="System.String" Required="true" />
+ <MonoVersion ParameterType="System.String" Required="true" />
+ <MonoCorlibVersion ParameterType="System.String" Required="true" />
<DisableDefines ParameterType="System.String" Required="false" />
<EnableDefines ParameterType="System.String" Required="false" />
<HaveDefines ParameterType="System.String" Required="false" />
@@ -22,53 +83,6 @@
public class _WinConfigSetup : Task
{
- bool GetVersionsFromConfigureAC (string configureACFile, out string monoVersion, out string monoCorlibVersion)
- {
- bool result = true;
- monoVersion = null;
- monoCorlibVersion = null;
- if (File.Exists (configureACFile))
- {
- // These are both fairly arbitrary strings.
- var monoVersionRegEx = new Regex (@"^AC_INIT\s*\(\s*mono,\s*\[?\s*([^\],\s]+)");
- var monoCorlibVersionRegEx = new Regex (@"^MONO_CORLIB_VERSION\s*=\s*(\S+)");
- using (StreamReader reader = new StreamReader (configureACFile))
- {
- string line;
- while ((line = reader.ReadLine ()) != null && (monoVersion == null || monoCorlibVersion == null))
- {
- var monoVersionMatch = monoVersionRegEx.Match (line);
- if (monoVersionMatch.Success)
- {
- if (monoVersion != null)
- {
- Log.LogError("duplicate MONO_INIT in {0}", configureACFile);
- result = false;
- }
- monoVersion = monoVersionMatch.Groups[1].Value;
- Log.LogMessage ("{0}:AC_INIT:MONO_VERSION=\"{1}\"", configureACFile, monoVersion);
- continue;
- }
-
- var monoCorlibVersionMatch = monoCorlibVersionRegEx.Match (line);
- if (monoCorlibVersionMatch.Success)
- {
- if (monoCorlibVersion != null)
- {
- // This is misleading. The loop stops when both found, so duplicates usually not noticed.
- Log.LogError("duplicate MONO_CORLIB_VERSION in {0}", configureACFile);
- result = false;
- }
- monoCorlibVersion = monoCorlibVersionMatch.Groups[1].Value;
- Log.LogMessage ("{0}:MONO_CORLIB_VERSION=\"{1}\"", configureACFile, monoCorlibVersion);
- continue;
- }
- }
- }
- }
- return result;
- }
-
List<string> GetConfigFeatures (string path, string featuresRegex)
{
var features = new List<string> ();
@@ -282,43 +296,45 @@
}
public string ConfigFileRoot { get; set; }
+ public string MonoVersion { get; set; }
+ public string MonoCorlibVersion { get; set; }
public string DisableDefines { get; set; }
public string EnableDefines { get; set; }
public string HaveDefines { get; set; }
public override bool Execute ()
{
- string configureACFile = Path.Combine (ConfigFileRoot, @"configure.ac");
- string configFile = Path.Combine (ConfigFileRoot, @"config.h");
- string cygConfigFile = Path.Combine (ConfigFileRoot, @"cygconfig.h");
- string winConfigFile = Path.Combine (ConfigFileRoot, @"winconfig.h");
- string versionFile = Path.Combine (ConfigFileRoot, @"mono\mini\version.h");
-
- Log.LogMessage (MessageImportance.High, "Setting up Mono configuration headers...");
-
- BackupConfigFile (configFile, cygConfigFile);
-
- string monoVersion = null;
- string monoCorlibVersion = null;
- if (!GetVersionsFromConfigureAC (configureACFile, out monoVersion, out monoCorlibVersion))
+ if (String.IsNullOrEmpty (ConfigFileRoot))
+ {
+ Log.LogError("Missing ConfigFileRoot");
return false;
+ }
- if (monoVersion == null)
+ if (String.IsNullOrEmpty (MonoVersion))
{
- Log.LogError("failed to parse version from AC_INIT in {0}", configureACFile);
+ Log.LogError("Missing MonoVersion");
return false;
}
- if (monoCorlibVersion == null)
+ if (String.IsNullOrEmpty (MonoCorlibVersion))
{
- Log.LogError("failed to parse MONO_CORLIB_VERSION from {0}", configureACFile);
+ Log.LogError("Missing MonoCorlibVersion");
return false;
}
+ string configFile = Path.Combine (ConfigFileRoot, @"config.h");
+ string cygConfigFile = Path.Combine (ConfigFileRoot, @"cygconfig.h");
+ string winConfigFile = Path.Combine (ConfigFileRoot, @"winconfig.h");
+ string versionFile = Path.Combine (ConfigFileRoot, @"mono\mini\version.h");
+
+ Log.LogMessage (MessageImportance.High, "Setting up Mono configuration headers...");
+
+ BackupConfigFile (configFile, cygConfigFile);
+
var disableDefines = GetDisabledConfigFeatures (cygConfigFile);
var enableDefines = GetEnabledConfigFeatures (cygConfigFile, EnableDefines);
var haveDefines = (HaveDefines != null) ? HaveDefines.Split (';') : null;
- CreateConfigUsingTemplate (winConfigFile, configFile, disableDefines, enableDefines, haveDefines, monoVersion, monoCorlibVersion);
+ CreateConfigUsingTemplate (winConfigFile, configFile, disableDefines, enableDefines, haveDefines, MonoVersion, MonoCorlibVersion);
CreateVersionFile (versionFile);
@@ -333,10 +349,17 @@
</UsingTask>
<Target Name="RunWinConfigSetup">
- <WinConfigSetup ConfigFileRoot="$(MSBuildThisFileDirectory)..\"
- DisableDefines=""
- EnableDefines=""
- HaveDefines=""/>
+ <GetVersionsFromConfigureAC ConfigFileRoot="$(MSBuildThisFileDirectory)..\">
+ <Output TaskParameter="MonoVersion" PropertyName="_MonoVersion" />
+ <Output TaskParameter="MonoCorlibVersion" PropertyName="_MonoCorlibVersion" />
+ </GetVersionsFromConfigureAC>
+
+ <WinConfigSetup ConfigFileRoot="$(MSBuildThisFileDirectory)..\"
+ MonoVersion="$(_MonoVersion)"
+ MonoCorlibVersion="$(_MonoCorlibVersion)"
+ DisableDefines=""
+ EnableDefines=""
+ HaveDefines=""/>
</Target>
</Project>