Import code from old v4 repo
Sean Hall committed
Feb 2, 2019 at 12:54 UTC
c7bed5a084324ba94aae5108bac94374ce9dfe39
10 files changed
+336
src/ca/directx.cpp
new
+49
@@ -0,0 +1,49 @@
1
+// 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.
2
+
3
+#include "precomp.h"
4
+
5
+/********************************************************************
6
+WixQueryDirectXCaps - entry point for WixQueryDirectXCaps CA
7
+
8
+ Called as Type 1 custom action (DLL from the Binary table) from
9
+ Windows Installer to set properties that identify the DirectX
10
+ capabilities ("caps") of the system.
11
+********************************************************************/
12
+extern "C" UINT __stdcall WixQueryDirectXCaps(
13
+ __in MSIHANDLE hInstall
14
+ )
15
+{
16
+#if 0
17
+ ::MessageBoxA(0, "break into debugger now please", "---->> ATTACH TO ME!", MB_ICONEXCLAMATION);
18
+#endif
19
+
20
+ HRESULT hr = S_OK;
21
+ DWORD er = ERROR_SUCCESS;
22
+ LPDIRECT3D9 pD3D = NULL;
23
+
24
+ hr = WcaInitialize(hInstall, "WixQueryDirectXCaps");
25
+ ExitOnFailure(hr, "failed to initialize");
26
+
27
+ pD3D = Direct3DCreate9(D3D_SDK_VERSION);
28
+ ExitOnNull(pD3D, hr, E_FAIL, "Direct3DCreate9 failed");
29
+
30
+ D3DCAPS9 d3dCaps;
31
+ hr = pD3D->GetDeviceCaps(
32
+ 0, // first adapter
33
+ D3DDEVTYPE_HAL, // fail on non-HAL devices
34
+ &d3dCaps
35
+ );
36
+ ExitOnFailure(hr, "GetDeviceCaps call failed");
37
+
38
+ int iVertexShaderVersion = D3DSHADER_VERSION_MAJOR(d3dCaps.VertexShaderVersion) * 100 + D3DSHADER_VERSION_MINOR(d3dCaps.VertexShaderVersion);
39
+ WcaSetIntProperty(L"WIX_DIRECTX_VERTEXSHADERVERSION", iVertexShaderVersion);
40
+
41
+ int iPixelShaderVersion = D3DSHADER_VERSION_MAJOR(d3dCaps.PixelShaderVersion) * 100 + D3DSHADER_VERSION_MINOR(d3dCaps.PixelShaderVersion);
42
+ WcaSetIntProperty(L"WIX_DIRECTX_PIXELSHADERVERSION", iPixelShaderVersion);
43
+
44
+LExit:
45
+ ReleaseObject(pD3D);
46
+ return WcaFinalize(er = FAILED(hr) ? ERROR_INSTALL_FAILURE : er);
47
+}
48
+
49
+
src/ca/directx.def
new
+7
@@ -0,0 +1,7 @@
1
+; 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.
2
+
3
+
4
+LIBRARY "directx"
5
+
6
+EXPORTS
7
+ WixQueryDirectXCaps
src/ca/directx.vcxproj
new
+47
@@ -0,0 +1,47 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<!-- 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. -->
3
+
4
+
5
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
6
+ <ItemGroup Label="ProjectConfigurations">
7
+ <ProjectConfiguration Include="Debug|Win32">
8
+ <Configuration>Debug</Configuration>
9
+ <Platform>Win32</Platform>
10
+ </ProjectConfiguration>
11
+ <ProjectConfiguration Include="Release|Win32">
12
+ <Configuration>Release</Configuration>
13
+ <Platform>Win32</Platform>
14
+ </ProjectConfiguration>
15
+ </ItemGroup>
16
+
17
+ <PropertyGroup Label="Globals">
18
+ <ProjectGuid>{F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}</ProjectGuid>
19
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
20
+ <CharacterSet>Unicode</CharacterSet>
21
+ <TargetName>directx</TargetName>
22
+ <ProjectModuleDefinitionFile>directx.def</ProjectModuleDefinitionFile>
23
+ </PropertyGroup>
24
+
25
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), wix.proj))\tools\WixBuild.props" />
26
+
27
+ <PropertyGroup>
28
+ <ProjectAdditionalIncludeDirectories>$(WixRoot)src\libs\dutil\inc;$(WixRoot)src\libs\wcautil</ProjectAdditionalIncludeDirectories>
29
+ <ProjectAdditionalLinkLibraries>d3d9.lib;msi.lib;dutil.lib;wcautil.lib</ProjectAdditionalLinkLibraries>
30
+ </PropertyGroup>
31
+
32
+ <ItemGroup>
33
+ <ClCompile Include="directx.cpp" />
34
+ <ClCompile Include="dllmain.cpp" />
35
+ </ItemGroup>
36
+ <ItemGroup>
37
+ <ClInclude Include="precomp.h" />
38
+ </ItemGroup>
39
+ <ItemGroup>
40
+ <None Include="directx.def" />
41
+ </ItemGroup>
42
+ <ItemGroup>
43
+ <ResourceCompile Include="directx.rc" />
44
+ </ItemGroup>
45
+
46
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), wix.proj))\tools\WixBuild.targets" />
47
+</Project>
src/ca/dllmain.cpp
new
+26
@@ -0,0 +1,26 @@
1
+// 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.
2
+
3
+#include "precomp.h"
4
+
5
+/********************************************************************
6
+DllMain - standard entry point for all WiX CustomActions
7
+
8
+********************************************************************/
9
+extern "C" BOOL WINAPI DllMain(
10
+ IN HINSTANCE hInst,
11
+ IN ULONG ulReason,
12
+ IN LPVOID)
13
+{
14
+ switch(ulReason)
15
+ {
16
+ case DLL_PROCESS_ATTACH:
17
+ WcaGlobalInitialize(hInst);
18
+ break;
19
+
20
+ case DLL_PROCESS_DETACH:
21
+ WcaGlobalFinalize();
22
+ break;
23
+ }
24
+
25
+ return TRUE;
26
+}
src/ca/precomp.h
new
+14
@@ -0,0 +1,14 @@
1
+#pragma once
2
+// 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.
3
+
4
+
5
+#include <windows.h>
6
+#include <msidefs.h>
7
+#include <msiquery.h>
8
+#include <D3D9.h>
9
+
10
+#include "wixstrsafe.h"
11
+#include "wcautil.h"
12
+#include "strutil.h"
13
+
14
+#include "CustomMsiErrors.h"
src/wixext/DirectXDecompiler.cs
new
+70
@@ -0,0 +1,70 @@
1
+// 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.
2
+
3
+namespace WixToolset.Extensions
4
+{
5
+ using System;
6
+ using System.Text;
7
+ using WixToolset.Data;
8
+ using WixToolset.Extensibility;
9
+ using Wix = WixToolset.Data.Serialize;
10
+
11
+ /// <summary>
12
+ /// The WiX Toolset DirectX Extension.
13
+ /// </summary>
14
+ public sealed class DirectXDecompiler : DecompilerExtension
15
+ {
16
+ /// <summary>
17
+ /// Get the extensions library to be removed.
18
+ /// </summary>
19
+ /// <param name="tableDefinitions">Table definitions for library.</param>
20
+ /// <returns>Library to remove from decompiled output.</returns>
21
+ public override Library GetLibraryToRemove(TableDefinitionCollection tableDefinitions)
22
+ {
23
+ return DirectXExtensionData.GetExtensionLibrary(tableDefinitions);
24
+ }
25
+
26
+ /// <summary>
27
+ /// Called at the beginning of the decompilation of a database.
28
+ /// </summary>
29
+ /// <param name="tables">The collection of all tables.</param>
30
+ public override void Initialize(TableIndexedCollection tables)
31
+ {
32
+ Table propertyTable = tables["Property"];
33
+
34
+ if (null != propertyTable)
35
+ {
36
+ foreach (Row row in propertyTable.Rows)
37
+ {
38
+ if ("SecureCustomProperties" == row[0].ToString())
39
+ {
40
+ // if we've referenced any of the DirectX properties, add
41
+ // a PropertyRef to pick up the CA from the extension and then remove
42
+ // it from the SecureCustomExtensions property so we don't get duplicates
43
+ StringBuilder remainingProperties = new StringBuilder();
44
+ string[] secureCustomProperties = row[1].ToString().Split(';');
45
+ foreach (string property in secureCustomProperties)
46
+ {
47
+ if (property.StartsWith("WIX_DIRECTX_"))
48
+ {
49
+ Wix.PropertyRef propertyRef = new Wix.PropertyRef();
50
+ propertyRef.Id = property;
51
+ this.Core.RootElement.AddChild(propertyRef);
52
+ }
53
+ else
54
+ {
55
+ if (0 < remainingProperties.Length)
56
+ {
57
+ remainingProperties.Append(";");
58
+ }
59
+ remainingProperties.Append(property);
60
+ }
61
+ }
62
+
63
+ row[1] = remainingProperties.ToString();
64
+ break;
65
+ }
66
+ }
67
+ }
68
+ }
69
+ }
70
+}
src/wixext/DirectXExtensionData.cs
new
+34
@@ -0,0 +1,34 @@
1
+// 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.
2
+
3
+namespace WixToolset.Extensions
4
+{
5
+ using System;
6
+ using System.Reflection;
7
+ using WixToolset.Data;
8
+ using WixToolset.Extensibility;
9
+
10
+ /// <summary>
11
+ /// The WiX Toolset DirectX Extension.
12
+ /// </summary>
13
+ public sealed class DirectXExtensionData : ExtensionData
14
+ {
15
+ /// <summary>
16
+ /// Gets the library associated with this extension.
17
+ /// </summary>
18
+ /// <param name="tableDefinitions">The table definitions to use while loading the library.</param>
19
+ /// <returns>The loaded library.</returns>
20
+ public override Library GetLibrary(TableDefinitionCollection tableDefinitions)
21
+ {
22
+ return DirectXExtensionData.GetExtensionLibrary(tableDefinitions);
23
+ }
24
+
25
+ /// <summary>
26
+ /// Internal mechanism to access the extension's library.
27
+ /// </summary>
28
+ /// <returns>Extension's library.</returns>
29
+ internal static Library GetExtensionLibrary(TableDefinitionCollection tableDefinitions)
30
+ {
31
+ return ExtensionData.LoadLibraryHelper(Assembly.GetExecutingAssembly(), "WixToolset.Extensions.Data.DirectX.wixlib", tableDefinitions);
32
+ }
33
+ }
34
+}
src/wixext/WixDirectXExtension.csproj
new
+31
@@ -0,0 +1,31 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<!-- 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. -->
3
+
4
+
5
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
6
+ <PropertyGroup>
7
+ <ProjectGuid>{6182DBCA-146A-4F37-8406-3139BBE04636}</ProjectGuid>
8
+ <AssemblyName>WixDirectXExtension</AssemblyName>
9
+ <OutputType>Library</OutputType>
10
+ <RootNamespace>WixToolset.Extensions</RootNamespace>
11
+ </PropertyGroup>
12
+ <ItemGroup>
13
+ <Compile Include="AssemblyInfo.cs" />
14
+ <Compile Include="DirectXDecompiler.cs" />
15
+ <Compile Include="DirectXExtensionData.cs" />
16
+ <EmbeddedResource Include="$(OutputPath)\DirectX.wixlib">
17
+ <Link>Data\DirectX.wixlib</Link>
18
+ </EmbeddedResource>
19
+ </ItemGroup>
20
+ <ItemGroup>
21
+ <Reference Include="System" />
22
+ <Reference Include="System.Xml" />
23
+ <ProjectReference Include="..\..\..\libs\WixToolset.Data\WixToolset.Data.csproj" />
24
+ <ProjectReference Include="..\..\..\libs\WixToolset.Extensibility\WixToolset.Extensibility.csproj" />
25
+ <ProjectReference Include="..\..\..\tools\wix\Wix.csproj" />
26
+ <ProjectReference Include="..\wixlib\DirectXExtension.wixproj">
27
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
28
+ </ProjectReference>
29
+ </ItemGroup>
30
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), wix.proj))\tools\WixBuild.targets" />
31
+</Project>
src/wixlib/DirectXExtension.wixproj
new
+24
@@ -0,0 +1,24 @@
1
+<?xml version="1.0" encoding="utf-8" ?>
2
+<!-- 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. -->
3
+
4
+
5
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
6
+ <PropertyGroup>
7
+ <ProjectGuid>{4D8DDEC7-AAAC-4A32-87D0-5992FE382ED9}</ProjectGuid>
8
+ <OutputName>directx</OutputName>
9
+ <OutputType>Library</OutputType>
10
+ <BindFiles>true</BindFiles>
11
+ <Pedantic>true</Pedantic>
12
+ <Cultures>en-us</Cultures>
13
+ </PropertyGroup>
14
+
15
+ <ItemGroup>
16
+ <Compile Include="DirectXExtension.wxs" />
17
+ </ItemGroup>
18
+
19
+ <ItemGroup>
20
+ <ProjectReference Include="..\ca\directx.vcxproj" />
21
+ </ItemGroup>
22
+
23
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), wix.proj))\tools\WixBuild.targets" />
24
+</Project>
src/wixlib/DirectXExtension.wxs
new
+34
@@ -0,0 +1,34 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<!-- 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. -->
3
+
4
+
5
+<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
6
+ <?include caerr.wxi ?>
7
+
8
+ <!-- DirectX Custom Action DLL Definitions -->
9
+ <Fragment>
10
+ <Binary Id="WixDirectXCA" SourceFile="directx.dll" />
11
+ </Fragment>
12
+
13
+ <Fragment>
14
+ <CustomAction Id="WixQueryDirectXCaps" BinaryKey="WixDirectXCA" DllEntry="WixQueryDirectXCaps" Return="ignore" />
15
+
16
+ <InstallUISequence>
17
+ <Custom Action="WixQueryDirectXCaps" Before="LaunchConditions" Overridable="yes">VersionNT > 400</Custom>
18
+ </InstallUISequence>
19
+
20
+ <InstallExecuteSequence>
21
+ <Custom Action="WixQueryDirectXCaps" Before="LaunchConditions" Overridable="yes">VersionNT > 400</Custom>
22
+ </InstallExecuteSequence>
23
+ </Fragment>
24
+
25
+ <Fragment>
26
+ <Property Id="WIX_DIRECTX_VERTEXSHADERVERSION" Secure="yes" Value="NotSet" />
27
+ <CustomActionRef Id="WixQueryDirectXCaps" />
28
+ </Fragment>
29
+
30
+ <Fragment>
31
+ <Property Id="WIX_DIRECTX_PIXELSHADERVERSION" Secure="yes" Value="NotSet" />
32
+ <CustomActionRef Id="WixQueryDirectXCaps" />
33
+ </Fragment>
34
+</Wix>