Commit 2d376782 authored by Brad King's avatar Brad King Committed by Kitware Robot

Merge topic 'vs-project-import'

d145d72e VS: add target property VS_PROJECT_IMPORT_<propspath>
Acked-by: Kitware Robot's avatarKitware Robot <kwrobot@kitware.com>
Merge-request: !3143
parents 9aecda56 d145d72e
Pipeline #134794 passed with stage
in 0 seconds
......@@ -335,6 +335,7 @@ Properties on Targets
/prop_tgt/VS_KEYWORD
/prop_tgt/VS_MOBILE_EXTENSIONS_VERSION
/prop_tgt/VS_NO_SOLUTION_DEPLOY
/prop_tgt/VS_PROJECT_IMPORT
/prop_tgt/VS_SCC_AUXPATH
/prop_tgt/VS_SCC_LOCALPATH
/prop_tgt/VS_SCC_PROJECTNAME
......
VS_PROJECT_IMPORT
-----------------
Visual Studio managed project imports
Adds to a generated Visual Studio project one or more semicolon-delimited paths
to .props files needed when building projects from some NuGet packages.
For example, ``my_packages_path/MyPackage.1.0.0/build/MyPackage.props``.
vs-project-import
-----------------
* The :prop_tgt:`VS_PROJECT_IMPORT` target property was added which allows
to import external .props files in managed Visual Studio targets.
......@@ -663,6 +663,7 @@ void cmVisualStudio10TargetGenerator::Generate()
this->WriteCustomCommands(e0);
this->WriteAllSources(e0);
this->WriteDotNetReferences(e0);
this->WriteImports(e0);
this->WriteEmbeddedResourceGroup(e0);
this->WriteXamlFilesGroup(e0);
this->WriteWinRTReferences(e0);
......@@ -811,6 +812,24 @@ void cmVisualStudio10TargetGenerator::WriteDotNetReference(
this->WriteDotNetReferenceCustomTags(e2, ref);
}
void cmVisualStudio10TargetGenerator::WriteImports(Elem& e0)
{
const char* imports =
this->GeneratorTarget->Target->GetProperty("VS_PROJECT_IMPORT");
if (imports) {
std::vector<std::string> argsSplit;
cmSystemTools::ExpandListArgument(std::string(imports), argsSplit, false);
for (auto& path : argsSplit) {
if (!cmsys::SystemTools::FileIsFullPath(path)) {
path = this->Makefile->GetCurrentSourceDirectory() + "/" + path;
}
ConvertToWindowsSlash(path);
Elem e1(e0, "Import");
e1.Attribute("Project", path);
}
}
}
void cmVisualStudio10TargetGenerator::WriteDotNetReferenceCustomTags(
Elem& e2, std::string const& ref)
{
......
......@@ -76,6 +76,7 @@ private:
void WriteDotNetReference(Elem& e1, std::string const& ref,
std::string const& hint,
std::string const& config);
void WriteImports(Elem& e0);
void WriteDotNetReferenceCustomTags(Elem& e2, std::string const& ref);
void WriteEmbeddedResourceGroup(Elem& e0);
void WriteWinRTReferences(Elem& e0);
......
......@@ -18,3 +18,4 @@ run_cmake(VsCSharpDeployFiles)
run_cmake(VSCSharpDefines)
run_cmake(VsSdkDirectories)
run_cmake(VsGlobals)
run_cmake(VsProjectImport)
set(vcProjectFile "${RunCMake_TEST_BINARY_DIR}/foo.vcxproj")
if(NOT EXISTS "${vcProjectFile}")
set(RunCMake_TEST_FAILED "Project file ${vcProjectFile} does not exist.")
return()
endif()
set(test1Import "path\\\\to\\\\nuget_packages\\\\Foo.1.0.0\\\\build\\\\Foo.props")
set(test2Import "path\\\\to\\\\nuget_packages\\\\Bar.1.0.0\\\\build\\\\Bar.props")
set(import1Found FALSE)
set(import2Found FALSE)
file(STRINGS "${vcProjectFile}" lines)
foreach(i 1 2)
set(testImport "${test${i}Import}")
foreach(line IN LISTS lines)
if(line MATCHES "^ *<Import Project=\".*${test1Import}\" />$")
message(STATUS "foo.vcxproj is using project import ${testImport}")
set(import${i}Found TRUE)
endif()
endforeach()
endforeach()
if(NOT import1Found OR NOT import2Found)
set(RunCMake_TEST_FAILED "Imported project not found.")
return()
endif()
enable_language(CXX)
add_library(foo foo.cpp)
set(test1Import "path/to/nuget_packages/Foo.1.0.0/build/Foo.props")
set(test2Import "path/to/nuget_packages/Bar.1.0.0/build/Bar.props")
set_property(TARGET foo PROPERTY
VS_PROJECT_IMPORT
${test1Import}
${test2Import}
)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment