You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
2.4 KiB
65 lines
2.4 KiB
# Figure out which build tool the test files in a project are using
|
|
macro(get_build_tools_from_project_file projectFile)
|
|
set(_s "[ \t\r\n]") # Whitespace character class
|
|
|
|
set(ItemGroupBeginRegex "<${_s}*ItemGroup${_s}*>")
|
|
set(ItemGroupEndRegex "</${_s}*ItemGroup${_s}*>")
|
|
set(GroupItemRegex ".*<${_s}*([A-Za-z0-9_]+)${_s}+Include${_s}*=${_s}*\"([^\"]*)\".*")
|
|
|
|
if(NOT EXISTS "${projectFile}")
|
|
set(RunCMake_TEST_FAILED "Project file ${projectFile} does not exist.")
|
|
return()
|
|
endif()
|
|
|
|
file(STRINGS "${projectFile}" lines)
|
|
|
|
foreach(line IN LISTS lines)
|
|
if(line MATCHES "${ItemGroupBeginRegex}")
|
|
set(InItemGroup TRUE)
|
|
elseif(line MATCHES "${ItemGroupEndRegex}")
|
|
set(InItemGroup FALSE)
|
|
elseif(line MATCHES "${GroupItemRegex}")
|
|
if(InItemGroup)
|
|
string(REGEX REPLACE "${GroupItemRegex}" "\\1" itemTool "${line}")
|
|
string(REGEX REPLACE "${GroupItemRegex}" "\\2" itemPath "${line}")
|
|
|
|
if(itemPath MATCHES ".*foo\\.cpp")
|
|
set(fooCppTool "${itemTool}")
|
|
elseif(itemPath MATCHES ".*foo\\.txt")
|
|
set(fooTxtTool "${itemTool}")
|
|
elseif(itemPath MATCHES ".*bar\\.cpp")
|
|
set(barCppTool "${itemTool}")
|
|
elseif(itemPath MATCHES ".*bar\\.txt")
|
|
set(barTxtTool "${itemTool}")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
endforeach()
|
|
endmacro()
|
|
|
|
# Verify a build tool is as expected
|
|
macro(verify_build_tool fileName expectedBuildTool actualBuildTool)
|
|
if("${actualBuildTool}" STREQUAL "${expectedBuildTool}")
|
|
message(STATUS "File '${fileName}' in project file '${projectFile}' has expected build tool '${expectedBuildTool}'")
|
|
else()
|
|
set(RunCMake_TEST_FAILED "File '${fileName}' in project file '${projectFile}' has unexpected build tool '${actualBuildTool}'! Expected: '${expectedBuildTool}'" PARENT_SCOPE)
|
|
return()
|
|
endif()
|
|
endmacro()
|
|
|
|
# Test using VS_TOOL_OVERRIDE
|
|
block()
|
|
set(projectFile "${RunCMake_TEST_BINARY_DIR}/foo.vcxproj")
|
|
get_build_tools_from_project_file("${projectFile}")
|
|
verify_build_tool("foo.cpp" "CustomFooCppTool" "${fooCppTool}")
|
|
verify_build_tool("foo.txt" "CustomFooTxtTool" "${fooTxtTool}")
|
|
endblock()
|
|
|
|
# Test default behavior without using VS_TOOL_OVERRIDE
|
|
block()
|
|
set(projectFile "${RunCMake_TEST_BINARY_DIR}/bar.vcxproj")
|
|
get_build_tools_from_project_file("${projectFile}")
|
|
verify_build_tool("bar.cpp" "ClCompile" "${barCppTool}")
|
|
verify_build_tool("bar.txt" "None" "${barTxtTool}")
|
|
endblock()
|