Make props file work for builds using any prefix/DLL combinations

The existing wxwidgets.props wasn't particularly useful as it couldn't
be used with with wx DLLs when the user project configuration were not
called "DLL Debug" or "DLL Release" (and it makes little sense for the
user application to use "DLL" in its configuration names just because it
happens to use wx as DLL, of course).

It also couldn't be used with the libraries built using nmake with a
custom COMPILER_PREFIX, which, significantly, includes the official MSW
binaries.

Try to fix both problems by checking for the actually existing libraries
and using whichever ones we find. This is somewhat surprising for a
project file to do, but it seems like it should result in the most
useful behaviour in practice as it allows user projects importing this
file to work out of the box in all of the following situations:

  - Using official wxMSW binaries.
  - Building wxMSW from source without any customization.
  - Building wxMSW from source using reasonable custom compiler prefix.
This commit is contained in:
Vadim Zeitlin
2020-05-19 00:43:37 +02:00
parent 59ad9f46e6
commit e48d740ed7

View File

@@ -3,28 +3,127 @@
This is a property sheet to be included in MSVS projects of the applications
using wxWidgets. Use "View|Property Manager" and choose "Add Existing
Property Sheet..." from the context menu to add it from the IDE or edit your
.vcxproj file directly and add <Import Project="path\to\wxwidgets.props">
.vcxproj file directly and add <Import Project="$(WXWIN)\wxwidgets.props">
tag to it.
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project ToolsVersion="4.0" InitialTargets="CheckWXLibs" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets">
<Import Project="build/msw/wx_setup.props" />
<Import Project="build/msw/wx_local.props" Condition="exists('build/msw/wx_local.props')" />
</ImportGroup>
<PropertyGroup Label="UserMacros" Condition="'$(Configuration)'=='DLL Debug' or '$(Configuration)'=='DLL Release'">
<PropertyGroup Label="UserMacros">
<!--
We have several possible choices for the compiler prefix:
- Default one is "vc", we want to use this to allow building this project
when wx was built from source with the default options.
- Version-specific prefix of the form "vcNNN", which is used in some other
projects.
- Version-specific but ABI-compatible prefix which differs from the
previous value in that it's the same "vc14x" for MSVS 2015/2017/2019
which are ABI-compatible with each other. This is used by official wx
binaries, so we want to check this one too.
-->
<wxToolsetVersion Condition="'$(VisualStudioVersion)' == '10.0'">100</wxToolsetVersion>
<wxToolsetVersion Condition="'$(VisualStudioVersion)' == '11.0'">110</wxToolsetVersion>
<wxToolsetVersion Condition="'$(VisualStudioVersion)' == '12.0'">120</wxToolsetVersion>
<wxToolsetVersion Condition="'$(VisualStudioVersion)' == '14.0'">140</wxToolsetVersion>
<wxToolsetVersion Condition="'$(VisualStudioVersion)' == '15.0'">141</wxToolsetVersion>
<wxToolsetVersion Condition="'$(VisualStudioVersion)' == '16.0'">142</wxToolsetVersion>
<wxToolsetVerABICompat Condition="'$(VisualStudioVersion)' == '10.0'">100</wxToolsetVerABICompat>
<wxToolsetVerABICompat Condition="'$(VisualStudioVersion)' == '11.0'">110</wxToolsetVerABICompat>
<wxToolsetVerABICompat Condition="'$(VisualStudioVersion)' == '12.0'">120</wxToolsetVerABICompat>
<wxToolsetVerABICompat Condition="'$(VisualStudioVersion)' == '14.0'">14x</wxToolsetVerABICompat>
<wxToolsetVerABICompat Condition="'$(VisualStudioVersion)' == '15.0'">14x</wxToolsetVerABICompat>
<wxToolsetVerABICompat Condition="'$(VisualStudioVersion)' == '16.0'">14x</wxToolsetVerABICompat>
</PropertyGroup>
<!--
Try to find some existing wxWidgets libraries.
Note that we use wxBaseLibNamePrefix for both static libs and DLL cases,
it's simpler than constructing the DLL name and still works as we must have
the import library with this name in the DLL directory too.
-->
<Choose>
<When Condition="Exists('$(MSBuildThisFileDirectory)lib\vc$(wxToolsetVerABICompat)$(wxArchSuffix)_dll$(wxCfg)\$(wxBaseLibNamePrefix).lib')">
<PropertyGroup Label="UserMacros">
<wxUsingVersionABICompat>1</wxUsingVersionABICompat>
<wxUsingDll>1</wxUsingDll>
<wxLibOrDllDir>$(MSBuildThisFileDirectory)lib\vc$(wxToolsetVerABICompat)$(wxArchSuffix)_dll$(wxCfg)</wxLibOrDllDir>
</PropertyGroup>
</When>
<When Condition="Exists('$(MSBuildThisFileDirectory)lib\vc$(wxToolsetVerABICompat)$(wxArchSuffix)_lib$(wxCfg)\$(wxBaseLibNamePrefix).lib')">
<PropertyGroup Label="UserMacros">
<wxUsingVersionABICompat>1</wxUsingVersionABICompat>
<wxUsingLib>1</wxUsingLib>
<wxLibOrDllDir>$(MSBuildThisFileDirectory)lib\vc$(wxToolsetVerABICompat)$(wxArchSuffix)_lib$(wxCfg)</wxLibOrDllDir>
</PropertyGroup>
</When>
<When Condition="Exists('$(MSBuildThisFileDirectory)lib\vc$(wxToolsetVersion)$(wxArchSuffix)_dll$(wxCfg)\$(wxBaseLibNamePrefix).lib')">
<PropertyGroup Label="UserMacros">
<wxUsingVersion>1</wxUsingVersion>
<wxUsingDll>1</wxUsingDll>
<wxLibOrDllDir>$(MSBuildThisFileDirectory)lib\vc$(wxToolsetVersion)$(wxArchSuffix)_dll$(wxCfg)</wxLibOrDllDir>
</PropertyGroup>
</When>
<When Condition="Exists('$(MSBuildThisFileDirectory)lib\vc$(wxToolsetVersion)$(wxArchSuffix)_lib$(wxCfg)\$(wxBaseLibNamePrefix).lib')">
<PropertyGroup Label="UserMacros">
<wxUsingVersion>1</wxUsingVersion>
<wxUsingLib>1</wxUsingLib>
<wxLibOrDllDir>$(MSBuildThisFileDirectory)lib\vc$(wxToolsetVersion)$(wxArchSuffix)_lib$(wxCfg)</wxLibOrDllDir>
</PropertyGroup>
</When>
<When Condition="Exists('$(MSBuildThisFileDirectory)lib\vc$(wxArchSuffix)_dll$(wxCfg)\$(wxBaseLibNamePrefix).lib')">
<PropertyGroup Label="UserMacros">
<wxUsingDll>1</wxUsingDll>
<wxLibOrDllDir>$(MSBuildThisFileDirectory)lib\vc$(wxArchSuffix)_dll$(wxCfg)</wxLibOrDllDir>
</PropertyGroup>
</When>
<When Condition="Exists('$(MSBuildThisFileDirectory)lib\vc$(wxArchSuffix)_lib$(wxCfg)\$(wxBaseLibNamePrefix).lib')">
<PropertyGroup Label="UserMacros">
<wxUsingLib>1</wxUsingLib>
<wxLibOrDllDir>$(MSBuildThisFileDirectory)lib\vc$(wxArchSuffix)_lib$(wxCfg)</wxLibOrDllDir>
</PropertyGroup>
</When>
</Choose>
<PropertyGroup Label="UserMacros" Condition="$(wxUsingVersionABICompat) != ''">
<wxVersionDefine>wxMSVC_VERSION_AUTO;wxMSVC_VERSION_ABI_COMPAT</wxVersionDefine>
</PropertyGroup>
<PropertyGroup Label="UserMacros" Condition="$(wxUsingVersion) != ''">
<wxVersionDefine>wxMSVC_VERSION_AUTO</wxVersionDefine>
</PropertyGroup>
<PropertyGroup Label="UserMacros" Condition="$(wxUsingDll) != ''">
<wxUsingDllDefine>WXUSINGDLL</wxUsingDllDefine>
</PropertyGroup>
<Target Name="CheckWXLibs">
<Error
Condition="'$(wxUsingDll)$(wxUsingLib)' == ''"
Text="wxWidgets libraries not found under &quot;$(MSBuildThisFileDirectory)lib&quot;." />
</Target>
<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>__WXMSW__;$(wxUsingDllDefine);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>__WXMSW__;$(wxUsingDllDefine);$(wxVersionDefine);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(MSBuildThisFileDirectory)include\msvc;$(MSBuildThisFileDirectory)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>__WXMSW__;$(wxUsingDllDefine);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(MSBuildThisFileDirectory)lib\$(wxOutDirName)\$(wxToolkitPrefix)$(wxSuffix);$(MSBuildThisFileDirectory)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(wxLibOrDllDir)\$(wxToolkitPrefix)$(wxSuffix);$(MSBuildThisFileDirectory)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<Link>
<AdditionalLibraryDirectories>$(MSBuildThisFileDirectory)lib\$(wxOutDirName);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>$(wxLibOrDllDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
</Project>