set(vcProjectFile "${RunCMake_TEST_BINARY_DIR}/foo.vcxproj") if(NOT EXISTS "${vcProjectFile}") set(RunCMake_TEST_FAILED "Project file ${vcProjectFile} does not exist.") return() endif() if( NOT ${CMAKE_SYSTEM_NAME} STREQUAL "WindowsCE" ) set(RunCMake_TEST_FAILED "Test only valid for WindowsCE") return() endif() set(FoundCEAdditionalFiles FALSE) set(FoundRemoteDirectory FALSE) set(FoundToolsVersion4 FALSE) file(STRINGS "${vcProjectFile}" lines) foreach(line IN LISTS lines) if(line MATCHES "^ * *foo\\.dll\\|\\\\foo\\\\src\\\\dir\\\\on\\\\host\\|\\$\\(RemoteDirectory\\)\\|0;bar\\.dll\\|\\\\bar\\\\src\\\\dir\\|\\$\\(RemoteDirectory\\)bardir\\|0.* *$") set(FoundCEAdditionalFiles TRUE) elseif(line MATCHES " *[A-Za-z0-9\\]+ *$") set(FoundRemoteDirectory TRUE) elseif(line MATCHES " * *$") set(FoundToolsVersion4 TRUE) endif() endforeach() if(NOT FoundCEAdditionalFiles) set(RunCMake_TEST_FAILED "CEAddionalFiles not found or not set correctly.") return() endif() if(NOT FoundRemoteDirectory) set(RunCMake_TEST_FAILED "RemoteDirectory not found or not set correctly.") return() endif() if(NOT FoundToolsVersion4) set(RunCMake_TEST_FAILED "Failed to find correct ToolsVersion=\"4.0\" .") return() endif() # # Test solution file deployment items. # set(vcSlnFile "${RunCMake_TEST_BINARY_DIR}/VsCEDebuggerDeploy.sln") if(NOT EXISTS "${vcSlnFile}") set(RunCMake_TEST_FAILED "Solution file ${vcSlnFile} does not exist.") return() endif() if( NOT ${CMAKE_SYSTEM_NAME} STREQUAL "WindowsCE" ) set(RunCMake_TEST_FAILED "Test only valid for WindowsCE") return() endif() set(FooProjGUID "") set(FoundFooProj FALSE) set(InFooProj FALSE) set(FoundReleaseDeploy FALSE) set(DeployConfigs Debug MinSizeRel RelWithDebInfo ) file(STRINGS "${vcSlnFile}" lines) foreach(line IN LISTS lines) #message(STATUS "${line}") if( (NOT InFooProj ) AND (line MATCHES "^[ \\t]*Project\\(\"{[A-F0-9-]+}\"\\) = \"foo\", \"foo.vcxproj\", \"({[A-F0-9-]+})\"[ \\t]*$")) # First, identify the GUID for the foo project, and record it. set(FoundFooProj TRUE) set(InFooProj TRUE) set(FooProjGUID ${CMAKE_MATCH_1}) elseif(InFooProj AND line MATCHES "EndProject") set(InFooProj FALSE) elseif((NOT InFooProj) AND line MATCHES "${FooProjGUID}\\.Release.*\\.Deploy\\.0") # If foo's Release configuration is set to deploy, this is the error. set(FoundReleaseDeploy TRUE) endif() if( line MATCHES "{[A-F0-9-]+}\\.([^\\|]+).*\\.Deploy\\.0" ) # Check that the other configurations ARE set to deploy. list( REMOVE_ITEM DeployConfigs ${CMAKE_MATCH_1}) endif() endforeach() if(FoundReleaseDeploy) set(RunCMake_TEST_FAILED "Release deployment not inhibited by VS_NO_SOLUTION_DEPLOY_Release.") return() endif() if(NOT FoundFooProj) set(RunCMake_TEST_FAILED "Failed to find foo project in the solution.") return() endif() list(LENGTH DeployConfigs length) if( length GREATER 0 ) set(RunCMake_TEST_FAILED "Failed to find Deploy lines for non-Release configurations. (${length})") return() endif()