diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx index 8630455f85..98c28d4002 100644 --- a/Source/cmVisualStudio10TargetGenerator.cxx +++ b/Source/cmVisualStudio10TargetGenerator.cxx @@ -3669,6 +3669,17 @@ bool cmVisualStudio10TargetGenerator::ComputeClOptions( if (!clOptions.HasFlag("BasicRuntimeChecks")) { clOptions.AddFlag("BasicRuntimeChecks", "Default"); } + if (!clOptions.HasFlag("BufferSecurityCheck")) { + clOptions.AddFlag("BufferSecurityCheck", ""); + } + if (!clOptions.HasFlag("CallingConvention")) { + clOptions.AddFlag("CallingConvention", ""); + } + // We cannot use the `Default` value, because it is incompatible with + // VS2019 & first releases of VS2022 + if (!clOptions.HasFlag("FloatingPointModel")) { + clOptions.AddFlag("FloatingPointModel", ""); + } if (!clOptions.HasFlag("ForceConformanceInForLoopScope")) { clOptions.AddFlag("ForceConformanceInForLoopScope", ""); } diff --git a/Tests/RunCMake/VS10Project/VsDefaultFlags-check.cmake b/Tests/RunCMake/VS10Project/VsDefaultFlags-check.cmake index afecdf3535..5a71b3055a 100644 --- a/Tests/RunCMake/VS10Project/VsDefaultFlags-check.cmake +++ b/Tests/RunCMake/VS10Project/VsDefaultFlags-check.cmake @@ -5,33 +5,105 @@ macro(VsDefaultCompilerFlags_check tgt) return() endif() + set(HAVE_BasicRuntimeChecks 0) + set(HAVE_BufferSecurityCheck 0) + set(HAVE_CallingConvention 0) + set(HAVE_FloatingPointModel 0) set(HAVE_ForceConformanceInForLoopScope 0) + set(HAVE_MinimalRebuild 0) + set(HAVE_Optimization 0) set(HAVE_RemoveUnreferencedCodeData 0) + set(HAVE_RuntimeLibrary 0) + set(HAVE_SupportJustMyCode 0) set(HAVE_TreatWChar_tAsBuiltInType 0) file(STRINGS "${vcProjectFile}" lines) foreach(line IN LISTS lines) + if(line MATCHES "^ *Default") + set(HAVE_BasicRuntimeChecks 1) + endif() + if(line MATCHES "^ *") + set(HAVE_BufferSecurityCheck 1) + endif() + if(line MATCHES "^ *") + set(HAVE_CallingConvention 1) + endif() + if(line MATCHES "^ *") + set(HAVE_FloatingPointModel 1) + endif() if(line MATCHES "^ *") set(HAVE_ForceConformanceInForLoopScope 1) endif() + if(line MATCHES "^ *") + set(HAVE_MinimalRebuild 1) + endif() + if(line MATCHES "^ *[^\\n<]*") + set(HAVE_Optimization 1) + endif() if(line MATCHES "^ *") set(HAVE_RemoveUnreferencedCodeData 1) endif() + if(line MATCHES "^ *[^\\n<]*") + set(HAVE_RuntimeLibrary 1) + endif() + if(line MATCHES "^ *") + set(HAVE_SupportJustMyCode 1) + endif() if(line MATCHES "^ *") set(HAVE_TreatWChar_tAsBuiltInType 1) endif() endforeach() + if(NOT HAVE_BasicRuntimeChecks) + set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj does not have a property.") + return() + endif() + + if(NOT HAVE_BufferSecurityCheck) + set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj does not have a property.") + return() + endif() + + if(NOT HAVE_CallingConvention) + set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj does not have a property.") + return() + endif() + + if(NOT HAVE_FloatingPointModel) + set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj does not have a property.") + return() + endif() + if(NOT HAVE_ForceConformanceInForLoopScope) set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj does not have a property.") return() endif() + if(NOT HAVE_MinimalRebuild) + set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj does not have a property.") + return() + endif() + + if(NOT HAVE_Optimization) + set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj does not have a property.") + return() + endif() + if(NOT HAVE_RemoveUnreferencedCodeData) set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj does not have a property.") return() endif() + if(NOT HAVE_RuntimeLibrary) + set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj does not have a property.") + return() + endif() + + if(NOT HAVE_SupportJustMyCode) + set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj does not have a property.") + return() + endif() + if(NOT HAVE_TreatWChar_tAsBuiltInType) set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj does not have a property.") return()