Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Copyright (C) 2014 Xamarin. All rights reserved.
</PropertyGroup>

<Target Name="_RegisterMdbFilesWithFileWrites" BeforeTargets="IncrementalClean">
<CreateItem Include="$(OutDir)*.dll.mdb;$(MonoAndroidIntermediateAssemblyDir)*.dll.mdb">
<CreateItem Include="$(OutDir)*.dll.mdb;$(MonoAndroidIntermediateAssemblyDir)*.dll.mdb;$(MonoAndroidLinkerInputDir)*.dll.mdb">
<Output TaskParameter="Include" ItemName="_FilesToRegister" />
</CreateItem>
<CreateItem Include="$([System.IO.Path]::GetFullPath('%(_FilesToRegister.Identity)'))"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ public class GenerateResourceDesigner : Task
[Required]
public bool UseManagedResourceGenerator { get; set; }

[Required]
public bool DesignTimeBuild { get; set; }

private Dictionary<string, string> resource_fixup = new Dictionary<string, string> (StringComparer.OrdinalIgnoreCase);

public override bool Execute ()
Expand Down Expand Up @@ -121,7 +124,13 @@ public override bool Execute ()
var suffix = assemblyName.ItemSpec.EndsWith (".dll") ? String.Empty : ".dll";
string hintPath = assemblyName.GetMetadata ("HintPath").Replace (Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar);
string fileName = assemblyName.ItemSpec + suffix;
resolver.Load (Path.GetFullPath (assemblyName.ItemSpec));
string fullPath = Path.GetFullPath (assemblyName.ItemSpec);
// Skip non existing files in DesignTimeBuild
if (!File.Exists (fullPath) && DesignTimeBuild) {
Log.LogDebugMessage ("Skipping non existant dependancy '{0}' due to design time build.", fullPath);
continue;
}
resolver.Load (fullPath);
if (!String.IsNullOrEmpty (hintPath) && !File.Exists (hintPath)) // ignore invalid HintPath
hintPath = null;
string assemblyPath = String.IsNullOrEmpty (hintPath) ? fileName : hintPath;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -397,10 +397,17 @@ public override bool Execute ()
using (var resolver = new DirectoryAssemblyResolver (this.CreateTaskLogger (), loadDebugSymbols: false)) {
foreach (var assemblyItem in Assemblies) {
string fullPath = Path.GetFullPath (assemblyItem.ItemSpec);
if (DesignTimeBuild && !File.Exists (fullPath)) {
LogWarning ("Failed to load '{0}'. Check the file exists or the project has been built.", fullPath);
continue;
}
if (assemblies.Contains (fullPath)) {
LogDebugMessage (" Skip assembly: {0}, it was already processed", fullPath);
continue;
}
// don't try to even load mscorlib it will fail.
if (string.Compare (Path.GetFileNameWithoutExtension (fullPath), "mscorlib", StringComparison.OrdinalIgnoreCase) == 0)
continue;
assemblies.Add (fullPath);
resolver.Load (fullPath);
// Append source file name (without the Xamarin. prefix or extension) to the base folder
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,10 @@ public class ResolveLibraryProjectImports : Task
[Required]
public string AssemblyIdentityMapFile { get; set; }

public string CacheFile { get; set;}
public string CacheFile { get; set; }

[Required]
public bool DesignTimeBuild { get; set; }

[Output]
public string [] Jars { get; set; }
Expand Down Expand Up @@ -207,6 +210,11 @@ void Extract (
continue;
}

if (!File.Exists (assemblyPath) && DesignTimeBuild) {
Log.LogDebugMessage ("Skipping non existant dependancy '{0}' due to design time build.", assemblyPath);
continue;
}

Log.LogDebugMessage ("Refreshing {0}", assemblyPath);

Directory.CreateDirectory (importsDir);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,10 @@ public void RepetitiveBuild ()
b.ThrowOnBuildFailure = false;
Assert.IsTrue (b.Build (proj), "first build failed");
Assert.IsTrue (b.Build (proj), "second build failed");
Assert.IsTrue (b.LastBuildOutput.Contains ("Skipping target \"_Sign\" because"), "failed to skip some build");
Assert.IsTrue (b.Output.IsTargetSkipped ("_Sign"), "failed to skip some build");
proj.AndroidResources.First ().Timestamp = null; // means "always build"
Assert.IsTrue (b.Build (proj), "third build failed");
Assert.IsFalse (b.LastBuildOutput.Contains ("Skipping target \"_Sign\" because"), "incorrectly skipped some build");
Assert.IsFalse (b.Output.IsTargetSkipped ("_Sign"), "incorrectly skipped some build");
}
}

