diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx index 775e568924..88e584fb5f 100644 --- a/Source/cmVisualStudio10TargetGenerator.cxx +++ b/Source/cmVisualStudio10TargetGenerator.cxx @@ -4576,35 +4576,32 @@ bool cmVisualStudio10TargetGenerator::ComputeLinkOptions( } if (this->MSTools) { - if (this->GeneratorTarget->GetType() == cmStateEnums::EXECUTABLE) { - // Specify an entry point for executables. - if (this->GeneratorTarget->IsWin32Executable(config)) { - if (this->GlobalGenerator->TargetsWindowsCE()) { - linkOptions.AddFlag("SubSystem", "WindowsCE"); - if (this->GeneratorTarget->GetType() == cmStateEnums::EXECUTABLE) { - if (this->ClOptions[config]->UsingUnicode()) { - linkOptions.AddFlag("EntryPointSymbol", "wWinMainCRTStartup"); - } else { - linkOptions.AddFlag("EntryPointSymbol", "WinMainCRTStartup"); - } + if (this->GeneratorTarget->IsWin32Executable(config)) { + if (this->GlobalGenerator->TargetsWindowsCE()) { + linkOptions.AddFlag("SubSystem", "WindowsCE"); + if (this->GeneratorTarget->GetType() == cmStateEnums::EXECUTABLE) { + if (this->ClOptions[config]->UsingUnicode()) { + linkOptions.AddFlag("EntryPointSymbol", "wWinMainCRTStartup"); + } else { + linkOptions.AddFlag("EntryPointSymbol", "WinMainCRTStartup"); } - } else { - linkOptions.AddFlag("SubSystem", "Windows"); } } else { - if (this->GlobalGenerator->TargetsWindowsCE()) { - linkOptions.AddFlag("SubSystem", "WindowsCE"); - if (this->GeneratorTarget->GetType() == cmStateEnums::EXECUTABLE) { - if (this->ClOptions[config]->UsingUnicode()) { - linkOptions.AddFlag("EntryPointSymbol", "mainWCRTStartup"); - } else { - linkOptions.AddFlag("EntryPointSymbol", "mainACRTStartup"); - } - } - } else { - linkOptions.AddFlag("SubSystem", "Console"); - }; + linkOptions.AddFlag("SubSystem", "Windows"); } + } else { + if (this->GlobalGenerator->TargetsWindowsCE()) { + linkOptions.AddFlag("SubSystem", "WindowsCE"); + if (this->GeneratorTarget->GetType() == cmStateEnums::EXECUTABLE) { + if (this->ClOptions[config]->UsingUnicode()) { + linkOptions.AddFlag("EntryPointSymbol", "mainWCRTStartup"); + } else { + linkOptions.AddFlag("EntryPointSymbol", "mainACRTStartup"); + } + } + } else { + linkOptions.AddFlag("SubSystem", "Console"); + }; } if (cmValue stackVal = this->Makefile->GetDefinition( diff --git a/Tests/RunCMake/VS10Project/VsDefaultFlags-check.cmake b/Tests/RunCMake/VS10Project/VsDefaultFlags-check.cmake index afecdf3535..4cdad74019 100644 --- a/Tests/RunCMake/VS10Project/VsDefaultFlags-check.cmake +++ b/Tests/RunCMake/VS10Project/VsDefaultFlags-check.cmake @@ -38,12 +38,12 @@ macro(VsDefaultCompilerFlags_check tgt) endif() endmacro() -macro(VsDefaultLinkerFlags_check tgt needs_subsystem_console) +macro(VsDefaultLinkerFlags_check tgt) set(HAVE_DataExecutionPrevention 0) set(HAVE_ImageHasSafeExceptionHandlers 0) set(HAVE_LinkErrorReporting 0) set(HAVE_RandomizedBaseAddress 0) - set(HAVE_SubSystem 0) + set(HAVE_SubSystem_Empty 0) set(HAVE_SubSystem_Console 0) file(STRINGS "${vcProjectFile}" lines) @@ -61,7 +61,7 @@ macro(VsDefaultLinkerFlags_check tgt needs_subsystem_console) set(HAVE_RandomizedBaseAddress 1) endif() if(line MATCHES "^ *") - set(HAVE_SubSystem 1) + set(HAVE_SubSystem_Empty 1) endif() if(line MATCHES "^ *Console") set(HAVE_SubSystem_Console 1) @@ -88,33 +88,21 @@ macro(VsDefaultLinkerFlags_check tgt needs_subsystem_console) return() endif() - if(${needs_subsystem_console}) - if(HAVE_SubSystem) - set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj has a property.") - return() - endif() + if(HAVE_SubSystem_Empty) + set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj has a property.") + return() + endif() - if(NOT HAVE_SubSystem_Console) - set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj does not have a property with 'Console' value.") - return() - endif() - else() - if(NOT HAVE_SubSystem) - set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj does not have a property.") - return() - endif() - - if(HAVE_SubSystem_Console) - set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj has a property with 'Console' value.") - return() - endif() + if(NOT HAVE_SubSystem_Console) + set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj does not have a property with 'Console' value.") + return() endif() endmacro() VsDefaultCompilerFlags_check(emptyStatic) VsDefaultCompilerFlags_check(emptyShared) -VsDefaultLinkerFlags_check(emptyShared OFF) +VsDefaultLinkerFlags_check(emptyShared) VsDefaultCompilerFlags_check(main) -VsDefaultLinkerFlags_check(main ON) +VsDefaultLinkerFlags_check(main)