diff options
Diffstat (limited to 'tomlplusplus/tools/generate_windows_test_targets.py')
| -rwxr-xr-x | tomlplusplus/tools/generate_windows_test_targets.py | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/tomlplusplus/tools/generate_windows_test_targets.py b/tomlplusplus/tools/generate_windows_test_targets.py new file mode 100755 index 0000000000..45221eaa9b --- /dev/null +++ b/tomlplusplus/tools/generate_windows_test_targets.py @@ -0,0 +1,181 @@ +#!/usr/bin/env python3 +# This file is a part of toml++ and is subject to the the terms of the MIT license. +# Copyright (c) Mark Gillard <mark.gillard@outlook.com.au> +# See https://github.com/marzer/tomlplusplus/blob/master/LICENSE for the full license text. +# SPDX-License-Identifier: MIT + +import sys +import utils +import re +import itertools +from pathlib import Path +from uuid import UUID, uuid5 + + +def main(): + + mode_keys = [ '!!debug', '!x86', 'cpplatest', 'unrel', 'noexcept' ] + modes = [ [] ] + for n in range(1, len(mode_keys)): + for combo in itertools.combinations(mode_keys, n): + modes.append([i for i in combo]) + modes.append(mode_keys) + for mode in modes: + if '!x86' not in mode: + mode.insert(0, '!x64') + if '!!debug' not in mode: + mode.insert(0, '!!release') + mode.sort() + for i in range(0, len(mode)): + while mode[i].startswith('!'): + mode[i] = mode[i][1:] + modes.sort() + + test_root = Path(utils.entry_script_dir(), '..', 'tests', 'vs').resolve() + uuid_namespace = UUID('{51C7001B-048C-4AF0-B598-D75E78FF31F0}') + configuration_name = lambda x: 'Debug' if x.lower() == 'debug' else 'Release' + platform_name = lambda x: 'Win32' if x == 'x86' else x + for mode in modes: + file_path = Path(test_root, 'test_{}.vcxproj'.format('_'.join(mode))) + print(f"Writing to {file_path}") + with open(file_path, 'w', encoding='utf-8-sig', newline='\r\n') as file: + write = lambda txt: print(txt, file=file) + write(r''' +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="{configuration}|{platform}"> + <Configuration>{configuration}</Configuration> + <Platform>{platform}</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <VCProjectVersion>16.0</VCProjectVersion> + <ProjectGuid>{{{uuid}}}</ProjectGuid> + <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> + <PreferredToolArchitecture>x64</PreferredToolArchitecture> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|{platform}'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v143</PlatformToolset> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|{platform}'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v143</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" + Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <Import Project="../../toml++.props" /> + <ItemDefinitionGroup> + <ClCompile> + <AdditionalIncludeDirectories>..\tests;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ExceptionHandling>{exceptions}</ExceptionHandling> + <PrecompiledHeader>Use</PrecompiledHeader> + <PrecompiledHeaderFile>tests.hpp</PrecompiledHeaderFile> + <PreprocessorDefinitions>TOML_ENABLE_UNRELEASED_FEATURES={unreleased_features};%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <LanguageStandard>std{standard}</LanguageStandard> + <MultiProcessorCompilation>true</MultiProcessorCompilation> + <WarningLevel>EnableAllWarnings</WarningLevel> + <DisableSpecificWarnings>%(DisableSpecificWarnings);4127</DisableSpecificWarnings> <!-- conditional expr is constant --> + <DisableSpecificWarnings>%(DisableSpecificWarnings);4324</DisableSpecificWarnings> <!-- structure was padded due to alignment specifier --> + <DisableSpecificWarnings>%(DisableSpecificWarnings);4464</DisableSpecificWarnings> <!-- relative include path contains '..' --> + <DisableSpecificWarnings>%(DisableSpecificWarnings);4505</DisableSpecificWarnings> <!-- unreferenced local function removed --> + <DisableSpecificWarnings>%(DisableSpecificWarnings);4514</DisableSpecificWarnings> <!-- unreferenced inline function has been removed --> + <DisableSpecificWarnings>%(DisableSpecificWarnings);4577</DisableSpecificWarnings> <!-- 'noexcept' used with no exception handling mode specified --> + <DisableSpecificWarnings>%(DisableSpecificWarnings);4582</DisableSpecificWarnings> <!-- constructor is not implicitly called --> + <DisableSpecificWarnings>%(DisableSpecificWarnings);4623</DisableSpecificWarnings> <!-- default constructor was implicitly defined as deleted --> + <DisableSpecificWarnings>%(DisableSpecificWarnings);4625</DisableSpecificWarnings> <!-- copy constructor was implicitly defined as deleted --> + <DisableSpecificWarnings>%(DisableSpecificWarnings);4626</DisableSpecificWarnings> <!-- assignment operator was implicitly defined as deleted --> + <DisableSpecificWarnings>%(DisableSpecificWarnings);4710</DisableSpecificWarnings> <!-- function not inlined --> + <DisableSpecificWarnings>%(DisableSpecificWarnings);4711</DisableSpecificWarnings> <!-- function selected for automatic expansion --> + <DisableSpecificWarnings>%(DisableSpecificWarnings);4738</DisableSpecificWarnings> <!-- storing 32-bit float result in memory --> + <DisableSpecificWarnings>%(DisableSpecificWarnings);4820</DisableSpecificWarnings> <!-- N bytes padding added --> + <DisableSpecificWarnings>%(DisableSpecificWarnings);4866</DisableSpecificWarnings> <!-- compiler may not enforce ltr eval in operator[] --> + <DisableSpecificWarnings>%(DisableSpecificWarnings);4868</DisableSpecificWarnings> <!-- compiler may not enforce ltr eval in initializer list --> + <DisableSpecificWarnings>%(DisableSpecificWarnings);4946</DisableSpecificWarnings> <!-- reinterpret_cast used between related classes --> + <DisableSpecificWarnings>%(DisableSpecificWarnings);5026</DisableSpecificWarnings> <!-- move constructor was implicitly defined as deleted --> + <DisableSpecificWarnings>%(DisableSpecificWarnings);5027</DisableSpecificWarnings> <!-- move assignment operator was implicitly defined as deleted --> + <DisableSpecificWarnings>%(DisableSpecificWarnings);5039</DisableSpecificWarnings> <!-- potentially throwing function passed to 'extern "C"' --> + <DisableSpecificWarnings>%(DisableSpecificWarnings);5045</DisableSpecificWarnings> <!-- Compiler will insert Spectre mitigation --> + </ClCompile> + </ItemDefinitionGroup> + <PropertyGroup> + <LocalDebuggerWorkingDirectory>$(ProjectDir)..\</LocalDebuggerWorkingDirectory> + </PropertyGroup> + <ItemGroup> + <ClCompile Include="..\at_path.cpp" /> + <ClCompile Include="..\path.cpp" /> + <ClCompile Include="..\conformance_burntsushi_invalid.cpp" /> + <ClCompile Include="..\conformance_burntsushi_valid.cpp" /> + <ClCompile Include="..\conformance_iarna_invalid.cpp" /> + <ClCompile Include="..\conformance_iarna_valid.cpp" /> + <ClCompile Include="..\for_each.cpp" /> + <ClCompile Include="..\formatters.cpp" /> + <ClCompile Include="..\impl_toml.cpp"> + <PrecompiledHeader>NotUsing</PrecompiledHeader> + </ClCompile> + <ClCompile Include="..\main.cpp"> + <PrecompiledHeader>NotUsing</PrecompiledHeader> + </ClCompile> + <ClCompile Include="..\manipulating_arrays.cpp" /> + <ClCompile Include="..\manipulating_tables.cpp" /> + <ClCompile Include="..\manipulating_parse_result.cpp" /> + <ClCompile Include="..\manipulating_values.cpp" /> + <ClCompile Include="..\parsing_arrays.cpp" /> + <ClCompile Include="..\parsing_booleans.cpp" /> + <ClCompile Include="..\parsing_comments.cpp" /> + <ClCompile Include="..\parsing_dates_and_times.cpp" /> + <ClCompile Include="..\parsing_floats.cpp" /> + <ClCompile Include="..\parsing_integers.cpp" /> + <ClCompile Include="..\parsing_key_value_pairs.cpp" /> + <ClCompile Include="..\parsing_spec_example.cpp" /> + <ClCompile Include="..\parsing_strings.cpp" /> + <ClCompile Include="..\parsing_tables.cpp" /> + <ClCompile Include="..\tests.cpp"> + <PrecompiledHeader>Create</PrecompiledHeader> + </ClCompile> + <ClCompile Include="..\user_feedback.cpp" /> + <ClCompile Include="..\using_iterators.cpp" /> + <ClCompile Include="..\visit.cpp" /> + <ClCompile Include="..\windows_compat.cpp" /> + </ItemGroup> + <ItemGroup> + <Natvis Include="..\..\toml++.natvis" /> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\leakproof.hpp" /> + <ClInclude Include="..\lib_catch2.hpp" /> + <ClInclude Include="..\lib_tloptional.hpp" /> + <ClInclude Include="..\settings.hpp" /> + <ClInclude Include="..\tests.hpp" /> + </ItemGroup> + <ItemGroup> + <None Include="..\cpp.hint" /> + <None Include="..\meson.build" /> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> +</Project> + '''.strip().format( + configuration=next(configuration_name(x) for x in mode if x in ('debug', 'release')), + platform=next(platform_name(x) for x in mode if x in ('x64', 'x86')), + uuid=str(uuid5(uuid_namespace, '_'.join(mode))).upper(), + exceptions='false' if 'noexcept' in mode else 'Sync', + unreleased_features=1 if 'unrel' in mode else 0, + standard='cpplatest' if 'cpplatest' in mode else 'cpp17' + )) + +if __name__ == '__main__': + utils.run(main, verbose=True) |