Expand Down Expand Up @@ -74,15 +74,18 @@ public void DesignTimeBuild ([Values(false, true)] bool isRelease, [Values (fals
},
};
proj.SetProperty ("AndroidUseManagedDesignTimeResourceGenerator", useManagedParser.ToString ());
if (useManagedParser)
proj.SetProperty ("BuildingInsideVisualStudio", "True");
using (var l = CreateDllBuilder (Path.Combine (path, lib.ProjectName), false, false)) {
using (var b = CreateApkBuilder (Path.Combine (path, proj.ProjectName), false, false)) {
l.Verbosity = LoggerVerbosity.Diagnostic;
l.Target = "Build";
Assert.IsTrue(l.Clean(lib), "Lib1 should have cleaned successfully");
Assert.IsTrue (l.Build (lib), "Lib1 should have built successfully");
b.Verbosity = LoggerVerbosity.Diagnostic;
b.ThrowOnBuildFailure = false;
Assert.IsTrue (b.Clean(proj), "App should have cleaned successfully");
Assert.IsTrue (b.UpdateAndroidResources (proj, doNotCleanupOnUpdate: true, parameters: new string [] { "DesignTimeBuild=true" }, environmentVariables: envVar),
b.Target = "Compile";
Assert.IsTrue (b.Build (proj, doNotCleanupOnUpdate: true, parameters: new string [] { "DesignTimeBuild=true" }, environmentVariables: envVar),
"first build failed");
Assert.AreEqual (!useManagedParser, b.LastBuildOutput.Contains ("Skipping download of "),
"failed to skip the downloading of files.");
Expand Down Expand Up @@ -156,7 +159,7 @@ public void MoveResource ()
image.Timestamp = DateTimeOffset.UtcNow.AddMinutes (1);
Assert.IsTrue (b.Build (proj), "Second build should have succeeded.");
Assert.IsFalse (File.Exists (Path.Combine (b.ProjectDirectory, oldpath)), "XamarinProject.UpdateProjectFiles() failed to delete file");
Assert.IsFalse (b.LastBuildOutput.Contains ("Skipping target \"_Sign\" because"), "incorrectly skipped some build");
Assert.IsFalse (b.Output.IsTargetSkipped ("_Sign"), "incorrectly skipped some build");
}
}

Expand Down Expand Up @@ -194,25 +197,23 @@ public void RepetiviteBuildUpdateSingleResource ()
Assert.IsTrue (b.Build (proj), "Second build was supposed to build without errors");
Assert.IsTrue (firstBuildTime > b.LastBuildTime, "Second build was supposed to be quicker than the first");
Assert.IsTrue (
b.LastBuildOutput.Contains ("Skipping target \"_GenerateAndroidResourceDir\" because"),
b.Output.IsTargetSkipped ("_GenerateAndroidResourceDir"),
"The Target _GenerateAndroidResourceDir should have been skipped");
Assert.IsTrue (
b.LastBuildOutput.Contains ("Skipping target \"_CompileJava\" because"),
b.Output.IsTargetSkipped ("_CompileJava"),
"The Target _CompileJava should have been skipped");
image1.Timestamp = DateTime.UtcNow;
var layout = proj.AndroidResources.First (x => x.Include() == "Resources\\layout\\Main.axml");
layout.Timestamp = DateTime.UtcNow;
Assert.IsTrue (b.Build (proj, doNotCleanupOnUpdate:true, saveProject: false), "Third build was supposed to build without errors");
Assert.IsTrue (
b.LastBuildOutput.Contains ("Target _GenerateAndroidResourceDir needs to be built as input file") ||
b.LastBuildOutput.Contains ("Building target \"_GenerateAndroidResourceDir\" completely."),
Assert.IsFalse (
b.Output.IsTargetSkipped ("_GenerateAndroidResourceDir"),
"The Target _GenerateAndroidResourceDir should not have been skipped");
Assert.IsTrue (
b.LastBuildOutput.Contains ("Skipping target \"_CompileJava\" because"),
b.Output.IsTargetSkipped ("_CompileJava"),
"The Target _CompileJava (2) should have been skipped");
Assert.IsTrue (
b.LastBuildOutput.Contains ("Target _CreateBaseApk needs to be built as input file") ||
b.LastBuildOutput.Contains ("Building target \"_CreateBaseApk\" completely."),
Assert.IsFalse (
b.Output.IsTargetSkipped ("_CreateBaseApk"),
"The Target _CreateBaseApk should not have been skipped");
}
}
Expand Down Expand Up @@ -957,7 +958,7 @@ public void BuildAppWithManagedResourceParser()
using (var appBuilder = CreateApkBuilder (Path.Combine (path, appProj.ProjectName))) {
appBuilder.Verbosity = LoggerVerbosity.Diagnostic;
appBuilder.Target = "Compile";
Assert.IsTrue (appBuilder.Build (appProj, parameters: new string[] { "DesignTimeBuild=true"} ),
Assert.IsTrue (appBuilder.Build (appProj, parameters: new string[] { "DesignTimeBuild=true", "BuildingInsideVisualStudio=true" } ),
"DesignTime Application Build should have succeeded.");
Assert.IsFalse (appProj.CreateBuildOutput (appBuilder).IsTargetSkipped ("_ManagedUpdateAndroidResgen"),
"Target '_ManagedUpdateAndroidResgen' should have run.");
Expand Down Expand Up @@ -1021,15 +1022,17 @@ public void BuildAppWithManagedResourceParserAndLibraries ()
appProj.SetProperty ("AndroidUseManagedDesignTimeResourceGenerator", "True");
using (var libBuilder = CreateDllBuilder (Path.Combine (path, libProj.ProjectName), false, false)) {
libBuilder.Verbosity = LoggerVerbosity.Diagnostic;
libBuilder.ThrowOnBuildFailure = false;
using (var appBuilder = CreateApkBuilder (Path.Combine (path, appProj.ProjectName), false, false)) {
appBuilder.Verbosity = LoggerVerbosity.Diagnostic;
appBuilder.ThrowOnBuildFailure = false;
libBuilder.Target = "Compile";
Assert.IsTrue (libBuilder.Build (libProj, parameters: new string [] { "DesignTimeBuild=true" }), "Library project should have built");
Assert.IsTrue (libBuilder.Build (libProj, parameters: new string [] { "DesignTimeBuild=true", "BuildingInsideVisualStudio=true" }), "Library project should have built");
Assert.LessOrEqual (libBuilder.LastBuildTime.TotalMilliseconds, maxBuildTimeMs, "DesingTime build should be less than 5 seconds.");
Assert.IsFalse (libProj.CreateBuildOutput (libBuilder).IsTargetSkipped ("_ManagedUpdateAndroidResgen"),
"Target '_ManagedUpdateAndroidResgen' should have run.");
appBuilder.Target = "Compile";
Assert.IsTrue (appBuilder.Build (appProj, parameters: new string [] { "DesignTimeBuild=true" }), "Library project should have built");
Assert.AreEqual (!appBuilder.RunningMSBuild, appBuilder.Build (appProj, parameters: new string [] { "DesignTimeBuild=true", "BuildingInsideVisualStudio=true" }), "Application project should have built");
Assert.LessOrEqual (appBuilder.LastBuildTime.TotalMilliseconds, maxBuildTimeMs, "DesingTime build should be less than 5 seconds.");
Assert.IsFalse (appProj.CreateBuildOutput (appBuilder).IsTargetSkipped ("_ManagedUpdateAndroidResgen"),
"Target '_ManagedUpdateAndroidResgen' should have run.");
Expand All @@ -1049,7 +1052,7 @@ public void BuildAppWithManagedResourceParserAndLibraries ()
Assert.IsTrue (libProj.CreateBuildOutput (libBuilder).IsTargetSkipped ("_ManagedUpdateAndroidResgen"),
"Target '_ManagedUpdateAndroidResgen' should not have run.");
appBuilder.Target = "Compile";
Assert.IsTrue (appBuilder.Build (appProj, parameters: new string [] { "DesignTimeBuild=true" }), "App project should have built");
Assert.IsTrue (appBuilder.Build (appProj, parameters: new string [] { "DesignTimeBuild=true", "BuildingInsideVisualStudio=true" }), "App project should have built");
Assert.LessOrEqual (appBuilder.LastBuildTime.TotalMilliseconds, maxBuildTimeMs, "DesingTime build should be less than 5 seconds.");
Assert.IsFalse (appProj.CreateBuildOutput (appBuilder).IsTargetSkipped ("_ManagedUpdateAndroidResgen"),
"Target '_ManagedUpdateAndroidResgen' should have run.");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,15 +133,15 @@ public partial class BuildTest : BaseTest
/* debugType */ "",
/* optimize */ true ,
/* embedassebmlies */ true ,
/* expectedResult */ "debug",
/* expectedResult */ "release",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

e.g. here we go from expecting "debug" to "release". How is this related to using msbuild? Why's this still pass under xbuild?

},
new object[] {
/* supportedAbi */ new string[] { "armeabi-v7a"},
/* debugSymbols */ true ,
/* debugType */ "",
/* optimize */ true ,
/* embedassebmlies */ false ,
/* expectedResult */ "debug",
/* expectedResult */ "release",
},
new object[] {
/* supportedAbi */ new string[] { "armeabi-v7a"},
Expand Down
Loading