summaryrefslogtreecommitdiffstats
path: root/external/cppunit
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:06:44 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:06:44 +0000
commited5640d8b587fbcfed7dd7967f3de04b37a76f26 (patch)
tree7a5f7c6c9d02226d7471cb3cc8fbbf631b415303 /external/cppunit
parentInitial commit. (diff)
downloadlibreoffice-upstream.tar.xz
libreoffice-upstream.zip
Adding upstream version 4:7.4.7.upstream/4%7.4.7upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'external/cppunit')
-rw-r--r--external/cppunit/CPPUNIT_PLUGIN_EXPORT.patch.011
-rw-r--r--external/cppunit/ExternalProject_cppunit.mk62
-rw-r--r--external/cppunit/Makefile7
-rw-r--r--external/cppunit/Module_cppunit.mk17
-rw-r--r--external/cppunit/README3
-rw-r--r--external/cppunit/UnpackedTarball_cppunit.mk33
-rw-r--r--external/cppunit/disable-dynloading.patch25
-rw-r--r--external/cppunit/enable-win32-debug.patch34
-rw-r--r--external/cppunit/order.patch.025
-rw-r--r--external/cppunit/rtti.patch.015
-rw-r--r--external/cppunit/unix.patch10
-rw-r--r--external/cppunit/windows-arm64.patch.1786
-rw-r--r--external/cppunit/windows.patch50
13 files changed, 1078 insertions, 0 deletions
diff --git a/external/cppunit/CPPUNIT_PLUGIN_EXPORT.patch.0 b/external/cppunit/CPPUNIT_PLUGIN_EXPORT.patch.0
new file mode 100644
index 000000000..a764be95a
--- /dev/null
+++ b/external/cppunit/CPPUNIT_PLUGIN_EXPORT.patch.0
@@ -0,0 +1,11 @@
+--- include/cppunit/plugin/TestPlugIn.h
++++ include/cppunit/plugin/TestPlugIn.h
+@@ -111,7 +111,7 @@
+ /*! \brief Type of the function exported by a plug-in.
+ * \ingroup WritingTestPlugIn
+ */
+-typedef CppUnitTestPlugIn *(*TestPlugInSignature)();
++extern "C" { typedef CppUnitTestPlugIn *(*TestPlugInSignature)(); }
+
+
+ /*! \brief Implements the function exported by the test plug-in
diff --git a/external/cppunit/ExternalProject_cppunit.mk b/external/cppunit/ExternalProject_cppunit.mk
new file mode 100644
index 000000000..f0b4ff06a
--- /dev/null
+++ b/external/cppunit/ExternalProject_cppunit.mk
@@ -0,0 +1,62 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_ExternalProject_ExternalProject,cppunit))
+
+$(eval $(call gb_ExternalProject_register_targets,cppunit,\
+ build \
+))
+
+ifeq ($(OS),WNT)
+$(call gb_ExternalProject_get_state_target,cppunit,build) :
+ $(call gb_Trace_StartRange,cppunit,EXTERNAL)
+ $(call gb_ExternalProject_run,build,\
+ PROFILEFLAGS="$(gb_MSBUILD_CONFIG) \
+ /p:Platform=$(gb_MSBUILD_PLATFORM) \
+ /p:PlatformToolset=$(VCTOOLSET) /p:VisualStudioVersion=$(VCVER) /ToolsVersion:Current \
+ $(if $(filter 10,$(WINDOWS_SDK_VERSION)),/p:WindowsTargetPlatformVersion=$(UCRTVERSION))" \
+ && msbuild.exe cppunit_dll.vcxproj /p:Configuration=$${PROFILEFLAGS} \
+ && cd ../DllPlugInTester \
+ && msbuild.exe DllPlugInTester.vcxproj /p:Configuration=$${PROFILEFLAGS} \
+ ,src/cppunit)
+ $(call gb_Trace_EndRange,cppunit,EXTERNAL)
+else
+
+cppunit_CXXFLAGS=$(CXXFLAGS) $(gb_EMSCRIPTEN_CXXFLAGS)
+
+cppunit_CXXFLAGS+=$(gb_COMPILERDEFS_STDLIB_DEBUG)
+
+ifneq (,$(call gb_LinkTarget__symbols_enabled,cppunit))
+cppunit_CXXFLAGS+=-g
+endif
+
+$(call gb_ExternalProject_get_state_target,cppunit,build) :
+ $(call gb_Trace_StartRange,cppunit,EXTERNAL)
+ $(call gb_ExternalProject_run,build,\
+ $(gb_RUN_CONFIGURE) ./configure \
+ --disable-dependency-tracking \
+ $(if $(filter TRUE,$(DISABLE_DYNLOADING)),--disable-shared,--disable-static) \
+ --disable-doxygen \
+ --disable-html-docs \
+ --disable-latex-docs \
+ --disable-werror \
+ $(gb_CONFIGURE_PLATFORMS) \
+ $(if $(filter MACOSX,$(OS)),--prefix=/@.__________________________________________________NONE) \
+ $(if $(filter WNT,$(OS)),LDFLAGS="-Wl$(COMMA)--enable-runtime-pseudo-reloc-v2") \
+ $(if $(filter SOLARIS,$(OS)),LIBS="-lm") \
+ $(if $(filter ANDROID,$(OS)),LIBS="$(gb_STDLIBS)") \
+ $(if $(verbose),--disable-silent-rules,--enable-silent-rules) \
+ CXXFLAGS="$(cppunit_CXXFLAGS)" \
+ && cd src \
+ && $(MAKE) \
+ )
+ $(call gb_Trace_EndRange,cppunit,EXTERNAL)
+endif
+
+# vim: set noet sw=4 ts=4:
diff --git a/external/cppunit/Makefile b/external/cppunit/Makefile
new file mode 100644
index 000000000..e4968cf85
--- /dev/null
+++ b/external/cppunit/Makefile
@@ -0,0 +1,7 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+
+module_directory:=$(dir $(realpath $(firstword $(MAKEFILE_LIST))))
+
+include $(module_directory)/../../solenv/gbuild/partial_build.mk
+
+# vim: set noet sw=4 ts=4:
diff --git a/external/cppunit/Module_cppunit.mk b/external/cppunit/Module_cppunit.mk
new file mode 100644
index 000000000..296feeb74
--- /dev/null
+++ b/external/cppunit/Module_cppunit.mk
@@ -0,0 +1,17 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_Module_Module,cppunit))
+
+$(eval $(call gb_Module_add_targets,cppunit,\
+ UnpackedTarball_cppunit \
+ ExternalProject_cppunit \
+))
+
+# vim: set noet sw=4 ts=4:
diff --git a/external/cppunit/README b/external/cppunit/README
new file mode 100644
index 000000000..e1d4e82a5
--- /dev/null
+++ b/external/cppunit/README
@@ -0,0 +1,3 @@
+C++ port of the JUnit framework for unit testing.
+
+From [http://www.freedesktop.org/wiki/Software/cppunit/]
diff --git a/external/cppunit/UnpackedTarball_cppunit.mk b/external/cppunit/UnpackedTarball_cppunit.mk
new file mode 100644
index 000000000..5dc750bbd
--- /dev/null
+++ b/external/cppunit/UnpackedTarball_cppunit.mk
@@ -0,0 +1,33 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_UnpackedTarball_UnpackedTarball,cppunit))
+
+$(eval $(call gb_UnpackedTarball_set_tarball,cppunit,$(CPPUNIT_TARBALL),,cppunit))
+
+$(eval $(call gb_UnpackedTarball_update_autoconf_configs,cppunit))
+
+# * external/cppunit/order.patch.0 upstreamed at <https://gerrit.libreoffice.org/c/cppunit/+/123963>
+# "Run tests in deterministic order":
+$(eval $(call gb_UnpackedTarball_add_patches,cppunit,\
+ external/cppunit/windows.patch \
+ external/cppunit/unix.patch \
+ external/cppunit/CPPUNIT_PLUGIN_EXPORT.patch.0 \
+ external/cppunit/enable-win32-debug.patch \
+ external/cppunit/rtti.patch.0 \
+ external/cppunit/order.patch.0 \
+ external/cppunit/windows-arm64.patch.1 \
+))
+ifeq ($(DISABLE_DYNLOADING),TRUE)
+$(eval $(call gb_UnpackedTarball_add_patches,cppunit,\
+ external/cppunit/disable-dynloading.patch \
+))
+endif
+
+# vim: set noet sw=4 ts=4:
diff --git a/external/cppunit/disable-dynloading.patch b/external/cppunit/disable-dynloading.patch
new file mode 100644
index 000000000..62ed1deeb
--- /dev/null
+++ b/external/cppunit/disable-dynloading.patch
@@ -0,0 +1,25 @@
+--- build/cppunit-1.13.1/include/cppunit/plugin/TestPlugIn.h
++++ misc/build/cppunit-1.13.1/include/cppunit/plugin/TestPlugIn.h
+@@ -106,7 +106,9 @@
+ * CppUnitTestPlugIn *CPPUNIT_PLUGIN_EXPORTED_NAME(void);
+ * \endcode
+ */
++#ifndef CPPUNIT_PLUGIN_EXPORTED_NAME
+ #define CPPUNIT_PLUGIN_EXPORTED_NAME cppunitTestPlugIn
++#endif
+
+ /*! \brief Type of the function exported by a plug-in.
+ * \ingroup WritingTestPlugIn
+@@ -143,6 +143,12 @@
+ #define CPPUNIT_PLUGIN_IMPLEMENT_MAIN() \
+ typedef char __CppUnitPlugInImplementMainDummyTypeDef
+
++// Actually this is for iOS and Android where we build the cppunit tests libraries
++// as plain archives and just link them statically into test fixture programs,
++// and don't want any stinking duplicate main(), but shouldn't hurt for MacOSX either.
++#elif defined(__APPLE__) || defined(__ANDROID__) || defined(__EMSCRIPTEN__)
++#define CPPUNIT_PLUGIN_IMPLEMENT_MAIN() \
++ typedef char __CppUnitPlugInImplementMainDummyTypeDef
+ // Unix
+ #elif defined(CPPUNIT_HAVE_UNIX_DLL_LOADER) || defined(CPPUNIT_HAVE_UNIX_SHL_LOADER)
+ #define CPPUNIT_PLUGIN_IMPLEMENT_MAIN() \
diff --git a/external/cppunit/enable-win32-debug.patch b/external/cppunit/enable-win32-debug.patch
new file mode 100644
index 000000000..2c7f4f956
--- /dev/null
+++ b/external/cppunit/enable-win32-debug.patch
@@ -0,0 +1,34 @@
+--- misc/cppunit-1.14.0/src/cppunit/cppunit_dll.vcxproj
++++ misc/build/cppunit-1.14.0/src/cppunit/cppunit_dll.vcxproj
+@@ -190,7 +190,6 @@
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <WarningLevel>Level3</WarningLevel>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+- <DebugInformationFormat>OldStyle</DebugInformationFormat>
+ <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;CPPUNIT_BUILD_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AssemblerListingLocation>.\ReleaseDll\</AssemblerListingLocation>
+@@ -222,6 +221,7 @@
+ <Link>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <LinkDLL>true</LinkDLL>
++ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OutputFile>.\ReleaseDll\cppunit_dll.dll</OutputFile>
+ <ImportLibrary>.\ReleaseDll\cppunit_dll.lib</ImportLibrary>
+@@ -237,7 +237,6 @@
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <WarningLevel>Level3</WarningLevel>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+- <DebugInformationFormat>OldStyle</DebugInformationFormat>
+ <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;CPPUNIT_BUILD_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AssemblerListingLocation>.\ReleaseDll\</AssemblerListingLocation>
+@@ -266,6 +266,7 @@
+ <Link>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <LinkDLL>true</LinkDLL>
++ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OutputFile>.\ReleaseDll\cppunit_dll.dll</OutputFile>
+ <ImportLibrary>.\ReleaseDll\cppunit_dll.lib</ImportLibrary>
diff --git a/external/cppunit/order.patch.0 b/external/cppunit/order.patch.0
new file mode 100644
index 000000000..523b3cd70
--- /dev/null
+++ b/external/cppunit/order.patch.0
@@ -0,0 +1,25 @@
+--- src/cppunit/TestFactoryRegistry.cpp
++++ src/cppunit/TestFactoryRegistry.cpp
+@@ -143,13 +143,21 @@
+ void
+ TestFactoryRegistry::addTestToSuite( TestSuite *suite )
+ {
++ std::multimap<std::string, Test *> sorted;
+ for ( Factories::iterator it = m_factories.begin();
+ it != m_factories.end();
+ ++it )
+ {
+ TestFactory *factory = *it;
+- suite->addTest( factory->makeTest() );
++ Test *test = factory->makeTest();
++ sorted.insert({test->getName(), test});
+ }
++ // In the unlikely case of multiple Tests with identical names, those will
++ // still be added in random order:
++ for (auto const &i: sorted)
++ {
++ suite->addTest( i.second );
++ }
+ }
+
+
diff --git a/external/cppunit/rtti.patch.0 b/external/cppunit/rtti.patch.0
new file mode 100644
index 000000000..38d2e6a90
--- /dev/null
+++ b/external/cppunit/rtti.patch.0
@@ -0,0 +1,15 @@
+--- include/cppunit/config/CppUnitApi.h
++++ include/cppunit/config/CppUnitApi.h
+@@ -20,6 +20,12 @@
+ #define CPPUNIT_NEED_DLL_DECL 1
+ #endif
+
++#elif defined __GNUC__ //TODO: actually only works for modern enough GCC
++
++#define CPPUNIT_API __attribute__ ((visibility("default")))
++#undef CPPUNIT_NEED_DLL_DECL
++#define CPPUNIT_NEED_DLL_DECL 0
++
+ #endif
+
+
diff --git a/external/cppunit/unix.patch b/external/cppunit/unix.patch
new file mode 100644
index 000000000..e75e72c6f
--- /dev/null
+++ b/external/cppunit/unix.patch
@@ -0,0 +1,10 @@
+--- misc/cppunit-1.13.1/src/cppunit/UnixDynamicLibraryManager.cpp
++++ misc/build/cppunit-1.13.1/src/cppunit/UnixDynamicLibraryManager.cpp
+@@ -20,7 +20,6 @@
+ void
+ DynamicLibraryManager::doReleaseLibrary()
+ {
+- ::dlclose( m_libraryHandle);
+ }
+
+
diff --git a/external/cppunit/windows-arm64.patch.1 b/external/cppunit/windows-arm64.patch.1
new file mode 100644
index 000000000..0e41fa005
--- /dev/null
+++ b/external/cppunit/windows-arm64.patch.1
@@ -0,0 +1,786 @@
+diff -ur cppunit-1.15.1.orig/src/cppunit/cppunit_dll.vcxproj cppunit-1.15.1/src/cppunit/cppunit_dll.vcxproj
+--- cppunit-1.15.1.orig/src/cppunit/cppunit_dll.vcxproj 2019-11-28 20:35:43.000000000 +0100
++++ cppunit-1.15.1/src/cppunit/cppunit_dll.vcxproj 2020-08-03 03:04:20.181281900 +0200
+@@ -1,6 +1,10 @@
+ <?xml version="1.0" encoding="utf-8"?>
+ <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
++ <ProjectConfiguration Include="Debug|ARM64">
++ <Configuration>Debug</Configuration>
++ <Platform>ARM64</Platform>
++ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+@@ -9,6 +13,10 @@
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
++ <ProjectConfiguration Include="Release|ARM64">
++ <Configuration>Release</Configuration>
++ <Platform>ARM64</Platform>
++ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+@@ -34,6 +42,11 @@
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
++ <ConfigurationType>DynamicLibrary</ConfigurationType>
++ <UseOfMfc>false</UseOfMfc>
++ <CharacterSet>MultiByte</CharacterSet>
++ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+@@ -44,6 +57,11 @@
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
++ <ConfigurationType>DynamicLibrary</ConfigurationType>
++ <UseOfMfc>false</UseOfMfc>
++ <CharacterSet>MultiByte</CharacterSet>
++ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+@@ -55,6 +73,10 @@
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props" />
+ </ImportGroup>
++ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="PropertySheets">
++ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
++ <Import Project="$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props" />
++ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props" />
+@@ -63,6 +85,10 @@
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props" />
+ </ImportGroup>
++ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="PropertySheets">
++ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
++ <Import Project="$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props" />
++ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <OutDir>.\DebugDll\</OutDir>
+@@ -76,6 +102,12 @@
+ <LinkIncremental>true</LinkIncremental>
+ <TargetName>cppunitd_dll</TargetName>
+ </PropertyGroup>
++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
++ <OutDir>.\DebugDll\</OutDir>
++ <IntDir>.\DebugDll\</IntDir>
++ <LinkIncremental>true</LinkIncremental>
++ <TargetName>cppunitd_dll</TargetName>
++ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <OutDir>.\ReleaseDll\</OutDir>
+ <IntDir>.\ReleaseDll\</IntDir>
+@@ -86,6 +116,11 @@
+ <IntDir>.\ReleaseDll\</IntDir>
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
++ <OutDir>.\ReleaseDll\</OutDir>
++ <IntDir>.\ReleaseDll\</IntDir>
++ <LinkIncremental>false</LinkIncremental>
++ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+@@ -180,6 +213,52 @@
+ <AdditionalDependencies>odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
++ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
++ <ClCompile>
++ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
++ <InlineFunctionExpansion>Default</InlineFunctionExpansion>
++ <FunctionLevelLinking>false</FunctionLevelLinking>
++ <Optimization>Disabled</Optimization>
++ <SuppressStartupBanner>true</SuppressStartupBanner>
++ <WarningLevel>Level3</WarningLevel>
++ <RuntimeTypeInfo>true</RuntimeTypeInfo>
++ <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
++ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;CPPUNIT_BUILD_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
++ <AssemblerListingLocation>.\DebugDll\</AssemblerListingLocation>
++ <PrecompiledHeaderOutputFile>.\DebugDll\cppunit_dll.pch</PrecompiledHeaderOutputFile>
++ <ObjectFileName>.\DebugDll\</ObjectFileName>
++ <ProgramDataBaseFileName>.\DebugDll\</ProgramDataBaseFileName>
++ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
++ </ClCompile>
++ <PostBuildEvent>
++ <Command>copy "$(TargetPath)" ..\..\lib\$(TargetName).dll
++copy "$(TargetDir)$(TargetName).lib" ..\..\lib\$(TargetName).lib</Command>
++ <Message>Copying target to lib/</Message>
++ </PostBuildEvent>
++ <Midl>
++ <SuppressStartupBanner>true</SuppressStartupBanner>
++ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
++ <TypeLibraryName>.\DebugDll\cppunit_dll.tlb</TypeLibraryName>
++ <MkTypLibCompatible>true</MkTypLibCompatible>
++ </Midl>
++ <ResourceCompile>
++ <Culture>0x040c</Culture>
++ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
++ </ResourceCompile>
++ <Bscmake>
++ <SuppressStartupBanner>true</SuppressStartupBanner>
++ <OutputFile>.\DebugDll\cppunit_dll.bsc</OutputFile>
++ </Bscmake>
++ <Link>
++ <SuppressStartupBanner>true</SuppressStartupBanner>
++ <LinkDLL>true</LinkDLL>
++ <GenerateDebugInformation>true</GenerateDebugInformation>
++ <SubSystem>Console</SubSystem>
++ <OutputFile>DebugDll\cppunitd_dll.dll</OutputFile>
++ <ImportLibrary>.\DebugDll\cppunitd_dll.lib</ImportLibrary>
++ <AdditionalDependencies>odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
++ </Link>
++ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+@@ -267,6 +345,52 @@
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <LinkDLL>true</LinkDLL>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
++ <SubSystem>Console</SubSystem>
++ <OutputFile>.\ReleaseDll\cppunit_dll.dll</OutputFile>
++ <ImportLibrary>.\ReleaseDll\cppunit_dll.lib</ImportLibrary>
++ <AdditionalDependencies>odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
++ </Link>
++ </ItemDefinitionGroup>
++ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
++ <ClCompile>
++ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
++ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
++ <StringPooling>true</StringPooling>
++ <FunctionLevelLinking>true</FunctionLevelLinking>
++ <Optimization>MaxSpeed</Optimization>
++ <SuppressStartupBanner>true</SuppressStartupBanner>
++ <WarningLevel>Level3</WarningLevel>
++ <RuntimeTypeInfo>true</RuntimeTypeInfo>
++ <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
++ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;CPPUNIT_BUILD_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
++ <AssemblerListingLocation>.\ReleaseDll\</AssemblerListingLocation>
++ <PrecompiledHeaderOutputFile>.\ReleaseDll\cppunit_dll.pch</PrecompiledHeaderOutputFile>
++ <ObjectFileName>.\ReleaseDll\</ObjectFileName>
++ <ProgramDataBaseFileName>.\ReleaseDll\</ProgramDataBaseFileName>
++ </ClCompile>
++ <PostBuildEvent>
++ <Command>copy "$(TargetPath)" ..\..\lib\$(TargetName).dll
++copy "$(TargetDir)$(TargetName).lib" ..\..\lib\$(TargetName).lib</Command>
++ <Message>Copying target to lib/</Message>
++ </PostBuildEvent>
++ <Midl>
++ <SuppressStartupBanner>true</SuppressStartupBanner>
++ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
++ <TypeLibraryName>.\ReleaseDll\cppunit_dll.tlb</TypeLibraryName>
++ <MkTypLibCompatible>true</MkTypLibCompatible>
++ </Midl>
++ <ResourceCompile>
++ <Culture>0x040c</Culture>
++ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
++ </ResourceCompile>
++ <Bscmake>
++ <SuppressStartupBanner>true</SuppressStartupBanner>
++ <OutputFile>.\ReleaseDll\cppunit_dll.bsc</OutputFile>
++ </Bscmake>
++ <Link>
++ <SuppressStartupBanner>true</SuppressStartupBanner>
++ <LinkDLL>true</LinkDLL>
++ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OutputFile>.\ReleaseDll\cppunit_dll.dll</OutputFile>
+ <ImportLibrary>.\ReleaseDll\cppunit_dll.lib</ImportLibrary>
+diff -ur cppunit-1.15.1.orig/src/DllPlugInTester/DllPlugInTester.vcxproj cppunit-1.15.1/src/DllPlugInTester/DllPlugInTester.vcxproj
+--- cppunit-1.15.1.orig/src/DllPlugInTester/DllPlugInTester.vcxproj 2019-11-28 20:35:43.000000000 +0100
++++ cppunit-1.15.1/src/DllPlugInTester/DllPlugInTester.vcxproj 2020-08-03 03:05:06.310642100 +0200
+@@ -1,6 +1,10 @@
+ <?xml version="1.0" encoding="utf-8"?>
+ <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
++ <ProjectConfiguration Include="Debug Static|ARM64">
++ <Configuration>Debug Static</Configuration>
++ <Platform>ARM64</Platform>
++ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug Static|Win32">
+ <Configuration>Debug Static</Configuration>
+ <Platform>Win32</Platform>
+@@ -9,6 +13,10 @@
+ <Configuration>Debug Static</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
++ <ProjectConfiguration Include="Debug Unicode|ARM64">
++ <Configuration>Debug Unicode</Configuration>
++ <Platform>ARM64</Platform>
++ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug Unicode|Win32">
+ <Configuration>Debug Unicode</Configuration>
+ <Platform>Win32</Platform>
+@@ -17,6 +25,10 @@
+ <Configuration>Debug Unicode</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
++ <ProjectConfiguration Include="Debug|ARM64">
++ <Configuration>Debug</Configuration>
++ <Platform>ARM64</Platform>
++ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+@@ -25,6 +37,10 @@
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
++ <ProjectConfiguration Include="Release Static|ARM64">
++ <Configuration>Release Static</Configuration>
++ <Platform>ARM64</Platform>
++ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Static|Win32">
+ <Configuration>Release Static</Configuration>
+ <Platform>Win32</Platform>
+@@ -33,6 +49,10 @@
+ <Configuration>Release Static</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
++ <ProjectConfiguration Include="Release Unicode|ARM64">
++ <Configuration>Release Unicode</Configuration>
++ <Platform>ARM64</Platform>
++ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Unicode|Win32">
+ <Configuration>Release Unicode</Configuration>
+ <Platform>Win32</Platform>
+@@ -41,6 +61,10 @@
+ <Configuration>Release Unicode</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
++ <ProjectConfiguration Include="Release|ARM64">
++ <Configuration>Release</Configuration>
++ <Platform>ARM64</Platform>
++ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+@@ -66,6 +90,11 @@
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|ARM64'" Label="Configuration">
++ <ConfigurationType>Application</ConfigurationType>
++ <UseOfMfc>false</UseOfMfc>
++ <CharacterSet>MultiByte</CharacterSet>
++ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+@@ -76,6 +105,11 @@
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
++ <ConfigurationType>Application</ConfigurationType>
++ <UseOfMfc>false</UseOfMfc>
++ <CharacterSet>MultiByte</CharacterSet>
++ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+@@ -86,6 +120,11 @@
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
++ <ConfigurationType>Application</ConfigurationType>
++ <UseOfMfc>false</UseOfMfc>
++ <CharacterSet>MultiByte</CharacterSet>
++ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Static|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+@@ -96,6 +135,11 @@
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Static|ARM64'" Label="Configuration">
++ <ConfigurationType>Application</ConfigurationType>
++ <UseOfMfc>false</UseOfMfc>
++ <CharacterSet>MultiByte</CharacterSet>
++ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+@@ -106,6 +150,11 @@
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static|ARM64'" Label="Configuration">
++ <ConfigurationType>Application</ConfigurationType>
++ <UseOfMfc>false</UseOfMfc>
++ <CharacterSet>MultiByte</CharacterSet>
++ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+@@ -116,6 +165,11 @@
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|ARM64'" Label="Configuration">
++ <ConfigurationType>Application</ConfigurationType>
++ <UseOfMfc>false</UseOfMfc>
++ <CharacterSet>MultiByte</CharacterSet>
++ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+@@ -127,6 +181,10 @@
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props" />
+ </ImportGroup>
++ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|ARM64'" Label="PropertySheets">
++ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
++ <Import Project="$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props" />
++ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props" />
+@@ -135,6 +193,10 @@
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props" />
+ </ImportGroup>
++ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="PropertySheets">
++ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
++ <Import Project="$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props" />
++ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props" />
+@@ -143,6 +205,10 @@
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props" />
+ </ImportGroup>
++ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="PropertySheets">
++ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
++ <Import Project="$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props" />
++ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Static|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props" />
+@@ -151,6 +217,10 @@
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props" />
+ </ImportGroup>
++ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Static|ARM64'" Label="PropertySheets">
++ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
++ <Import Project="$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props" />
++ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props" />
+@@ -159,6 +229,10 @@
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props" />
+ </ImportGroup>
++ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static|ARM64'" Label="PropertySheets">
++ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
++ <Import Project="$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props" />
++ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props" />
+@@ -167,6 +241,10 @@
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props" />
+ </ImportGroup>
++ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|ARM64'" Label="PropertySheets">
++ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
++ <Import Project="$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props" />
++ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">
+ <OutDir>.\ReleaseUnicode\</OutDir>
+@@ -180,6 +258,12 @@
+ <LinkIncremental>false</LinkIncremental>
+ <TargetName>$(ProjectName)u</TargetName>
+ </PropertyGroup>
++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|ARM64'">
++ <OutDir>.\Release\</OutDir>
++ <IntDir>.\Release\</IntDir>
++ <LinkIncremental>false</LinkIncremental>
++ <TargetName>$(ProjectName)u</TargetName>
++ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static|Win32'">
+ <OutDir>.\Debug\</OutDir>
+ <IntDir>.\Debug\</IntDir>
+@@ -192,6 +274,12 @@
+ <LinkIncremental>false</LinkIncremental>
+ <TargetName>$(ProjectName)d</TargetName>
+ </PropertyGroup>
++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static|ARM64'">
++ <OutDir>.\DebugDll\</OutDir>
++ <IntDir>.\DebugDll\</IntDir>
++ <LinkIncremental>false</LinkIncremental>
++ <TargetName>$(ProjectName)d</TargetName>
++ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Static|Win32'">
+ <OutDir>.\Release\</OutDir>
+ <IntDir>.\Release\</IntDir>
+@@ -202,6 +288,11 @@
+ <IntDir>.\Release\</IntDir>
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Static|ARM64'">
++ <OutDir>.\Release\</OutDir>
++ <IntDir>.\Release\</IntDir>
++ <LinkIncremental>false</LinkIncremental>
++ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <OutDir>.\DebugDll\</OutDir>
+ <IntDir>.\DebugDll\</IntDir>
+@@ -214,6 +303,12 @@
+ <LinkIncremental>false</LinkIncremental>
+ <TargetName>DllPlugInTesterd_dll</TargetName>
+ </PropertyGroup>
++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
++ <OutDir>.\DebugDll\</OutDir>
++ <IntDir>.\DebugDll\</IntDir>
++ <LinkIncremental>false</LinkIncremental>
++ <TargetName>DllPlugInTesterd_dll</TargetName>
++ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <OutDir>.\ReleaseDll\</OutDir>
+ <IntDir>.\ReleaseDll\</IntDir>
+@@ -226,6 +319,12 @@
+ <LinkIncremental>false</LinkIncremental>
+ <TargetName>$(ProjectName)_dll</TargetName>
+ </PropertyGroup>
++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
++ <OutDir>.\ReleaseDll\</OutDir>
++ <IntDir>.\ReleaseDll\</IntDir>
++ <LinkIncremental>false</LinkIncremental>
++ <TargetName>$(ProjectName)_dll</TargetName>
++ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">
+ <OutDir>.\DebugUnicode\</OutDir>
+ <IntDir>.\DebugUnicode\</IntDir>
+@@ -238,6 +335,12 @@
+ <LinkIncremental>false</LinkIncremental>
+ <TargetName>$(ProjectName)ud</TargetName>
+ </PropertyGroup>
++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|ARM64'">
++ <OutDir>.\DebugDll\</OutDir>
++ <IntDir>.\DebugDll\</IntDir>
++ <LinkIncremental>false</LinkIncremental>
++ <TargetName>$(ProjectName)ud</TargetName>
++ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">
+ <ClCompile>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+@@ -324,6 +425,49 @@
+ <AdditionalDependencies>odbc32.lib;odbccp32.lib;cppunit.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
++ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|ARM64'">
++ <ClCompile>
++ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
++ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
++ <StringPooling>true</StringPooling>
++ <FunctionLevelLinking>true</FunctionLevelLinking>
++ <Optimization>MinSpace</Optimization>
++ <SuppressStartupBanner>true</SuppressStartupBanner>
++ <WarningLevel>Level3</WarningLevel>
++ <RuntimeTypeInfo>true</RuntimeTypeInfo>
++ <DebugInformationFormat>OldStyle</DebugInformationFormat>
++ <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
++ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
++ <AssemblerListingLocation>.\ReleaseUnicode\</AssemblerListingLocation>
++ <PrecompiledHeaderOutputFile>.\ReleaseUnicode\DllPlugInTester.pch</PrecompiledHeaderOutputFile>
++ <PrecompiledHeader>
++ </PrecompiledHeader>
++ <ObjectFileName>.\ReleaseUnicode\</ObjectFileName>
++ <ProgramDataBaseFileName>.\ReleaseUnicode\</ProgramDataBaseFileName>
++ </ClCompile>
++ <PostBuildEvent>
++ <Command>copy "$(TargetPath)" ..\..\lib\$(TargetName).exe</Command>
++ <Message>Copying target to lib/</Message>
++ </PostBuildEvent>
++ <Midl>
++ <TypeLibraryName>.\ReleaseUnicode\DllPlugInTester.tlb</TypeLibraryName>
++ </Midl>
++ <ResourceCompile>
++ <Culture>0x040c</Culture>
++ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
++ </ResourceCompile>
++ <Bscmake>
++ <SuppressStartupBanner>true</SuppressStartupBanner>
++ <OutputFile>.\ReleaseUnicode\DllPlugInTester.bsc</OutputFile>
++ </Bscmake>
++ <Link>
++ <SuppressStartupBanner>true</SuppressStartupBanner>
++ <SubSystem>Console</SubSystem>
++ <OutputFile>ReleaseUnicode\DllPlugInTesteru.exe</OutputFile>
++ <AdditionalLibraryDirectories>../../lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
++ <AdditionalDependencies>odbc32.lib;odbccp32.lib;cppunit.lib;%(AdditionalDependencies)</AdditionalDependencies>
++ </Link>
++ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static|Win32'">
+ <ClCompile>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+@@ -411,6 +555,49 @@
+ <AdditionalDependencies>odbc32.lib;odbccp32.lib;cppunitd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
++ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static|ARM64'">
++ <ClCompile>
++ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
++ <InlineFunctionExpansion>Default</InlineFunctionExpansion>
++ <FunctionLevelLinking>false</FunctionLevelLinking>
++ <Optimization>Disabled</Optimization>
++ <SuppressStartupBanner>true</SuppressStartupBanner>
++ <WarningLevel>Level3</WarningLevel>
++ <RuntimeTypeInfo>true</RuntimeTypeInfo>
++ <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
++ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
++ <AssemblerListingLocation>.\Debug\</AssemblerListingLocation>
++ <PrecompiledHeaderOutputFile>.\Debug\DllPlugInTester.pch</PrecompiledHeaderOutputFile>
++ <PrecompiledHeader>
++ </PrecompiledHeader>
++ <ObjectFileName>.\Debug\</ObjectFileName>
++ <ProgramDataBaseFileName>.\Debug\</ProgramDataBaseFileName>
++ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
++ </ClCompile>
++ <PostBuildEvent>
++ <Command>copy $(TargetPath) ..\..\lib\$(TargetName).exe</Command>
++ <Message>Copying target to lib/</Message>
++ </PostBuildEvent>
++ <Midl>
++ <TypeLibraryName>.\Debug\DllPlugInTester.tlb</TypeLibraryName>
++ </Midl>
++ <ResourceCompile>
++ <Culture>0x040c</Culture>
++ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
++ </ResourceCompile>
++ <Bscmake>
++ <SuppressStartupBanner>true</SuppressStartupBanner>
++ <OutputFile>.\Debug\DllPlugInTester.bsc</OutputFile>
++ </Bscmake>
++ <Link>
++ <SuppressStartupBanner>true</SuppressStartupBanner>
++ <GenerateDebugInformation>true</GenerateDebugInformation>
++ <SubSystem>Console</SubSystem>
++ <OutputFile>Debug\DllPlugInTesterd.exe</OutputFile>
++ <AdditionalLibraryDirectories>../../lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
++ <AdditionalDependencies>odbc32.lib;odbccp32.lib;cppunitd.lib;%(AdditionalDependencies)</AdditionalDependencies>
++ </Link>
++ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Static|Win32'">
+ <ClCompile>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+@@ -497,6 +684,49 @@
+ <AdditionalDependencies>odbc32.lib;odbccp32.lib;cppunit.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
++ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Static|ARM64'">
++ <ClCompile>
++ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
++ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
++ <StringPooling>true</StringPooling>
++ <FunctionLevelLinking>true</FunctionLevelLinking>
++ <Optimization>MinSpace</Optimization>
++ <SuppressStartupBanner>true</SuppressStartupBanner>
++ <WarningLevel>Level3</WarningLevel>
++ <RuntimeTypeInfo>true</RuntimeTypeInfo>
++ <DebugInformationFormat>OldStyle</DebugInformationFormat>
++ <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
++ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
++ <AssemblerListingLocation>.\Release\</AssemblerListingLocation>
++ <PrecompiledHeaderOutputFile>.\Release\DllPlugInTester.pch</PrecompiledHeaderOutputFile>
++ <PrecompiledHeader>
++ </PrecompiledHeader>
++ <ObjectFileName>.\Release\</ObjectFileName>
++ <ProgramDataBaseFileName>.\Release\</ProgramDataBaseFileName>
++ </ClCompile>
++ <PostBuildEvent>
++ <Command>copy $(TargetPath) ..\..\lib\$(TargetName).exe</Command>
++ <Message>Copying target to lib/</Message>
++ </PostBuildEvent>
++ <Midl>
++ <TypeLibraryName>.\Release\DllPlugInTester.tlb</TypeLibraryName>
++ </Midl>
++ <ResourceCompile>
++ <Culture>0x040c</Culture>
++ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
++ </ResourceCompile>
++ <Bscmake>
++ <SuppressStartupBanner>true</SuppressStartupBanner>
++ <OutputFile>.\Release\DllPlugInTester.bsc</OutputFile>
++ </Bscmake>
++ <Link>
++ <SuppressStartupBanner>true</SuppressStartupBanner>
++ <SubSystem>Console</SubSystem>
++ <OutputFile>.\Release\DllPlugInTester.exe</OutputFile>
++ <AdditionalLibraryDirectories>../../lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
++ <AdditionalDependencies>odbc32.lib;odbccp32.lib;cppunit.lib;%(AdditionalDependencies)</AdditionalDependencies>
++ </Link>
++ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+@@ -584,6 +814,49 @@
+ <AdditionalDependencies>odbc32.lib;odbccp32.lib;cppunitd_dll.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
++ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
++ <ClCompile>
++ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
++ <InlineFunctionExpansion>Default</InlineFunctionExpansion>
++ <FunctionLevelLinking>false</FunctionLevelLinking>
++ <Optimization>Disabled</Optimization>
++ <SuppressStartupBanner>true</SuppressStartupBanner>
++ <WarningLevel>Level3</WarningLevel>
++ <RuntimeTypeInfo>true</RuntimeTypeInfo>
++ <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
++ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;CPPUNIT_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
++ <AssemblerListingLocation>.\DebugDll\</AssemblerListingLocation>
++ <PrecompiledHeaderOutputFile>.\DebugDll\DllPlugInTester.pch</PrecompiledHeaderOutputFile>
++ <PrecompiledHeader>
++ </PrecompiledHeader>
++ <ObjectFileName>.\DebugDll\</ObjectFileName>
++ <ProgramDataBaseFileName>.\DebugDll\</ProgramDataBaseFileName>
++ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
++ </ClCompile>
++ <PostBuildEvent>
++ <Command>copy "$(TargetPath)" ..\..\lib\$(TargetName).exe</Command>
++ <Message>Copying target to lib/</Message>
++ </PostBuildEvent>
++ <Midl>
++ <TypeLibraryName>.\DebugDll\DllPlugInTester.tlb</TypeLibraryName>
++ </Midl>
++ <ResourceCompile>
++ <Culture>0x040c</Culture>
++ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
++ </ResourceCompile>
++ <Bscmake>
++ <SuppressStartupBanner>true</SuppressStartupBanner>
++ <OutputFile>.\DebugDll\DllPlugInTester.bsc</OutputFile>
++ </Bscmake>
++ <Link>
++ <SuppressStartupBanner>true</SuppressStartupBanner>
++ <GenerateDebugInformation>true</GenerateDebugInformation>
++ <SubSystem>Console</SubSystem>
++ <OutputFile>DebugDll\DllPlugInTesterd_dll.exe</OutputFile>
++ <AdditionalLibraryDirectories>../../lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
++ <AdditionalDependencies>odbc32.lib;odbccp32.lib;cppunitd_dll.lib;%(AdditionalDependencies)</AdditionalDependencies>
++ </Link>
++ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+@@ -670,6 +943,49 @@
+ <AdditionalDependencies>odbc32.lib;odbccp32.lib;cppunit_dll.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
++ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
++ <ClCompile>
++ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
++ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
++ <StringPooling>true</StringPooling>
++ <FunctionLevelLinking>true</FunctionLevelLinking>
++ <Optimization>MinSpace</Optimization>
++ <SuppressStartupBanner>true</SuppressStartupBanner>
++ <WarningLevel>Level3</WarningLevel>
++ <RuntimeTypeInfo>true</RuntimeTypeInfo>
++ <DebugInformationFormat>OldStyle</DebugInformationFormat>
++ <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
++ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;CPPUNIT_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
++ <AssemblerListingLocation>.\ReleaseDll\</AssemblerListingLocation>
++ <PrecompiledHeaderOutputFile>.\ReleaseDll\DllPlugInTester.pch</PrecompiledHeaderOutputFile>
++ <PrecompiledHeader>
++ </PrecompiledHeader>
++ <ObjectFileName>.\ReleaseDll\</ObjectFileName>
++ <ProgramDataBaseFileName>.\ReleaseDll\</ProgramDataBaseFileName>
++ </ClCompile>
++ <PostBuildEvent>
++ <Command>copy "$(TargetPath)" ..\..\lib\$(TargetName).exe</Command>
++ <Message>Copying target to lib/</Message>
++ </PostBuildEvent>
++ <Midl>
++ <TypeLibraryName>.\ReleaseDll\DllPlugInTester.tlb</TypeLibraryName>
++ </Midl>
++ <ResourceCompile>
++ <Culture>0x040c</Culture>
++ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
++ </ResourceCompile>
++ <Bscmake>
++ <SuppressStartupBanner>true</SuppressStartupBanner>
++ <OutputFile>.\ReleaseDll\DllPlugInTester.bsc</OutputFile>
++ </Bscmake>
++ <Link>
++ <SuppressStartupBanner>true</SuppressStartupBanner>
++ <SubSystem>Console</SubSystem>
++ <OutputFile>ReleaseDll\DllPlugInTester_dll.exe</OutputFile>
++ <AdditionalLibraryDirectories>../../lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
++ <AdditionalDependencies>odbc32.lib;odbccp32.lib;cppunit_dll.lib;%(AdditionalDependencies)</AdditionalDependencies>
++ </Link>
++ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">
+ <ClCompile>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+@@ -718,6 +1034,49 @@
+ <ClCompile>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <InlineFunctionExpansion>Default</InlineFunctionExpansion>
++ <FunctionLevelLinking>false</FunctionLevelLinking>
++ <Optimization>Disabled</Optimization>
++ <SuppressStartupBanner>true</SuppressStartupBanner>
++ <WarningLevel>Level3</WarningLevel>
++ <RuntimeTypeInfo>true</RuntimeTypeInfo>
++ <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
++ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
++ <AssemblerListingLocation>.\DebugUnicode\</AssemblerListingLocation>
++ <PrecompiledHeaderOutputFile>.\DebugUnicode\DllPlugInTester.pch</PrecompiledHeaderOutputFile>
++ <PrecompiledHeader>
++ </PrecompiledHeader>
++ <ObjectFileName>.\DebugUnicode\</ObjectFileName>
++ <ProgramDataBaseFileName>.\DebugUnicode\</ProgramDataBaseFileName>
++ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
++ </ClCompile>
++ <PostBuildEvent>
++ <Command>copy "$(TargetPath)" ..\..\lib\$(TargetName).exe</Command>
++ <Message>Copying target to lib/</Message>
++ </PostBuildEvent>
++ <Midl>
++ <TypeLibraryName>.\DebugUnicode\DllPlugInTester.tlb</TypeLibraryName>
++ </Midl>
++ <ResourceCompile>
++ <Culture>0x040c</Culture>
++ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
++ </ResourceCompile>
++ <Bscmake>
++ <SuppressStartupBanner>true</SuppressStartupBanner>
++ <OutputFile>.\DebugUnicode\DllPlugInTester.bsc</OutputFile>
++ </Bscmake>
++ <Link>
++ <SuppressStartupBanner>true</SuppressStartupBanner>
++ <GenerateDebugInformation>true</GenerateDebugInformation>
++ <SubSystem>Console</SubSystem>
++ <OutputFile>DebugUnicode\DllPlugInTesterud.exe</OutputFile>
++ <AdditionalLibraryDirectories>../../lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
++ <AdditionalDependencies>odbc32.lib;odbccp32.lib;cppunitd.lib;%(AdditionalDependencies)</AdditionalDependencies>
++ </Link>
++ </ItemDefinitionGroup>
++ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|ARM64'">
++ <ClCompile>
++ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
++ <InlineFunctionExpansion>Default</InlineFunctionExpansion>
+ <FunctionLevelLinking>false</FunctionLevelLinking>
+ <Optimization>Disabled</Optimization>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
diff --git a/external/cppunit/windows.patch b/external/cppunit/windows.patch
new file mode 100644
index 000000000..e6ca26cbb
--- /dev/null
+++ b/external/cppunit/windows.patch
@@ -0,0 +1,50 @@
+--- misc/cppunit-1.15.0/include/cppunit/plugin/TestPlugIn.h 2010-01-11 14:42:25.084658287 +0100
++++ misc/build/cppunit-1.15.0/include/cppunit/plugin/TestPlugIn.h 2010-01-11 14:42:18.660706180 +0100
+@@ -133,9 +133,8 @@
+ /*! \def CPPUNIT_PLUGIN_IMPLEMENT_MAIN()
+ * \brief Implements the 'main' function for the plug-in.
+ *
+- * This macros implements the main() function for dynamic library.
+- * For example, WIN32 requires a DllMain function, while some Unix
+- * requires a main() function. This macros takes care of the implementation.
++ * This macro implements the main() function for dynamic library
++ * on Unix for some weird reason.
+ */
+
+ // Win32
+@@ -149,23 +149,7 @@
+
+ // Win32
+ #if defined(CPPUNIT_HAVE_WIN32_DLL_LOADER)
+-#if !defined(APIENTRY)
+-#define WIN32_LEAN_AND_MEAN
+-#define NOGDI
+-#define NOUSER
+-#define NOKERNEL
+-#define NOSOUND
+-#ifndef NOMINMAX
+-#define NOMINMAX
+-#endif
+-#define BLENDFUNCTION void // for mingw & gcc
+-#include <windows.h>
+-#endif
+ #define CPPUNIT_PLUGIN_IMPLEMENT_MAIN() \
+- BOOL APIENTRY DllMain( HANDLE, DWORD, LPVOID ) \
+- { \
+- return TRUE; \
+- } \
+ typedef char __CppUnitPlugInImplementMainDummyTypeDef
+
+ // Unix
+--- misc/cppunit-1.15.0/include/cppunit/TestAssert.h
++++ misc/build/cppunit-1.15.0/include/cppunit/TestAssert.h
+@@ -76,7 +76,7 @@
+ const int precision = 15;
+ #endif // #ifdef DBL_DIG
+ char buffer[128];
+-#ifdef __STDC_SECURE_LIB__ // Use secure version with visual studio 2005 to avoid warning.
++#if defined(_MSC_VER) && defined(__STDC_SECURE_LIB__) // Use secure version with visual studio 2005 to avoid warning.
+ sprintf_s(buffer, sizeof(buffer), "%.*g", precision, x);
+ #else
+ sprintf(buffer, "%.*g", precision, x);
+