<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <ProjectGuid>{76EFDEE3-81CF-4ADA-94DC-EA5509FF6FFC}</ProjectGuid>
    <Keyword>Win32Proj</Keyword>
    <ConfigurationType>Application</ConfigurationType>
    <ConfigurationType Condition="$(Configuration.Contains('.dll'))">DynamicLibrary</ConfigurationType>
  </PropertyGroup>
  <ItemGroup Label="ProjectConfigurations">
    <ProjectConfiguration Include="Debug|Win32">
      <Configuration>Debug</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Debug|x64">
      <Configuration>Debug</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Debug(mbcs)|Win32">
      <Configuration>Debug(mbcs)</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Debug(mbcs)|x64">
      <Configuration>Debug(mbcs)</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Debug.dll|Win32">
      <Configuration>Debug.dll</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Debug.dll|x64">
      <Configuration>Debug.dll</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|Win32">
      <Configuration>Release</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|x64">
      <Configuration>Release</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release(mbcs)|Win32">
      <Configuration>Release(mbcs)</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release(mbcs)|x64">
      <Configuration>Release(mbcs)</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release.dll|Win32">
      <Configuration>Release.dll</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release.dll|x64">
      <Configuration>Release.dll</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Self-contained|Win32">
      <Configuration>Self-contained</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Self-contained|x64">
      <Configuration>Self-contained</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Self-contained(debug)|Win32">
      <Configuration>Self-contained(debug)</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Self-contained(debug)|x64">
      <Configuration>Self-contained(debug)</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Self-contained(mbcs)|Win32">
      <Configuration>Self-contained(mbcs)</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Self-contained(mbcs)|x64">
      <Configuration>Self-contained(mbcs)</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
  </ItemGroup>
  <!-- import common config -->
  <Import Project="Config.vcxproj" />
  <!-- platform: win32 & x64 (common) -->
  <ItemDefinitionGroup Condition="'$(Platform)'=='Win32' OR '$(Platform)'=='x64'">
    <ClCompile>
      <PreprocessorDefinitions>WIN32;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ClCompile>
    <Link>
      <SubSystem>Windows</SubSystem>
      <AdditionalDependencies>wsock32.lib;winmm.lib;version.lib;comctl32.lib;psapi.lib;wininet.lib;shlwapi.lib;uxtheme.lib;dwmapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
      <StackReserveSize>4194304</StackReserveSize>
      <TerminalServerAware Condition="!$(ConfigDll)">false</TerminalServerAware>
      <DataExecutionPrevention>false</DataExecutionPrevention>
      <RandomizedBaseAddress>false</RandomizedBaseAddress>
      <ProgramDatabaseFile Condition="$(ConfigDll)">$(OutDir)\$(TargetName)_dll.pdb</ProgramDatabaseFile>
    </Link>
  </ItemDefinitionGroup>
  <!-- platform: win32 -->
  <ItemDefinitionGroup Condition="'$(Platform)'=='Win32'">
    <Link>
      <TargetMachine>MachineX86</TargetMachine>
    </Link>
  </ItemDefinitionGroup>
  <!-- platform: x64 -->
  <ItemDefinitionGroup Condition="'$(Platform)'=='x64'">
    <ClCompile>
      <PreprocessorDefinitions>_WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>_WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ResourceCompile>
    <Link>
      <TargetMachine>MachineX64</TargetMachine>
    </Link>
  </ItemDefinitionGroup>
  <!-- paths and basic settings -->
  <PropertyGroup>
    <IntDir>$(ProjectDir)temp\$(Platform)\$(Configuration)\</IntDir>
    <BinDir>bin</BinDir>
    <OutDir>$(BinDir)\</OutDir>
    <OutDir Condition="$(ConfigDebug)">$(BinDir)_debug\</OutDir>
    <OutDir Condition="$(ConfigMinSize)">$(BinDir)_minimal\</OutDir>
    <BinSuffixChar Condition="'$(CharacterSet)'=='MultiByte'">A</BinSuffixChar>
    <BinTypeWord>$(CharacterSet)</BinTypeWord>
    <BinTypeWord Condition="'$(CharacterSet)'=='MultiByte'">ANSI</BinTypeWord>
    <BinSuffixBits Condition="'$(Platform)'=='Win32'">32</BinSuffixBits>
    <BinSuffixBits Condition="'$(Platform)'=='x64'">64</BinSuffixBits>
    <TargetName>AutoHotkey$(BinSuffixChar)$(BinSuffixBits)</TargetName>
  </PropertyGroup>
  <ItemDefinitionGroup>
    <ClCompile>
      <PrecompiledHeader Condition="!$(ConfigDebug)">Use</PrecompiledHeader>
      <AdditionalIncludeDirectories>$(ProjectDir)source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
    </ClCompile>
    <Link>
      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
    </Link>
    <Manifest>
      <AdditionalManifestFiles>source\resources\AutoHotkey.exe.manifest;%(AdditionalManifestFiles)</AdditionalManifestFiles>
    </Manifest>
  </ItemDefinitionGroup>
  <!-- AutoHotkey.dll -->
  <ItemDefinitionGroup Condition="$(ConfigDll)">
    <ClCompile>
      <PreprocessorDefinitions>CONFIG_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>CONFIG_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ResourceCompile>
  </ItemDefinitionGroup>
  <!-- self-contained: required settings -->
  <PropertyGroup Condition="$(ConfigSC)">
    <TargetName>$(BinTypeWord) $(BinSuffixBits)-bit</TargetName>
    <TargetExt>.bin</TargetExt>
  </PropertyGroup>
  <ItemDefinitionGroup Condition="$(ConfigSC)">
    <ClCompile>
      <PreprocessorDefinitions>AUTOHOTKEYSC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>AUTOHOTKEYSC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <PreprocessorDefinitions Condition="$(ConfigDebug)">_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ResourceCompile>
  </ItemDefinitionGroup>
  <!-- upx compression: Release
    Currently disabled.  Before enabling this, consider that the exe files won't
    be usable as base files for Ahk2Exe if they are compressed with UPX/mpress.
  -->
  <PropertyGroup Condition="false and $(ConfigRelease)">
    <PackerName>upx</PackerName>
    <PackerName Condition="'$(Platform)'=='x64'">mpress</PackerName>
    <PackerPath Condition="'$(PackerPath)'=='' AND exists('$(PackerName).exe')">$(PackerName).exe</PackerPath>
    <PackerPath Condition="'$(PackerPath)'=='' AND exists('..\$(PackerName).exe')">..\$(PackerName).exe</PackerPath>
    <PackerArgs Condition="'$(PackerArgs)'=='' AND '$(PackerName)'=='upx'"> --best --no-lzma --filter=73 --compress-icons=0</PackerArgs>
    <PackerArgs Condition="'$(PackerArgs)'=='' AND '$(PackerName)'=='mpress'"> -x</PackerArgs>
  </PropertyGroup>
  <ItemDefinitionGroup Condition="'$(PackerName)'!=''">
    <PostBuildEvent>
      <Command>echo $(PackerName).exe disabled or not found, skipping compression</Command>
      <Command Condition="exists('$(PackerPath)')">$(PackerPath)$(PackerArgs) "$(TargetPath)" &amp; exit 0</Command>
    </PostBuildEvent>
  </ItemDefinitionGroup>
  <!-- Visual C++ 2010 should place any newly created properties in these groups -->
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release(mbcs)|Win32'" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release(mbcs)|x64'" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Self-contained|Win32'" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Self-contained|x64'" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Self-contained(debug)|Win32'" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Self-contained(debug)|x64'" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Self-contained(mbcs)|Win32'" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Self-contained(mbcs)|x64'" />
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release(mbcs)|Win32'" />
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release(mbcs)|x64'" />
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Self-contained|Win32'" />
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Self-contained|x64'" />
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Self-contained(debug)|Win32'" />
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Self-contained(debug)|x64'" />
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Self-contained(mbcs)|Win32'" />
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Self-contained(mbcs)|x64'" />
  <!-- FILES -->
  <ItemGroup>
    <ClCompile Include="source\ahklib.cpp">
      <ExcludedFromBuild Condition="!$(ConfigDll)">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="source\ahkversion.cpp" />
    <ClCompile Include="source\application.cpp" />
    <ClCompile Include="source\AutoHotkey.cpp" />
    <ClCompile Include="source\MdFunc.cpp" />
    <ClCompile Include="source\clipboard.cpp" />
    <ClCompile Include="source\Debugger.cpp">
      <Optimization>MinSpace</Optimization>
    </ClCompile>
    <ClCompile Include="source\error.cpp" />
    <ClCompile Include="source\globaldata.cpp" />
    <ClCompile Include="source\hook.cpp" />
    <ClCompile Include="source\hotkey.cpp" />
    <ClCompile Include="source\input_object.cpp" />
    <ClCompile Include="source\keyboard_mouse.cpp" />
    <ClCompile Include="source\lib\CCallback.cpp" />
    <ClCompile Include="source\lib\DllCall.cpp" />
    <ClCompile Include="source\lib\drive.cpp">
      <Optimization>MinSpace</Optimization>
    </ClCompile>
    <ClCompile Include="source\lib\env.cpp">
      <Optimization>MinSpace</Optimization>
    </ClCompile>
    <ClCompile Include="source\lib\file.cpp" />
    <ClCompile Include="source\lib\Gui.ListView.cpp" />
    <ClCompile Include="source\lib\Gui.StatusBar.cpp" />
    <ClCompile Include="source\lib\Gui.TreeView.cpp" />
    <ClCompile Include="source\lib\input.cpp" />
    <ClCompile Include="source\lib\InputBox.cpp" />
    <ClCompile Include="source\lib\interop.cpp" />
    <ClCompile Include="source\lib\math.cpp" />
    <ClCompile Include="source\lib\pixel.cpp" />
    <ClCompile Include="source\lib\process.cpp">
      <Optimization>MinSpace</Optimization>
    </ClCompile>
    <ClCompile Include="source\lib\regex.cpp" />
    <ClCompile Include="source\lib\sound.cpp">
      <Optimization>MinSpace</Optimization>
    </ClCompile>
    <ClCompile Include="source\lib\string.cpp" />
    <ClCompile Include="source\lib\vars.cpp" />
    <ClCompile Include="source\lib\wait.cpp">
      <Optimization>MinSpace</Optimization>
    </ClCompile>
    <ClCompile Include="source\lib\win.cpp" />
    <ClCompile Include="source\os_version.cpp" />
    <ClCompile Include="source\pch.cpp">
      <PrecompiledHeader>Create</PrecompiledHeader>
    </ClCompile>
    <ClCompile Include="source\pch_min.cpp">
      <PrecompiledHeader>Create</PrecompiledHeader>
      <Optimization>MinSpace</Optimization>
      <MultiProcessorCompilation>false</MultiProcessorCompilation>
    </ClCompile>
    <ClCompile Include="source\script.cpp" />
    <ClCompile Include="source\script2.cpp" />
    <ClCompile Include="source\script_autoit.cpp" />
    <ClCompile Include="source\script_com.cpp" />
    <ClCompile Include="source\script_expression.cpp" />
    <ClCompile Include="source\script_gui.cpp" />
    <ClCompile Include="source\script_menu.cpp" />
    <ClCompile Include="source\script_module.cpp" />
    <ClCompile Include="source\script_object.cpp" />
    <ClCompile Include="source\script_object_bif.cpp" />
    <ClCompile Include="source\script_registry.cpp" />
    <ClCompile Include="source\SimpleHeap.cpp" />
    <ClCompile Include="source\StringConv.cpp" />
    <ClCompile Include="source\TextIO.cpp" />
    <ClCompile Include="source\util.cpp" />
    <ClCompile Include="source\var.cpp" />
    <ClCompile Include="source\window.cpp" />
    <ClCompile Include="source\WinGroup.cpp" />
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="source\abi.h" />
    <ClInclude Include="source\ahkversion.h" />
    <ClInclude Include="source\application.h" />
    <ClInclude Include="source\lib\functions.h" />
    <ClInclude Include="source\MdFunc.h" />
    <ClInclude Include="source\clipboard.h" />
    <ClInclude Include="source\config.h" />
    <ClInclude Include="source\debug.h" />
    <ClInclude Include="source\Debugger.h" />
    <ClInclude Include="source\defines.h" />
    <ClInclude Include="source\DispObject.h" />
    <ClInclude Include="source\globaldata.h" />
    <ClInclude Include="source\hook.h" />
    <ClInclude Include="source\hotkey.h" />
    <ClInclude Include="source\input_object.h" />
    <ClInclude Include="source\keyboard_mouse.h" />
    <ClInclude Include="source\KuString.h" />
    <ClInclude Include="source\lib_pcre\pcre\pcret.h" />
    <ClInclude Include="source\MdType.h" />
    <ClInclude Include="source\os_version.h" />
    <ClInclude Include="source\lib_pcre\pcre\pcre.h" />
    <ClInclude Include="source\qmath.h" />
    <ClInclude Include="source\resources\resource.h" />
    <ClInclude Include="source\script.h" />
    <ClInclude Include="source\script_com.h" />
    <ClInclude Include="source\script_func_impl.h" />
    <ClInclude Include="source\script_module.h" />
    <ClInclude Include="source\script_object.h" />
    <ClInclude Include="source\SimpleHeap.h" />
    <ClInclude Include="source\stdafx.h" />
    <ClInclude Include="source\StringConv.h" />
    <ClInclude Include="source\StrRet.h" />
    <ClInclude Include="source\TextIO.h" />
    <ClInclude Include="source\util.h" />
    <ClInclude Include="source\var.h" />
    <ClInclude Include="source\window.h" />
    <ClInclude Include="source\WinGroup.h" />
  </ItemGroup>
  <PropertyGroup>
    <Masm>ml /safeseh</Masm>
    <Masm Condition="'$(Platform)'=='x64'">ml64</Masm>
  </PropertyGroup>
  <ItemDefinitionGroup>
    <CustomBuild>
      <Command>$(Masm) /Cx /Fo"$(SolutionDir)temp\$(Platform)\%(Filename).obj" /c "%(FullPath)"</Command>
      <Message>
      </Message>
      <Outputs>$(SolutionDir)temp\$(Platform)\%(Filename).obj</Outputs>
    </CustomBuild>
    <ClCompile>
      <TreatWarningAsError Condition="!$(ConfigDebug)">true</TreatWarningAsError>
    </ClCompile>
  </ItemDefinitionGroup>
  <ItemGroup>
    <CustomBuild Include="source\libx64call\x64call.asm">
      <ExcludedFromBuild Condition="'$(Platform)'!='x64'">true</ExcludedFromBuild>
    </CustomBuild>
    <CustomBuild Include="source\libx64call\x64stub.asm">
      <ExcludedFromBuild Condition="'$(Platform)'!='x64'">true</ExcludedFromBuild>
    </CustomBuild>
    <CustomBuild Include="source\x86call.asm">
      <ExcludedFromBuild Condition="'$(Platform)'=='x64'">true</ExcludedFromBuild>
    </CustomBuild>
  </ItemGroup>
  <ItemGroup>
    <CustomBuild Include="source\resources\AutoHotkey.exe.manifest">
      <Command>cscript.exe //E:JScript //NoLogo "$(SolutionDir)source\scripts\minman.js" "%(FullPath)" "$(SolutionDir)temp\AutoHotkey.exe.manifest"</Command>
      <Outputs>$(SolutionDir)temp\AutoHotkey.exe.manifest</Outputs>
      <SubType>Designer</SubType>
    </CustomBuild>
    <None Include="source\resources\icon_filetype.ico" />
    <None Include="source\resources\icon_main.ico" />
    <None Include="source\resources\icon_pause.ico" />
    <None Include="source\resources\icon_pause_suspend.ico" />
    <None Include="source\resources\icon_suspend.ico" />
  </ItemGroup>
  <ItemGroup>
    <ResourceCompile Include="source\resources\AutoHotkey.rc" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="source\lib_pcre\lib_pcre.vcxproj">
      <Project>{39037993-9571-4DF2-8E39-CD2909043574}</Project>
      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
      <Private>false</Private>
      <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
      <LinkLibraryDependencies>true</LinkLibraryDependencies>
      <UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>
    </ProjectReference>
  </ItemGroup>
  <ItemGroup>
    <Natvis Include="debug.natvis" />
  </ItemGroup>
  <ItemGroup>
    <Midl Include="source\ahklib.idl">
      <ExcludedFromBuild Condition="!$(ConfigDll)">true</ExcludedFromBuild>
      <OutputDirectory>$(ProjectDir)source\autogenerated</OutputDirectory>
      <TypeLibraryName>%(Filename).tlb</TypeLibraryName>
    </Midl>
  </ItemGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <!-- add version info from git -->
  <ItemGroup>
    <AhkVersionInput Include="$(ProjectDir).git\logs\HEAD" />
    <AhkVersionOutput Include="$(IntDir)ahkversion.obj" />
    <AhkVersionOutput Include="$(IntDir)AutoHotkey.res" />
  </ItemGroup>
  <Target Name="ApplyMinSizePCH" BeforeTargets="ClCompile" Condition="!$(ConfigMinSize)">
    <!-- This target configures the PCH path for files with Optimization == MinSpace,
    which would otherwise need PCH turned off, causing slower build times.  MinSpace.pch
    is created when pch_min.cpp is compiled. -->
    <ItemGroup>
      <ClCompile Condition="'%(ClCompile.Optimization)' == 'MinSpace'">
        <PrecompiledHeaderOutputFile Condition="!$(ConfigDebug)">$(IntDir)MinSize.pch</PrecompiledHeaderOutputFile>
        <Optimization Condition="$(ConfigDebug)">Disabled</Optimization>
      </ClCompile>
    </ItemGroup>
  </Target>
  <Target Name="SetAhkVersion" Condition="Exists('@(AhkVersionInput)')" BeforeTargets="PrepareForBuild">
    <Exec Condition="'$(RawAhkVersion)'==''" Command="git describe --dirty --match v*" ConsoleToMSBuild="true" IgnoreExitCode="true" EchoOff="true">
      <Output PropertyName="GitDescription" TaskParameter="ConsoleOutput" />
    </Exec>
    <PropertyGroup Condition="'$(GitDescription)'!='' and '$(GitDescription.Substring(0,1))'=='v'">
      <RawAhkVersion>$([System.Text.RegularExpressions.Regex]::Replace($(GitDescription.Substring(1)), "-(?=\d+-)|-g|-dirty$", "+"))</RawAhkVersion>
      <AhkVersionN4>$([System.Text.RegularExpressions.Regex]::Replace($(GitDescription), ".*-(\d+)-g.*", "$1"))</AhkVersionN4>
      <AhkVersionN4 Condition="'$(AhkVersionN4)'=='$(GitDescription)'">0</AhkVersionN4>
      <AhkVersionN>$([System.Text.RegularExpressions.Regex]::Replace($(RawAhkVersion), "\.(\d+)([^\.\d].*)?", ",$1")),$(AhkVersionN4)</AhkVersionN>
      <AhkVersionN>$([System.Text.RegularExpressions.Regex]::Replace($(AhkVersionN), "^(\d+,\d+,)(\d+)$", "${1}0,$2"))</AhkVersionN>
    </PropertyGroup>
    <Message Text="RAW_AHK_VERSION sourced from git: '$(RawAhkVersion)'" Importance="high" />
    <Message Text="AHK_VERSION_N sourced from git: '$(AhkVersionN)'" Importance="high" />
    <ItemGroup Condition="'$(RawAhkVersion)'!=''">
      <ResourceCompile>
        <PreprocessorDefinitions>RAW_AHK_VERSION=\"$(RawAhkVersion)\";AHK_VERSION_N=$(AhkVersionN);%(PreprocessorDefinitions)</PreprocessorDefinitions>
      </ResourceCompile>
      <ClCompile>
        <PreprocessorDefinitions>RAW_AHK_VERSION="$(RawAhkVersion)";%(PreprocessorDefinitions)</PreprocessorDefinitions>
      </ClCompile>
    </ItemGroup>
  </Target>
  <Target Name="ForceBuildForSetAhkVersion" Condition="Exists('@(AhkVersionInput)')" BeforeTargets="PrepareForBuild" Inputs="@(AhkVersionInput)" Outputs="@(AhkVersionOutput)">
    <!-- This is a separate target because SetAhkVersion must execute unconditionally. -->
    <!-- Write tlog for VS "fast up-to-date check" to recognize when HEAD changes. -->
    <PropertyGroup>
      <AhkTlogHeader>^@(AhkVersionOutput,'|')</AhkTlogHeader>
    </PropertyGroup>
    <WriteLinesToFile File="$(TLogLocation)ahkversion.read.1.tlog" Lines="$(AhkTlogHeader);@(AhkVersionInput)" Overwrite="true" />
  </Target>
</Project>