From f34941825894d44059a560d9f95016ac97803504 Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Sat, 11 Aug 2018 01:12:28 -0700 Subject: Fix Build and Clean targets --- src/WixToolset.BuildTasks/wix.signing.targets | 126 ++++++++++----------- src/WixToolset.BuildTasks/wix.targets | 126 ++++++++------------- .../WixToolsetTest.BuildTasks/FakeBuildEngine.cs | 33 ------ .../WixToolsetTest.BuildTasks/MsbuildFixture.cs | 119 ++++++++++++------- .../SimpleMsiPackage/MsiPackage/MsiPackage.wixproj | 14 +-- .../WixBuildTaskFixture.cs | 64 +++++++++++ .../WixToolsetTest.BuildTasks.csproj | 1 + 7 files changed, 256 insertions(+), 227 deletions(-) delete mode 100644 src/test/WixToolsetTest.BuildTasks/FakeBuildEngine.cs create mode 100644 src/test/WixToolsetTest.BuildTasks/WixBuildTaskFixture.cs (limited to 'src') diff --git a/src/WixToolset.BuildTasks/wix.signing.targets b/src/WixToolset.BuildTasks/wix.signing.targets index 6351cc8b..7c25175f 100644 --- a/src/WixToolset.BuildTasks/wix.signing.targets +++ b/src/WixToolset.BuildTasks/wix.signing.targets @@ -1,18 +1,15 @@ - - - - $(MSBuildThisFileFullPath) - $(WixTargetsPath)WixTasks.dll - - $(MSBuildProjectFile).Signed.txt + $(MSBuildProjectFile).Signed.txt + $(IntermediateOutputPath)$(SignedFileName) + + @@ -51,49 +48,57 @@ - CompileAndLink; + WixBuild; + CalculateSignTargetFiles; BeforeSigning; $(InternalSignDependsOn); AfterSigning + Name="Signing" + DependsOnTargets="$(SigningDependsOn)" + Inputs="$(TargetPath)" + Outputs="$(SignedFilePath)" + Condition=" '$(SignOutput)' == 'true' "> - - - + + + + File="$(SignedFilePath)" + Lines="^$(MSBuildProjectFullPath);@(SignMsm);@(SignCabs);@(SignMsi);@(SignContainers);@(SignBundleEngine);@(SignBundle)" + Overwrite="true" /> + + + + + + - - - - + Outputs="$(SignedFilePath)"> + + + + + Name="InternalSignMsm" + DependsOnTargets="SignMsm" + Condition=" '@(SignMsm)' != '' " /> + Outputs="$(SignedFilePath)"> @@ -101,14 +106,14 @@ + Name="InternalSignCabs" + DependsOnTargets="SignCabs" + Condition=" '@(SignCabs)' != '' " /> + Outputs="$(SignedFilePath)"> @@ -116,33 +121,33 @@ + Name="InternalSignMsi" + DependsOnTargets="SignMsi" + Inputs="@(SignTargetPath)" + Outputs="$(SignedFilePath)" + Condition=" '@(SignMsi)' != '' " /> + Outputs="$(SignedFilePath)"> + Name="InternalSignContainers" + DependsOnTargets="SignContainers" + Condition=" '@(SignContainers)' != '' " /> + Name="InternalSignBundleEngine" + DependsOnTargets="SignBundleEngine" + Condition=" '@(SignBundleEngine)' != '' " /> + Name="InternalSignBundle" + DependsOnTargets="SignBundle" + Condition=" '@(SignBundle)' != '' " /> - PrepareForBuild; - ResolveWixExtensionReferences; - CompileAndLink; - InternalSignCabs - PrepareForBuild; - ResolveWixExtensionReferences; - CompileAndLink; - InternalSignContainers + Outputs="$(SignedFilePath)"> - - - - - + + + + - PrepareForBuild; - ResolveWixExtensionReferences; - CompileAndLink; - InternalSignBundleEngine + Outputs="$(SignedFilePath)"> .wxs wix - Managed + wix $(MSBuildProjectName) $(OutputName) - - <_OriginalOutputType>$(OutputType) + Package @@ -70,28 +69,24 @@ .pcp .wixlib .exe + .wixipl - - - <_DebugSymbolsIntermediatePath Include="$(PdbOutputDir)$(TargetPdbName)" Condition=" '@(_DebugSymbolsIntermediatePath)' == '' " /> - - - $(IntermediateOutputPath) - $(PdbOutputDir)\ + $(TargetDir) + $(PdbOutputDir)\ $([System.IO.Path]::GetFullPath(`$([System.IO.Path]::Combine(`$(MSBuildProjectDirectory)`, `$(PdbOutputDir)`))`)) - $(TargetName).wixpdb + $(TargetName).wixpdb - $(TargetPdbDir)$(TargetPdbName) + $(TargetPdbDir)$(TargetPdbFileName) - - - - <_PleaseSetThisInProjectFile>Please set this in the project file before the <Import> of the wix.targets file. - <_OutputTypeDescription>The OutputType defines whether a Windows Installer package (.msi), PatchCreation (.pcp), merge module (.msm), wix library (.wixlib), or self-extracting executable (.exe) is being built. $(_PleaseSetThisInProjectFile) Possible values are 'Package', 'Module', 'Library', and 'Bundle'. + <_OutputTypeDescription>Possible values are: 'Package', 'Module', 'Library', 'Bundle', 'IntermediatePostLink'. $(_PleaseSetThisInProjectFile) - - @@ -272,7 +252,6 @@ BuildOnlySettings; PrepareForBuild; PreBuildEvent; - ResolveReferences; WixBuild; Signing; @@ -580,7 +559,7 @@ ================================================================================================ --> - AssignCultures + AssignTargetPaths @@ -600,22 +579,22 @@ ResolveReferences; - BeforeWixBuild; - _TimeStampBeforeWixBuild; + BeforeCompile; + _TimeStampBeforeCompile; CalculateDefineConstants; Harvest; GenerateCompileWithObjectPath; - AssignCultures; + AssignTargetPaths; ReadPreviousBindInputsAndBuiltOutputs; CoreWixBuild; UpdateLinkFileWrites; - _TimeStampAfterWixBuild; - AfterWixBuild + _TimeStampAfterCompile; + AfterCompile + Name="CoreWixBuild" + Inputs="@(Compile); + @(Content); + @(EmbeddedResource); + @(WixObject); + @(_ResolvedProjectReferencePaths); + @(_ResolvedWixLibraryPaths); + @(_ResolvedWixExtensionPaths); + @(_BindInputs); + $(MSBuildAllProjects)" + Outputs="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(BindBuiltOutputsFile);@(_BindBuiltOutputs)" + Condition=" '@(Compile)' != '' "> - $([System.IO.Path]::GetFullPath($(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(TargetName)$(TargetExt))) - $(TargetPdbDir)%(CultureGroup.OutputFolder)$(TargetPdbName) + + $([System.IO.Path]::GetFullPath($(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(TargetFileName))) + + $(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(TargetPdbFileName) - - + - + - <_TargetPathItems Include="$(TargetDir)%(CultureGroup.OutputFolder)$(TargetName)$(TargetExt)" /> - <_TargetPdbPathItems Include="$(TargetPdbDir)%(CultureGroup.OutputFolder)$(TargetPdbName)" /> + <_CulturedTargetPath Include="$(TargetDir)%(CultureGroup.OutputFolder)$(TargetFileName)" /> + <_CulturedTargetPdbPath Include="$(TargetPdbDir)%(CultureGroup.OutputFolder)$(TargetPdbFileName)" /> - - @(_TargetPathItems) - @(_TargetPdbPathItems) + @(_CulturedTargetPath) + @(_CulturedTargetPdbPath) - - - - - - PrepareForBuild;AssignCultures + PrepareForBuild;AssignTargetPaths - + @@ -993,14 +963,14 @@ ================================================================================================== --> - AssignCultures + AssignTargetPaths - + @@ -1029,7 +999,7 @@ - + diff --git a/src/test/WixToolsetTest.BuildTasks/FakeBuildEngine.cs b/src/test/WixToolsetTest.BuildTasks/FakeBuildEngine.cs deleted file mode 100644 index 8fd69414..00000000 --- a/src/test/WixToolsetTest.BuildTasks/FakeBuildEngine.cs +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. - -namespace WixToolsetTest.BuildTasks -{ - using System.Collections; - using System.Text; - using Microsoft.Build.Framework; - - internal class FakeBuildEngine : IBuildEngine - { - private StringBuilder output = new StringBuilder(); - - public int ColumnNumberOfTaskNode => 0; - - public bool ContinueOnError => false; - - public int LineNumberOfTaskNode => 0; - - public string ProjectFileOfTaskNode => "fake_wix.targets"; - - public string Output => this.output.ToString(); - - public bool BuildProjectFile(string projectFileName, string[] targetNames, IDictionary globalProperties, IDictionary targetOutputs) => throw new System.NotImplementedException(); - - public void LogCustomEvent(CustomBuildEventArgs e) => this.output.AppendLine(e.Message); - - public void LogErrorEvent(BuildErrorEventArgs e) => this.output.AppendLine(e.Message); - - public void LogMessageEvent(BuildMessageEventArgs e) => this.output.AppendLine(e.Message); - - public void LogWarningEvent(BuildWarningEventArgs e) => this.output.AppendLine(e.Message); - } -} diff --git a/src/test/WixToolsetTest.BuildTasks/MsbuildFixture.cs b/src/test/WixToolsetTest.BuildTasks/MsbuildFixture.cs index a27928d5..95b727ad 100644 --- a/src/test/WixToolsetTest.BuildTasks/MsbuildFixture.cs +++ b/src/test/WixToolsetTest.BuildTasks/MsbuildFixture.cs @@ -2,62 +2,103 @@ namespace WixToolsetTest.BuildTasks { + using System; using System.IO; using System.Linq; - using Microsoft.Build.Utilities; using WixBuildTools.TestSupport; using WixToolset.BuildTasks; - using WixToolset.Data; - using WixToolset.Data.Tuples; using Xunit; - public partial class MsbuildFixture + public class MsbuildFixture { + private static readonly string WixTargetsPath = Path.Combine(Path.GetDirectoryName(new Uri(typeof(DoIt).Assembly.CodeBase).AbsolutePath), "wix.targets"); + + public MsbuildFixture() + { + this.MsbuildRunner = new MsbuildRunner(); + } + + private MsbuildRunner MsbuildRunner { get; } + [Fact] public void CanBuildSimpleMsiPackage() { - var folder = TestData.Get(@"TestData\SimpleMsiPackage\MsiPackage"); + var projectPath = TestData.Get(@"TestData\SimpleMsiPackage\MsiPackage\MsiPackage.wixproj"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); - var intermediateFolder = Path.Combine(baseFolder, "obj"); + var binFolder = Path.Combine(baseFolder, @"bin\"); + var intermediateFolder = Path.Combine(baseFolder, @"obj\"); - var engine = new FakeBuildEngine(); + var result = this.MsbuildRunner.Execute(projectPath, new[] + { + $"-p:WixTargetsPath={WixTargetsPath}", + $"-p:IntermediateOutputPath={intermediateFolder}", + $"-p:OutputPath={binFolder}" + }); + result.AssertSuccess(); - var task = new DoIt + var paths = Directory.EnumerateFiles(binFolder, @"*.*", SearchOption.AllDirectories) + .Select(s => s.Substring(baseFolder.Length + 1)) + .OrderBy(s => s) + .ToArray(); + Assert.Equal(new[] { - BuildEngine = engine, - SourceFiles = new[] - { - new TaskItem(Path.Combine(folder, "Package.wxs")), - new TaskItem(Path.Combine(folder, "PackageComponents.wxs")), - }, - LocalizationFiles = new[] - { - new TaskItem(Path.Combine(folder, "Package.en-us.wxl")), - }, - BindInputPaths = new[] - { - new TaskItem(Path.Combine(folder, "data")), - }, - IntermediateDirectory = new TaskItem(intermediateFolder), - OutputFile = new TaskItem(Path.Combine(baseFolder, @"bin\test.msi")), - }; - - var result = task.Execute(); - Assert.True(result, $"MSBuild task failed unexpectedly. Output:\r\n{engine.Output}"); - - Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\test.msi"))); - Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\test.wixpdb"))); - Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\cab1.cab"))); - - var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wir")); - var section = intermediate.Sections.Single(); - - var wixFile = section.Tuples.OfType().Single(); - Assert.Equal(Path.Combine(folder, @"data\test.txt"), wixFile[WixFileTupleFields.Source].AsPath().Path); - Assert.Equal(@"test.txt", wixFile[WixFileTupleFields.Source].PreviousValue.AsPath().Path); + @"bin\en-US\cab1.cab", + @"bin\en-US\MsiPackage.msi", + @"bin\en-US\MsiPackage.wixpdb", + }, paths); + } + } + + [Fact] + public void CanBuildAndCleanSimpleMsiPackage() + { + var projectPath = TestData.Get(@"TestData\SimpleMsiPackage\MsiPackage\MsiPackage.wixproj"); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var binFolder = Path.Combine(baseFolder, @"bin\"); + var intermediateFolder = Path.Combine(baseFolder, @"obj\"); + + // Build + var result = this.MsbuildRunner.Execute(projectPath, new[] + { + $"-p:WixTargetsPath={WixTargetsPath}", + $"-p:IntermediateOutputPath={intermediateFolder}", + $"-p:OutputPath={binFolder}", + "-v:diag" + }); + result.AssertSuccess(); + + var buildOutput = String.Join("\r\n", result.Output); + + var createdPaths = Directory.EnumerateFiles(baseFolder, @"*.*", SearchOption.AllDirectories) + .Select(s => s.Substring(baseFolder.Length + 1)) + .OrderBy(s => s) + .ToArray(); + Assert.NotEmpty(createdPaths); + + // Clean + result = this.MsbuildRunner.Execute(projectPath, new[] + { + $"-p:WixTargetsPath={WixTargetsPath}", + $"-p:IntermediateOutputPath={intermediateFolder}", + $"-p:OutputPath={binFolder}", + "-t:Clean", + "-v:diag" + }); + result.AssertSuccess(); + + var cleanOutput = String.Join("\r\n", result.Output); + + var remainingPaths = Directory.EnumerateFiles(baseFolder, @"*.*", SearchOption.AllDirectories) + .Select(s => s.Substring(baseFolder.Length + 1)) + .OrderBy(s => s) + .ToArray(); + Assert.Empty(remainingPaths); } } } diff --git a/src/test/WixToolsetTest.BuildTasks/TestData/SimpleMsiPackage/MsiPackage/MsiPackage.wixproj b/src/test/WixToolsetTest.BuildTasks/TestData/SimpleMsiPackage/MsiPackage/MsiPackage.wixproj index 31c3ec9c..d5cac8d8 100644 --- a/src/test/WixToolsetTest.BuildTasks/TestData/SimpleMsiPackage/MsiPackage/MsiPackage.wixproj +++ b/src/test/WixToolsetTest.BuildTasks/TestData/SimpleMsiPackage/MsiPackage/MsiPackage.wixproj @@ -1,18 +1,12 @@ - + Debug x86 - 0.9 - 7fb77005-c6e0-454f-8c2d-0a4a79c918ba - MsiPackage - Package - MsiPackage - MsiPackage - ..\..\..\..\..\..\build\Release\publish\wix.targets + 7fb77005-c6e0-454f-8c2d-0a4a79c918ba @@ -48,8 +42,8 @@ - + - + \ No newline at end of file diff --git a/src/test/WixToolsetTest.BuildTasks/WixBuildTaskFixture.cs b/src/test/WixToolsetTest.BuildTasks/WixBuildTaskFixture.cs new file mode 100644 index 00000000..c4a69cdd --- /dev/null +++ b/src/test/WixToolsetTest.BuildTasks/WixBuildTaskFixture.cs @@ -0,0 +1,64 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. + +namespace WixToolsetTest.BuildTasks +{ + using System.IO; + using System.Linq; + using Microsoft.Build.Utilities; + using WixBuildTools.TestSupport; + using WixToolset.BuildTasks; + using WixToolset.Data; + using WixToolset.Data.Tuples; + using Xunit; + + public class WixBuildTaskFixture + { + [Fact] + public void CanBuildSimpleMsiPackage() + { + var folder = TestData.Get(@"TestData\SimpleMsiPackage\MsiPackage"); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var intermediateFolder = Path.Combine(baseFolder, "obj"); + + var engine = new FakeBuildEngine(); + + var task = new DoIt + { + BuildEngine = engine, + SourceFiles = new[] + { + new TaskItem(Path.Combine(folder, "Package.wxs")), + new TaskItem(Path.Combine(folder, "PackageComponents.wxs")), + }, + LocalizationFiles = new[] + { + new TaskItem(Path.Combine(folder, "Package.en-us.wxl")), + }, + BindInputPaths = new[] + { + new TaskItem(Path.Combine(folder, "data")), + }, + IntermediateDirectory = new TaskItem(intermediateFolder), + OutputFile = new TaskItem(Path.Combine(baseFolder, @"bin\test.msi")), + }; + + var result = task.Execute(); + Assert.True(result, $"MSBuild task failed unexpectedly. Output:\r\n{engine.Output}"); + + Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\test.msi"))); + Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\test.wixpdb"))); + Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\cab1.cab"))); + + var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"test.wir")); + var section = intermediate.Sections.Single(); + + var wixFile = section.Tuples.OfType().Single(); + Assert.Equal(Path.Combine(folder, @"data\test.txt"), wixFile[WixFileTupleFields.Source].AsPath().Path); + Assert.Equal(@"test.txt", wixFile[WixFileTupleFields.Source].PreviousValue.AsPath().Path); + } + } + } +} diff --git a/src/test/WixToolsetTest.BuildTasks/WixToolsetTest.BuildTasks.csproj b/src/test/WixToolsetTest.BuildTasks/WixToolsetTest.BuildTasks.csproj index 99da83cd..edab8a67 100644 --- a/src/test/WixToolsetTest.BuildTasks/WixToolsetTest.BuildTasks.csproj +++ b/src/test/WixToolsetTest.BuildTasks/WixToolsetTest.BuildTasks.csproj @@ -9,6 +9,7 @@ + -- cgit v1.2.3-55-g6feb