Browse Source

Merge topic 'export-interface-source-files'

f7e33820 Add release notes for export-interface-source-files.
6da65b39 Allow export of targets with INTERFACE_SOURCES.
736bcb96 Tests: Move IfacePaths test stderr files.
d9f8390d Tests: Run IfacePaths tests with a parameter.
cc152094 Tests: Split part of include_directories test to a generic location.
Brad King 10 years ago
parent
commit
108e94ecf1
72 changed files with 488 additions and 291 deletions
  1. 0 4
      Help/command/target_sources.rst
  2. 0 4
      Help/prop_tgt/INTERFACE_SOURCES.rst
  3. 6 0
      Help/release/dev/export-interface-source-files.rst
  4. 3 10
      Source/cmExportBuildFileGenerator.cxx
  5. 93 43
      Source/cmExportFileGenerator.cxx
  6. 5 0
      Source/cmExportFileGenerator.h
  7. 16 12
      Source/cmExportInstallFileGenerator.cxx
  8. 11 1
      Tests/ExportImport/Export/Interface/CMakeLists.txt
  9. 13 0
      Tests/ExportImport/Export/Interface/source_target.cpp
  10. 13 0
      Tests/ExportImport/Export/Interface/source_target_for_install.cpp
  11. 8 0
      Tests/ExportImport/Import/Interface/CMakeLists.txt
  12. 7 0
      Tests/ExportImport/Import/Interface/source_target_test.cpp
  13. 6 0
      Tests/RunCMake/CMakeLists.txt
  14. 0 0
      Tests/RunCMake/IfacePaths/BinInInstallPrefix-CMP0052-NEW-result.txt
  15. 1 1
      Tests/RunCMake/IfacePaths/BinInInstallPrefix-CMP0052-NEW-stderr_INCLUDE_DIRECTORIES.txt
  16. 0 0
      Tests/RunCMake/IfacePaths/BinInInstallPrefix-CMP0052-OLD-result.txt
  17. 0 0
      Tests/RunCMake/IfacePaths/BinInInstallPrefix-CMP0052-WARN-result.txt
  18. 3 3
      Tests/RunCMake/IfacePaths/BinInInstallPrefix-CMP0052-WARN-stderr_INCLUDE_DIRECTORIES.txt
  19. 0 0
      Tests/RunCMake/IfacePaths/BinInInstallPrefix-result.txt
  20. 6 0
      Tests/RunCMake/IfacePaths/BinInInstallPrefix-stderr_SOURCES.txt
  21. 0 0
      Tests/RunCMake/IfacePaths/BinaryDirectoryInInterface-result.txt
  22. 1 1
      Tests/RunCMake/IfacePaths/BinaryDirectoryInInterface-stderr_INCLUDE_DIRECTORIES.txt
  23. 6 0
      Tests/RunCMake/IfacePaths/BinaryDirectoryInInterface-stderr_SOURCES.txt
  24. 15 0
      Tests/RunCMake/IfacePaths/BinaryDirectoryInInterface.cmake
  25. 6 0
      Tests/RunCMake/IfacePaths/CMakeLists.txt
  26. 0 0
      Tests/RunCMake/IfacePaths/DirInInstallPrefix-result.txt
  27. 14 0
      Tests/RunCMake/IfacePaths/DirInInstallPrefix.cmake
  28. 0 0
      Tests/RunCMake/IfacePaths/InstallInBinDir-result.txt
  29. 1 1
      Tests/RunCMake/IfacePaths/InstallInBinDir-stderr_INCLUDE_DIRECTORIES.txt
  30. 6 0
      Tests/RunCMake/IfacePaths/InstallInBinDir-stderr_SOURCES.txt
  31. 0 0
      Tests/RunCMake/IfacePaths/InstallInSrcDir-result.txt
  32. 1 1
      Tests/RunCMake/IfacePaths/InstallInSrcDir-stderr_INCLUDE_DIRECTORIES.txt
  33. 6 0
      Tests/RunCMake/IfacePaths/InstallInSrcDir-stderr_SOURCES.txt
  34. 0 0
      Tests/RunCMake/IfacePaths/InstallPrefixInInterface-result.txt
  35. 0 0
      Tests/RunCMake/IfacePaths/InstallPrefixInInterface.cmake
  36. 0 0
      Tests/RunCMake/IfacePaths/InstallToPrefixInSrcDirInSource-result.txt
  37. 0 0
      Tests/RunCMake/IfacePaths/InstallToPrefixInSrcDirOutOfSource-result.txt
  38. 0 0
      Tests/RunCMake/IfacePaths/RelativePathInGenex-result.txt
  39. 0 0
      Tests/RunCMake/IfacePaths/RelativePathInGenex-stderr_INCLUDE_DIRECTORIES.txt
  40. 4 0
      Tests/RunCMake/IfacePaths/RelativePathInGenex-stderr_SOURCES.txt
  41. 13 0
      Tests/RunCMake/IfacePaths/RelativePathInGenex.cmake
  42. 0 0
      Tests/RunCMake/IfacePaths/RelativePathInInterface-result.txt
  43. 0 0
      Tests/RunCMake/IfacePaths/RelativePathInInterface-stderr_INCLUDE_DIRECTORIES.txt
  44. 4 0
      Tests/RunCMake/IfacePaths/RelativePathInInterface-stderr_SOURCES.txt
  45. 14 0
      Tests/RunCMake/IfacePaths/RelativePathInInterface.cmake
  46. 156 0
      Tests/RunCMake/IfacePaths/RunCMakeTest.cmake
  47. 0 0
      Tests/RunCMake/IfacePaths/SourceDirectoryInInterface-result.txt
  48. 1 1
      Tests/RunCMake/IfacePaths/SourceDirectoryInInterface-stderr_INCLUDE_DIRECTORIES.txt
  49. 6 0
      Tests/RunCMake/IfacePaths/SourceDirectoryInInterface-stderr_SOURCES.txt
  50. 15 0
      Tests/RunCMake/IfacePaths/SourceDirectoryInInterface.cmake
  51. 0 0
      Tests/RunCMake/IfacePaths/SrcInInstallPrefix-CMP0052-NEW-result.txt
  52. 1 1
      Tests/RunCMake/IfacePaths/SrcInInstallPrefix-CMP0052-NEW-stderr_INCLUDE_DIRECTORIES.txt
  53. 0 0
      Tests/RunCMake/IfacePaths/SrcInInstallPrefix-CMP0052-OLD-result.txt
  54. 0 0
      Tests/RunCMake/IfacePaths/SrcInInstallPrefix-CMP0052-WARN-result.txt
  55. 3 3
      Tests/RunCMake/IfacePaths/SrcInInstallPrefix-CMP0052-WARN-stderr_INCLUDE_DIRECTORIES.txt
  56. 1 0
      Tests/RunCMake/IfacePaths/SrcInInstallPrefix-result.txt
  57. 6 0
      Tests/RunCMake/IfacePaths/SrcInInstallPrefix-stderr_SOURCES.txt
  58. 0 0
      Tests/RunCMake/IfacePaths/empty.cpp
  59. 0 0
      Tests/RunCMake/IfacePaths/export-NOWARN-result.txt
  60. 15 0
      Tests/RunCMake/IfacePaths/export-NOWARN.cmake
  61. 1 1
      Tests/RunCMake/TargetSources/ExportBuild-result.txt
  62. 0 1
      Tests/RunCMake/TargetSources/ExportBuild-stderr.txt
  63. 0 1
      Tests/RunCMake/TargetSources/ExportInstall-stderr.txt
  64. 0 6
      Tests/RunCMake/TargetSources/ExportInstall.cmake
  65. 0 1
      Tests/RunCMake/TargetSources/RunCMakeTest.cmake
  66. 0 11
      Tests/RunCMake/include_directories/BinaryDirectoryInInterface.cmake
  67. 1 4
      Tests/RunCMake/include_directories/CMakeLists.txt
  68. 0 9
      Tests/RunCMake/include_directories/DirInInstallPrefix.cmake
  69. 0 8
      Tests/RunCMake/include_directories/RelativePathInGenex.cmake
  70. 0 11
      Tests/RunCMake/include_directories/RelativePathInInterface.cmake
  71. 0 141
      Tests/RunCMake/include_directories/RunCMakeTest.cmake
  72. 0 11
      Tests/RunCMake/include_directories/SourceDirectoryInInterface.cmake

+ 0 - 4
Help/command/target_sources.rst

@@ -22,10 +22,6 @@ items will populate the :prop_tgt:`SOURCES` property of
 following arguments specify sources.  Repeated calls for the same
 following arguments specify sources.  Repeated calls for the same
 ``<target>`` append items in the order called.
 ``<target>`` append items in the order called.
 
 
-Targets with :prop_tgt:`INTERFACE_SOURCES` may not be exported with the
-:command:`export` or :command:`install(EXPORT)` commands. This limitation may be
-lifted in a future version of CMake.
-
 Arguments to ``target_sources`` may use "generator expressions"
 Arguments to ``target_sources`` may use "generator expressions"
 with the syntax ``$<...>``. See the :manual:`cmake-generator-expressions(7)`
 with the syntax ``$<...>``. See the :manual:`cmake-generator-expressions(7)`
 manual for available expressions.  See the :manual:`cmake-buildsystem(7)`
 manual for available expressions.  See the :manual:`cmake-buildsystem(7)`

+ 0 - 4
Help/prop_tgt/INTERFACE_SOURCES.rst

@@ -12,10 +12,6 @@ When target dependencies are specified using :command:`target_link_libraries`,
 CMake will read this property from all target dependencies to determine the
 CMake will read this property from all target dependencies to determine the
 sources of the consumer.
 sources of the consumer.
 
 
-Targets with ``INTERFACE_SOURCES`` may not be exported with the
-:command:`export` or :command:`install(EXPORT)` commands. This limitation may be
-lifted in a future version of CMake.
-
 Contents of ``INTERFACE_SOURCES`` may use "generator expressions"
 Contents of ``INTERFACE_SOURCES`` may use "generator expressions"
 with the syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)`
 with the syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)`
 manual for available expressions.  See the :manual:`cmake-buildsystem(7)`
 manual for available expressions.  See the :manual:`cmake-buildsystem(7)`

+ 6 - 0
Help/release/dev/export-interface-source-files.rst

@@ -0,0 +1,6 @@
+export-interface-source-files
+-----------------------------
+
+* It is now possible to export targets which populate the
+  :prop_tgt:`INTERFACE_SOURCES` target property using the
+  :command:`install(EXPORT)` and :command:`export()` commands.

+ 3 - 10
Source/cmExportBuildFileGenerator.cxx

@@ -68,16 +68,6 @@ bool cmExportBuildFileGenerator::GenerateMainFile(std::ostream& os)
       tei != this->Exports.end(); ++tei)
       tei != this->Exports.end(); ++tei)
     {
     {
     cmTarget* te = *tei;
     cmTarget* te = *tei;
-    if (te->GetProperty("INTERFACE_SOURCES"))
-      {
-      std::ostringstream e;
-      e << "Target \""
-        << te->GetName()
-        << "\" has a populated INTERFACE_SOURCES property.  This is not "
-          "currently supported.";
-      cmSystemTools::Error(e.str().c_str());
-      return false;
-      }
     this->GenerateImportTargetCode(os, te);
     this->GenerateImportTargetCode(os, te);
 
 
     te->AppendBuildInterfaceIncludes();
     te->AppendBuildInterfaceIncludes();
@@ -87,6 +77,9 @@ bool cmExportBuildFileGenerator::GenerateMainFile(std::ostream& os)
     this->PopulateInterfaceProperty("INTERFACE_INCLUDE_DIRECTORIES", te,
     this->PopulateInterfaceProperty("INTERFACE_INCLUDE_DIRECTORIES", te,
                                     cmGeneratorExpression::BuildInterface,
                                     cmGeneratorExpression::BuildInterface,
                                     properties, missingTargets);
                                     properties, missingTargets);
+    this->PopulateInterfaceProperty("INTERFACE_SOURCES", te,
+                                    cmGeneratorExpression::BuildInterface,
+                                    properties, missingTargets);
     this->PopulateInterfaceProperty("INTERFACE_COMPILE_DEFINITIONS", te,
     this->PopulateInterfaceProperty("INTERFACE_COMPILE_DEFINITIONS", te,
                                     cmGeneratorExpression::BuildInterface,
                                     cmGeneratorExpression::BuildInterface,
                                     properties, missingTargets);
                                     properties, missingTargets);

+ 93 - 43
Source/cmExportFileGenerator.cxx

@@ -224,7 +224,7 @@ static bool isSubDirectory(const char* a, const char* b)
 
 
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
 static bool checkInterfaceDirs(const std::string &prepro,
 static bool checkInterfaceDirs(const std::string &prepro,
-                      cmTarget *target)
+                      cmTarget *target, const std::string& prop)
 {
 {
   const char* installDir =
   const char* installDir =
             target->GetMakefile()->GetSafeDefinition("CMAKE_INSTALL_PREFIX");
             target->GetMakefile()->GetSafeDefinition("CMAKE_INSTALL_PREFIX");
@@ -250,20 +250,27 @@ static bool checkInterfaceDirs(const std::string &prepro,
     std::ostringstream e;
     std::ostringstream e;
     if (genexPos != std::string::npos)
     if (genexPos != std::string::npos)
       {
       {
-      switch (target->GetPolicyStatusCMP0041())
+      if (prop == "INTERFACE_INCLUDE_DIRECTORIES")
         {
         {
-        case cmPolicies::WARN:
-          messageType = cmake::WARNING;
-          e << target->GetMakefile()->GetPolicies()
-                      ->GetPolicyWarning(cmPolicies::CMP0041) << "\n";
-          break;
-        case cmPolicies::OLD:
-          continue;
-        case cmPolicies::REQUIRED_IF_USED:
-        case cmPolicies::REQUIRED_ALWAYS:
-        case cmPolicies::NEW:
-          hadFatalError = true;
-          break; // Issue fatal message.
+        switch (target->GetPolicyStatusCMP0041())
+          {
+          case cmPolicies::WARN:
+            messageType = cmake::WARNING;
+            e << target->GetMakefile()->GetPolicies()
+                        ->GetPolicyWarning(cmPolicies::CMP0041) << "\n";
+            break;
+          case cmPolicies::OLD:
+            continue;
+          case cmPolicies::REQUIRED_IF_USED:
+          case cmPolicies::REQUIRED_ALWAYS:
+          case cmPolicies::NEW:
+            hadFatalError = true;
+            break; // Issue fatal message.
+          }
+        }
+      else
+        {
+        hadFatalError = true;
         }
         }
       }
       }
     if (cmHasLiteralPrefix(li->c_str(), "${_IMPORT_PREFIX}"))
     if (cmHasLiteralPrefix(li->c_str(), "${_IMPORT_PREFIX}"))
@@ -272,8 +279,8 @@ static bool checkInterfaceDirs(const std::string &prepro,
       }
       }
     if (!cmSystemTools::FileIsFullPath(li->c_str()))
     if (!cmSystemTools::FileIsFullPath(li->c_str()))
       {
       {
-      e << "Target \"" << target->GetName() << "\" "
-           "INTERFACE_INCLUDE_DIRECTORIES property contains relative path:\n"
+      e << "Target \"" << target->GetName() << "\" " << prop <<
+           " property contains relative path:\n"
            "  \"" << *li << "\"";
            "  \"" << *li << "\"";
       target->GetMakefile()->IssueMessage(messageType, e.str());
       target->GetMakefile()->IssueMessage(messageType, e.str());
       }
       }
@@ -289,32 +296,35 @@ static bool checkInterfaceDirs(const std::string &prepro,
         (!inBinary || isSubDirectory(installDir, topBinaryDir)) &&
         (!inBinary || isSubDirectory(installDir, topBinaryDir)) &&
         (!inSource || isSubDirectory(installDir, topSourceDir));
         (!inSource || isSubDirectory(installDir, topSourceDir));
 
 
-      if (!shouldContinue)
+      if (prop == "INTERFACE_INCLUDE_DIRECTORIES")
         {
         {
-        switch(target->GetPolicyStatusCMP0052())
+        if (!shouldContinue)
           {
           {
-          case cmPolicies::WARN:
+          switch(target->GetPolicyStatusCMP0052())
             {
             {
-            std::ostringstream s;
-            s << target->GetMakefile()->GetPolicies()
-                      ->GetPolicyWarning(cmPolicies::CMP0052) << "\n";
-            s << "Directory:\n    \"" << *li << "\"\nin "
-              "INTERFACE_INCLUDE_DIRECTORIES of target \""
-              << target->GetName() << "\" is a subdirectory of the install "
-              "directory:\n    \"" << installDir << "\"\nhowever it is also "
-              "a subdirectory of the " << (inBinary ? "build" : "source")
-              << " tree:\n    \"" << (inBinary ? topBinaryDir : topSourceDir)
-              << "\"" << std::endl;
-            target->GetMakefile()->IssueMessage(cmake::AUTHOR_WARNING,
-                                                s.str());
+            case cmPolicies::WARN:
+              {
+              std::ostringstream s;
+              s << target->GetMakefile()->GetPolicies()
+                        ->GetPolicyWarning(cmPolicies::CMP0052) << "\n";
+              s << "Directory:\n    \"" << *li << "\"\nin "
+                "INTERFACE_INCLUDE_DIRECTORIES of target \""
+                << target->GetName() << "\" is a subdirectory of the install "
+                "directory:\n    \"" << installDir << "\"\nhowever it is also "
+                "a subdirectory of the " << (inBinary ? "build" : "source")
+                << " tree:\n    \"" << (inBinary ? topBinaryDir : topSourceDir)
+                << "\"" << std::endl;
+              target->GetMakefile()->IssueMessage(cmake::AUTHOR_WARNING,
+                                                  s.str());
+              }
+            case cmPolicies::OLD:
+              shouldContinue = true;
+              break;
+            case cmPolicies::REQUIRED_ALWAYS:
+            case cmPolicies::REQUIRED_IF_USED:
+            case cmPolicies::NEW:
+              break;
             }
             }
-          case cmPolicies::OLD:
-            shouldContinue = true;
-            break;
-          case cmPolicies::REQUIRED_ALWAYS:
-          case cmPolicies::REQUIRED_IF_USED:
-          case cmPolicies::NEW:
-            break;
           }
           }
         }
         }
       if (shouldContinue)
       if (shouldContinue)
@@ -324,8 +334,8 @@ static bool checkInterfaceDirs(const std::string &prepro,
       }
       }
     if (inBinary)
     if (inBinary)
       {
       {
-      e << "Target \"" << target->GetName() << "\" "
-           "INTERFACE_INCLUDE_DIRECTORIES property contains path:\n"
+      e << "Target \"" << target->GetName() << "\" " << prop <<
+           " property contains path:\n"
            "  \"" << *li << "\"\nwhich is prefixed in the build directory.";
            "  \"" << *li << "\"\nwhich is prefixed in the build directory.";
       target->GetMakefile()->IssueMessage(messageType, e.str());
       target->GetMakefile()->IssueMessage(messageType, e.str());
       }
       }
@@ -333,8 +343,8 @@ static bool checkInterfaceDirs(const std::string &prepro,
       {
       {
       if (inSource)
       if (inSource)
         {
         {
-        e << "Target \"" << target->GetName() << "\" "
-            "INTERFACE_INCLUDE_DIRECTORIES property contains path:\n"
+        e << "Target \"" << target->GetName() << "\" " << prop <<
+            " property contains path:\n"
             "  \"" << *li << "\"\nwhich is prefixed in the source directory.";
             "  \"" << *li << "\"\nwhich is prefixed in the source directory.";
         target->GetMakefile()->IssueMessage(messageType, e.str());
         target->GetMakefile()->IssueMessage(messageType, e.str());
         }
         }
@@ -364,6 +374,46 @@ static void prefixItems(std::string &exportDirs)
     }
     }
 }
 }
 
 
+//----------------------------------------------------------------------------
+void cmExportFileGenerator::PopulateSourcesInterface(
+                      cmTargetExport *tei,
+                      cmGeneratorExpression::PreprocessContext preprocessRule,
+                      ImportPropertyMap &properties,
+                      std::vector<std::string> &missingTargets)
+{
+  cmTarget *target = tei->Target;
+  assert(preprocessRule == cmGeneratorExpression::InstallInterface);
+
+  const char *propName = "INTERFACE_SOURCES";
+  const char *input = target->GetProperty(propName);
+
+  if (!input)
+    {
+    return;
+    }
+
+  if (!*input)
+    {
+    properties[propName] = "";
+    return;
+    }
+
+  std::string prepro = cmGeneratorExpression::Preprocess(input,
+                                                         preprocessRule,
+                                                         true);
+  if (!prepro.empty())
+    {
+    this->ResolveTargetsInGeneratorExpressions(prepro, target,
+                                                missingTargets);
+
+    if (!checkInterfaceDirs(prepro, target, propName))
+      {
+      return;
+      }
+    properties[propName] = prepro;
+    }
+}
+
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
 void cmExportFileGenerator::PopulateIncludeDirectoriesInterface(
 void cmExportFileGenerator::PopulateIncludeDirectoriesInterface(
                       cmTargetExport *tei,
                       cmTargetExport *tei,
@@ -424,7 +474,7 @@ void cmExportFileGenerator::PopulateIncludeDirectoriesInterface(
     this->ResolveTargetsInGeneratorExpressions(prepro, target,
     this->ResolveTargetsInGeneratorExpressions(prepro, target,
                                                 missingTargets);
                                                 missingTargets);
 
 
-    if (!checkInterfaceDirs(prepro, target))
+    if (!checkInterfaceDirs(prepro, target, propName))
       {
       {
       return;
       return;
       }
       }

+ 5 - 0
Source/cmExportFileGenerator.h

@@ -139,6 +139,11 @@ protected:
                       cmGeneratorExpression::PreprocessContext preprocessRule,
                       cmGeneratorExpression::PreprocessContext preprocessRule,
                       ImportPropertyMap &properties,
                       ImportPropertyMap &properties,
                       std::vector<std::string> &missingTargets);
                       std::vector<std::string> &missingTargets);
+  void PopulateSourcesInterface(
+                      cmTargetExport *target,
+                      cmGeneratorExpression::PreprocessContext preprocessRule,
+                      ImportPropertyMap &properties,
+                      std::vector<std::string> &missingTargets);
 
 
   void SetImportLinkInterface(const std::string& config,
   void SetImportLinkInterface(const std::string& config,
                     std::string const& suffix,
                     std::string const& suffix,

+ 16 - 12
Source/cmExportInstallFileGenerator.cxx

@@ -123,6 +123,7 @@ bool cmExportInstallFileGenerator::GenerateMainFile(std::ostream& os)
 
 
   bool require2_8_12 = false;
   bool require2_8_12 = false;
   bool require3_0_0 = false;
   bool require3_0_0 = false;
+  bool require3_1_0 = false;
   bool requiresConfigFiles = false;
   bool requiresConfigFiles = false;
   // Create all the imported targets.
   // Create all the imported targets.
   for(std::vector<cmTargetExport*>::const_iterator
   for(std::vector<cmTargetExport*>::const_iterator
@@ -131,17 +132,6 @@ bool cmExportInstallFileGenerator::GenerateMainFile(std::ostream& os)
     {
     {
     cmTarget* te = (*tei)->Target;
     cmTarget* te = (*tei)->Target;
 
 
-    if (te->GetProperty("INTERFACE_SOURCES"))
-      {
-      std::ostringstream e;
-      e << "Target \""
-        << te->GetName()
-        << "\" has a populated INTERFACE_SOURCES property.  This is not "
-          "currently supported.";
-      cmSystemTools::Error(e.str().c_str());
-      return false;
-      }
-
     requiresConfigFiles = requiresConfigFiles
     requiresConfigFiles = requiresConfigFiles
                               || te->GetType() != cmTarget::INTERFACE_LIBRARY;
                               || te->GetType() != cmTarget::INTERFACE_LIBRARY;
 
 
@@ -152,6 +142,9 @@ bool cmExportInstallFileGenerator::GenerateMainFile(std::ostream& os)
     this->PopulateIncludeDirectoriesInterface(*tei,
     this->PopulateIncludeDirectoriesInterface(*tei,
                                   cmGeneratorExpression::InstallInterface,
                                   cmGeneratorExpression::InstallInterface,
                                   properties, missingTargets);
                                   properties, missingTargets);
+    this->PopulateSourcesInterface(*tei,
+                                  cmGeneratorExpression::InstallInterface,
+                                  properties, missingTargets);
     this->PopulateInterfaceProperty("INTERFACE_SYSTEM_INCLUDE_DIRECTORIES",
     this->PopulateInterfaceProperty("INTERFACE_SYSTEM_INCLUDE_DIRECTORIES",
                                   te,
                                   te,
                                   cmGeneratorExpression::InstallInterface,
                                   cmGeneratorExpression::InstallInterface,
@@ -190,6 +183,13 @@ bool cmExportInstallFileGenerator::GenerateMainFile(std::ostream& os)
       {
       {
       require3_0_0 = true;
       require3_0_0 = true;
       }
       }
+    if(te->GetProperty("INTERFACE_SOURCES"))
+      {
+      // We can only generate INTERFACE_SOURCES in CMake 3.3, but CMake 3.1
+      // can consume them.
+      require3_1_0 = true;
+      }
+
     this->PopulateInterfaceProperty("INTERFACE_POSITION_INDEPENDENT_CODE",
     this->PopulateInterfaceProperty("INTERFACE_POSITION_INDEPENDENT_CODE",
                                   te, properties);
                                   te, properties);
     this->PopulateCompatibleInterfaceProperties(te, properties);
     this->PopulateCompatibleInterfaceProperties(te, properties);
@@ -197,7 +197,11 @@ bool cmExportInstallFileGenerator::GenerateMainFile(std::ostream& os)
     this->GenerateInterfaceProperties(te, os, properties);
     this->GenerateInterfaceProperties(te, os, properties);
     }
     }
 
 
-  if (require3_0_0)
+  if (require3_1_0)
+    {
+    this->GenerateRequiredCMakeVersion(os, "3.1.0");
+    }
+  else if (require3_0_0)
     {
     {
     this->GenerateRequiredCMakeVersion(os, "3.0.0");
     this->GenerateRequiredCMakeVersion(os, "3.0.0");
     }
     }

+ 11 - 1
Tests/ExportImport/Export/Interface/CMakeLists.txt

@@ -29,7 +29,17 @@ target_compile_features(use_auto_type INTERFACE cxx_auto_type)
 add_library(use_c_restrict INTERFACE)
 add_library(use_c_restrict INTERFACE)
 target_compile_features(use_c_restrict INTERFACE c_restrict)
 target_compile_features(use_c_restrict INTERFACE c_restrict)
 
 
-install(TARGETS headeronly sharediface use_auto_type use_c_restrict
+add_library(source_target INTERFACE)
+target_sources(source_target INTERFACE
+  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/source_target.cpp>
+  $<INSTALL_INTERFACE:$<INSTALL_PREFIX>/src/source_target_for_install.cpp>
+)
+install(FILES
+  source_target_for_install.cpp
+  DESTINATION src
+)
+
+install(TARGETS headeronly sharediface use_auto_type use_c_restrict source_target
   EXPORT expInterface
   EXPORT expInterface
 )
 )
 install(TARGETS sharedlib
 install(TARGETS sharedlib

+ 13 - 0
Tests/ExportImport/Export/Interface/source_target.cpp

@@ -0,0 +1,13 @@
+
+#ifndef USE_FROM_BUILD_DIR
+#error Expected define USE_FROM_BUILD_DIR
+#endif
+
+#ifdef USE_FROM_INSTALL_DIR
+#error Unexpected define USE_FROM_INSTALL_DIR
+#endif
+
+int source_symbol()
+{
+  return 42;
+}

+ 13 - 0
Tests/ExportImport/Export/Interface/source_target_for_install.cpp

@@ -0,0 +1,13 @@
+
+#ifdef USE_FROM_BUILD_DIR
+#error Unexpected define USE_FROM_BUILD_DIR
+#endif
+
+#ifndef USE_FROM_INSTALL_DIR
+#error Expected define USE_FROM_INSTALL_DIR
+#endif
+
+int source_symbol()
+{
+  return 42;
+}

+ 8 - 0
Tests/ExportImport/Import/Interface/CMakeLists.txt

@@ -82,6 +82,14 @@ endmacro()
 
 
 do_try_compile(bld)
 do_try_compile(bld)
 
 
+add_executable(source_target_test_bld source_target_test.cpp)
+target_link_libraries(source_target_test_bld bld::source_target)
+target_compile_definitions(source_target_test_bld PRIVATE USE_FROM_BUILD_DIR)
+
+add_executable(source_target_test_exp source_target_test.cpp)
+target_link_libraries(source_target_test_exp exp::source_target)
+target_compile_definitions(source_target_test_exp PRIVATE USE_FROM_INSTALL_DIR)
+
 add_executable(headeronlytest_exp headeronlytest.cpp)
 add_executable(headeronlytest_exp headeronlytest.cpp)
 target_link_libraries(headeronlytest_exp exp::headeronly)
 target_link_libraries(headeronlytest_exp exp::headeronly)
 
 

+ 7 - 0
Tests/ExportImport/Import/Interface/source_target_test.cpp

@@ -0,0 +1,7 @@
+
+extern int source_symbol();
+
+int main()
+{
+  return source_symbol() - 42;
+}

+ 6 - 0
Tests/RunCMake/CMakeLists.txt

@@ -189,6 +189,12 @@ add_RunCMake_test(install)
 add_RunCMake_test(CPackInstallProperties)
 add_RunCMake_test(CPackInstallProperties)
 add_RunCMake_test(ExternalProject)
 add_RunCMake_test(ExternalProject)
 
 
+set(IfacePaths_INCLUDE_DIRECTORIES_ARGS -DTEST_PROP=INCLUDE_DIRECTORIES)
+add_RunCMake_test(IfacePaths_INCLUDE_DIRECTORIES TEST_DIR IfacePaths)
+
+set(IfacePaths_SOURCES_ARGS -DTEST_PROP=SOURCES)
+add_RunCMake_test(IfacePaths_SOURCES TEST_DIR IfacePaths)
+
 if(RPMBUILD)
 if(RPMBUILD)
   add_RunCMake_test(CPackRPM)
   add_RunCMake_test(CPackRPM)
 endif()
 endif()

+ 0 - 0
Tests/RunCMake/include_directories/BinInInstallPrefix-CMP0052-NEW-result.txt → Tests/RunCMake/IfacePaths/BinInInstallPrefix-CMP0052-NEW-result.txt


+ 1 - 1
Tests/RunCMake/include_directories/BinInInstallPrefix-CMP0052-NEW-stderr.txt → Tests/RunCMake/IfacePaths/BinInInstallPrefix-CMP0052-NEW-stderr_INCLUDE_DIRECTORIES.txt

@@ -1,6 +1,6 @@
 CMake Error in CMakeLists.txt:
 CMake Error in CMakeLists.txt:
   Target "testTarget" INTERFACE_INCLUDE_DIRECTORIES property contains path:
   Target "testTarget" INTERFACE_INCLUDE_DIRECTORIES property contains path:
 
 
-    ".*Tests/RunCMake/include_directories/prefix/BinInInstallPrefix-CMP0052-NEW-build/foo"
+    ".*Tests/RunCMake/IfacePaths_INCLUDE_DIRECTORIES/prefix/BinInInstallPrefix-CMP0052-NEW-build/foo"
 
 
   which is prefixed in the build directory.
   which is prefixed in the build directory.

+ 0 - 0
Tests/RunCMake/include_directories/BinInInstallPrefix-CMP0052-OLD-result.txt → Tests/RunCMake/IfacePaths/BinInInstallPrefix-CMP0052-OLD-result.txt


+ 0 - 0
Tests/RunCMake/include_directories/BinInInstallPrefix-CMP0052-WARN-result.txt → Tests/RunCMake/IfacePaths/BinInInstallPrefix-CMP0052-WARN-result.txt


+ 3 - 3
Tests/RunCMake/include_directories/BinInInstallPrefix-CMP0052-WARN-stderr.txt → Tests/RunCMake/IfacePaths/BinInInstallPrefix-CMP0052-WARN-stderr_INCLUDE_DIRECTORIES.txt

@@ -6,15 +6,15 @@ CMake Warning \(dev\) in CMakeLists.txt:
 
 
   Directory:
   Directory:
 
 
-      ".*Tests/RunCMake/include_directories/prefix/BinInInstallPrefix-CMP0052-WARN-build/foo"
+      ".*Tests/RunCMake/IfacePaths_INCLUDE_DIRECTORIES/prefix/BinInInstallPrefix-CMP0052-WARN-build/foo"
 
 
   in INTERFACE_INCLUDE_DIRECTORIES of target "testTarget" is a subdirectory
   in INTERFACE_INCLUDE_DIRECTORIES of target "testTarget" is a subdirectory
   of the install directory:
   of the install directory:
 
 
-      ".*Tests/RunCMake/include_directories/prefix"
+      ".*Tests/RunCMake/IfacePaths_INCLUDE_DIRECTORIES/prefix"
 
 
   however it is also a subdirectory of the build tree:
   however it is also a subdirectory of the build tree:
 
 
-      ".*Tests/RunCMake/include_directories/prefix/BinInInstallPrefix-CMP0052-WARN-build"
+      ".*Tests/RunCMake/IfacePaths_INCLUDE_DIRECTORIES/prefix/BinInInstallPrefix-CMP0052-WARN-build"
 
 
 This warning is for project developers.  Use -Wno-dev to suppress it.
 This warning is for project developers.  Use -Wno-dev to suppress it.

+ 0 - 0
Tests/RunCMake/TargetSources/ExportInstall-result.txt → Tests/RunCMake/IfacePaths/BinInInstallPrefix-result.txt


+ 6 - 0
Tests/RunCMake/IfacePaths/BinInInstallPrefix-stderr_SOURCES.txt

@@ -0,0 +1,6 @@
+CMake Error in CMakeLists.txt:
+  Target "testTarget" INTERFACE_SOURCES property contains path:
+
+    ".*Tests/RunCMake/IfacePaths_SOURCES/prefix/BinInInstallPrefix-build/empty.cpp"
+
+  which is prefixed in the build directory.

+ 0 - 0
Tests/RunCMake/include_directories/BinaryDirectoryInInterface-result.txt → Tests/RunCMake/IfacePaths/BinaryDirectoryInInterface-result.txt


+ 1 - 1
Tests/RunCMake/include_directories/InstallInBinDir-stderr.txt → Tests/RunCMake/IfacePaths/BinaryDirectoryInInterface-stderr_INCLUDE_DIRECTORIES.txt

@@ -1,6 +1,6 @@
 CMake Error in CMakeLists.txt:
 CMake Error in CMakeLists.txt:
   Target "testTarget" INTERFACE_INCLUDE_DIRECTORIES property contains path:
   Target "testTarget" INTERFACE_INCLUDE_DIRECTORIES property contains path:
 
 
-    ".*Tests/RunCMake/include_directories/InstallInBinDir-build/foo"
+    ".*RunCMake/IfacePaths_INCLUDE_DIRECTORIES/BinaryDirectoryInInterface-build/foo"
 
 
   which is prefixed in the build directory.
   which is prefixed in the build directory.

+ 6 - 0
Tests/RunCMake/IfacePaths/BinaryDirectoryInInterface-stderr_SOURCES.txt

@@ -0,0 +1,6 @@
+CMake Error in CMakeLists.txt:
+  Target "testTarget" INTERFACE_SOURCES property contains path:
+
+    ".*Tests/RunCMake/IfacePaths_SOURCES/BinaryDirectoryInInterface-build/empty.cpp"
+
+  which is prefixed in the build directory.

+ 15 - 0
Tests/RunCMake/IfacePaths/BinaryDirectoryInInterface.cmake

@@ -0,0 +1,15 @@
+
+enable_language(CXX)
+
+add_library(testTarget "${CMAKE_CURRENT_SOURCE_DIR}/empty.cpp")
+if (TEST_PROP STREQUAL INCLUDE_DIRECTORIES)
+  set_property(TARGET testTarget PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_BINARY_DIR}/foo")
+else()
+  set_property(TARGET testTarget PROPERTY INTERFACE_SOURCES "${CMAKE_CURRENT_BINARY_DIR}/empty.cpp")
+endif()
+
+install(TARGETS testTarget EXPORT testTargets
+  DESTINATION lib
+)
+
+install(EXPORT testTargets DESTINATION lib/cmake)

+ 6 - 0
Tests/RunCMake/IfacePaths/CMakeLists.txt

@@ -0,0 +1,6 @@
+cmake_minimum_required(VERSION 3.0)
+project(${RunCMake_TEST} NONE)
+if(NOT TEST_FILE)
+  set(TEST_FILE ${RunCMake_TEST}.cmake)
+endif()
+include(${TEST_FILE})

+ 0 - 0
Tests/RunCMake/include_directories/DirInInstallPrefix-result.txt → Tests/RunCMake/IfacePaths/DirInInstallPrefix-result.txt


+ 14 - 0
Tests/RunCMake/IfacePaths/DirInInstallPrefix.cmake

@@ -0,0 +1,14 @@
+enable_language(CXX)
+add_library(testTarget empty.cpp)
+
+if (TEST_PROP STREQUAL INCLUDE_DIRECTORIES)
+  set_property(TARGET testTarget PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/dir")
+else()
+  set_property(TARGET testTarget PROPERTY INTERFACE_SOURCES "${CMAKE_INSTALL_PREFIX}/empty.cpp")
+endif()
+
+install(TARGETS testTarget EXPORT testTargets
+  DESTINATION lib
+)
+
+install(EXPORT testTargets DESTINATION lib/cmake)

+ 0 - 0
Tests/RunCMake/include_directories/InstallInBinDir-result.txt → Tests/RunCMake/IfacePaths/InstallInBinDir-result.txt


+ 1 - 1
Tests/RunCMake/include_directories/BinaryDirectoryInInterface-stderr.txt → Tests/RunCMake/IfacePaths/InstallInBinDir-stderr_INCLUDE_DIRECTORIES.txt

@@ -1,6 +1,6 @@
 CMake Error in CMakeLists.txt:
 CMake Error in CMakeLists.txt:
   Target "testTarget" INTERFACE_INCLUDE_DIRECTORIES property contains path:
   Target "testTarget" INTERFACE_INCLUDE_DIRECTORIES property contains path:
 
 
-    ".*RunCMake/include_directories/BinaryDirectoryInInterface-build/foo"
+    ".*Tests/RunCMake/IfacePaths_INCLUDE_DIRECTORIES/InstallInBinDir-build/foo"
 
 
   which is prefixed in the build directory.
   which is prefixed in the build directory.

+ 6 - 0
Tests/RunCMake/IfacePaths/InstallInBinDir-stderr_SOURCES.txt

@@ -0,0 +1,6 @@
+CMake Error in CMakeLists.txt:
+  Target "testTarget" INTERFACE_SOURCES property contains path:
+
+    ".*Tests/RunCMake/IfacePaths_SOURCES/InstallInBinDir-build/empty.cpp"
+
+  which is prefixed in the build directory.

+ 0 - 0
Tests/RunCMake/include_directories/InstallInSrcDir-result.txt → Tests/RunCMake/IfacePaths/InstallInSrcDir-result.txt


+ 1 - 1
Tests/RunCMake/include_directories/SrcInInstallPrefix-CMP0052-NEW-stderr.txt → Tests/RunCMake/IfacePaths/InstallInSrcDir-stderr_INCLUDE_DIRECTORIES.txt

@@ -1,6 +1,6 @@
 CMake Error in CMakeLists.txt:
 CMake Error in CMakeLists.txt:
   Target "testTarget" INTERFACE_INCLUDE_DIRECTORIES property contains path:
   Target "testTarget" INTERFACE_INCLUDE_DIRECTORIES property contains path:
 
 
-    ".*Tests/RunCMake/include_directories/prefix/src/foo"
+    ".*Tests/RunCMake/IfacePaths_INCLUDE_DIRECTORIES/copy/foo"
 
 
   which is prefixed in the source directory.
   which is prefixed in the source directory.

+ 6 - 0
Tests/RunCMake/IfacePaths/InstallInSrcDir-stderr_SOURCES.txt

@@ -0,0 +1,6 @@
+CMake Error in CMakeLists.txt:
+  Target "testTarget" INTERFACE_SOURCES property contains path:
+
+    ".*Tests/RunCMake/IfacePaths_SOURCES/copy/empty.cpp"
+
+  which is prefixed in the source directory.

+ 0 - 0
Tests/RunCMake/include_directories/InstallPrefixInInterface-result.txt → Tests/RunCMake/IfacePaths/InstallPrefixInInterface-result.txt


+ 0 - 0
Tests/RunCMake/include_directories/InstallPrefixInInterface.cmake → Tests/RunCMake/IfacePaths/InstallPrefixInInterface.cmake


+ 0 - 0
Tests/RunCMake/include_directories/InstallToPrefixInSrcDirInSource-result.txt → Tests/RunCMake/IfacePaths/InstallToPrefixInSrcDirInSource-result.txt


+ 0 - 0
Tests/RunCMake/include_directories/InstallToPrefixInSrcDirOutOfSource-result.txt → Tests/RunCMake/IfacePaths/InstallToPrefixInSrcDirOutOfSource-result.txt


+ 0 - 0
Tests/RunCMake/include_directories/RelativePathInGenex-result.txt → Tests/RunCMake/IfacePaths/RelativePathInGenex-result.txt


+ 0 - 0
Tests/RunCMake/include_directories/RelativePathInGenex-stderr.txt → Tests/RunCMake/IfacePaths/RelativePathInGenex-stderr_INCLUDE_DIRECTORIES.txt


+ 4 - 0
Tests/RunCMake/IfacePaths/RelativePathInGenex-stderr_SOURCES.txt

@@ -0,0 +1,4 @@
+CMake Error in CMakeLists.txt:
+  Target "testTarget" contains relative path in its INTERFACE_SOURCES:
+
+    "empty.cpp"

+ 13 - 0
Tests/RunCMake/IfacePaths/RelativePathInGenex.cmake

@@ -0,0 +1,13 @@
+
+enable_language(CXX)
+
+add_library(testTarget "${CMAKE_CURRENT_SOURCE_DIR}/empty.cpp")
+
+if (TEST_PROP STREQUAL INCLUDE_DIRECTORIES)
+  set_property(TARGET testTarget PROPERTY INTERFACE_INCLUDE_DIRECTORIES "$<1:foo>")
+else()
+  set_property(TARGET testTarget PROPERTY INTERFACE_SOURCES "$<1:empty.cpp>")
+endif()
+
+add_library(userTarget "${CMAKE_CURRENT_SOURCE_DIR}/empty.cpp")
+target_link_libraries(userTarget testTarget)

+ 0 - 0
Tests/RunCMake/include_directories/RelativePathInInterface-result.txt → Tests/RunCMake/IfacePaths/RelativePathInInterface-result.txt


+ 0 - 0
Tests/RunCMake/include_directories/RelativePathInInterface-stderr.txt → Tests/RunCMake/IfacePaths/RelativePathInInterface-stderr_INCLUDE_DIRECTORIES.txt


+ 4 - 0
Tests/RunCMake/IfacePaths/RelativePathInInterface-stderr_SOURCES.txt

@@ -0,0 +1,4 @@
+CMake Error in CMakeLists.txt:
+  Target "testTarget" INTERFACE_SOURCES property contains relative path:
+
+    "empty.cpp"

+ 14 - 0
Tests/RunCMake/IfacePaths/RelativePathInInterface.cmake

@@ -0,0 +1,14 @@
+
+enable_language(CXX)
+
+add_library(testTarget "${CMAKE_CURRENT_SOURCE_DIR}/empty.cpp")
+if (TEST_PROP STREQUAL INCLUDE_DIRECTORIES)
+  set_property(TARGET testTarget PROPERTY INTERFACE_INCLUDE_DIRECTORIES "foo")
+else()
+  set_property(TARGET testTarget PROPERTY INTERFACE_SOURCES "empty.cpp")
+endif()
+install(TARGETS testTarget EXPORT testTargets
+  DESTINATION lib
+)
+
+install(EXPORT testTargets DESTINATION lib/cmake)

+ 156 - 0
Tests/RunCMake/IfacePaths/RunCMakeTest.cmake

@@ -0,0 +1,156 @@
+include(RunCMake)
+
+macro(run_cmake test)
+  list(APPEND RunCMake_TEST_OPTIONS -DTEST_PROP=${TEST_PROP})
+  set(RunCMake-stderr-file ${test}-stderr_${TEST_PROP}.txt)
+  _run_cmake(${test})
+endmacro()
+
+run_cmake(RelativePathInInterface)
+run_cmake(RelativePathInGenex)
+run_cmake(export-NOWARN)
+run_cmake(SourceDirectoryInInterface)
+run_cmake(BinaryDirectoryInInterface)
+
+set(RunCMake_TEST_OPTIONS "-DCMAKE_INSTALL_PREFIX=${RunCMake_BINARY_DIR}/DirInInstallPrefix/prefix")
+run_cmake(DirInInstallPrefix)
+
+configure_file(
+  "${RunCMake_SOURCE_DIR}/CMakeLists.txt"
+  "${RunCMake_BINARY_DIR}/copy/CMakeLists.txt"
+  COPYONLY
+)
+configure_file(
+  "${RunCMake_SOURCE_DIR}/empty.cpp"
+  "${RunCMake_BINARY_DIR}/copy/empty.cpp"
+  COPYONLY
+)
+configure_file(
+  "${RunCMake_SOURCE_DIR}/SourceDirectoryInInterface.cmake"
+  "${RunCMake_BINARY_DIR}/copy/SourceDirectoryInInterface.cmake"
+  COPYONLY
+)
+set(RunCMake_TEST_OPTIONS
+  "-DCMAKE_INSTALL_PREFIX=${RunCMake_BINARY_DIR}/copy/SourceDirectoryInInterface/prefix"
+  "-DTEST_FILE=${RunCMake_BINARY_DIR}/copy/SourceDirectoryInInterface.cmake"
+  )
+set(RunCMake_TEST_SOURCE_DIR "${RunCMake_BINARY_DIR}/copy")
+run_cmake(InstallInSrcDir)
+unset(RunCMake_TEST_SOURCE_DIR)
+
+set(RunCMake_TEST_OPTIONS "-DCMAKE_INSTALL_PREFIX=${RunCMake_BINARY_DIR}/InstallInBinDir-build/prefix")
+set(RunCMake_TEST_OPTIONS
+  "-DCMAKE_INSTALL_PREFIX=${RunCMake_BINARY_DIR}/InstallInBinDir-build/prefix"
+  "-DTEST_FILE=${RunCMake_SOURCE_DIR}/BinaryDirectoryInInterface.cmake"
+  )
+set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/InstallInBinDir-build")
+run_cmake(InstallInBinDir)
+unset(RunCMake_TEST_BINARY_DIR)
+
+configure_file(
+  "${RunCMake_SOURCE_DIR}/CMakeLists.txt"
+  "${RunCMake_BINARY_DIR}/prefix/src/CMakeLists.txt"
+  COPYONLY
+)
+configure_file(
+  "${RunCMake_SOURCE_DIR}/empty.cpp"
+  "${RunCMake_BINARY_DIR}/prefix/src/empty.cpp"
+  COPYONLY
+)
+configure_file(
+  "${RunCMake_SOURCE_DIR}/SourceDirectoryInInterface.cmake"
+  "${RunCMake_BINARY_DIR}/prefix/src/SourceDirectoryInInterface.cmake"
+  COPYONLY
+)
+
+foreach(policyStatus NEW OLD "")
+  if (TEST_PROP STREQUAL INCLUDE_DIRECTORIES)
+    if (NOT "${policyStatus}" STREQUAL "")
+      set(policyOption -DCMAKE_POLICY_DEFAULT_CMP0052=${policyStatus})
+    else()
+      unset(policyOption)
+      set(policyStatus WARN)
+    endif()
+    set(policySuffix -CMP0052-${policyStatus})
+  endif()
+  set(RunCMake_TEST_OPTIONS
+    "-DCMAKE_INSTALL_PREFIX=${RunCMake_BINARY_DIR}/prefix" ${policyOption}
+    "-DTEST_FILE=${RunCMake_SOURCE_DIR}/BinaryDirectoryInInterface.cmake"
+    )
+  # Set the RunCMake_TEST_SOURCE_DIR here to the copy too. This is needed to run
+  # the test suite in-source properly.  Otherwise the install directory would be
+  # a subdirectory or the source directory, which is allowed and tested separately
+  # below.
+  set(RunCMake_TEST_SOURCE_DIR "${RunCMake_BINARY_DIR}/prefix/src")
+  set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/prefix/BinInInstallPrefix${policySuffix}-build")
+  run_cmake(BinInInstallPrefix${policySuffix})
+  unset(RunCMake_TEST_BINARY_DIR)
+
+  set(RunCMake_TEST_OPTIONS
+    "-DCMAKE_INSTALL_PREFIX=${RunCMake_BINARY_DIR}/prefix" ${policyOption}
+    "-DTEST_FILE=${RunCMake_BINARY_DIR}/prefix/src/SourceDirectoryInInterface.cmake"
+    )
+  run_cmake(SrcInInstallPrefix${policySuffix})
+  unset(RunCMake_TEST_SOURCE_DIR)
+
+  if (NOT TEST_PROP STREQUAL INCLUDE_DIRECTORIES)
+    break()
+  endif()
+endforeach()
+
+set(RunCMake_TEST_OPTIONS "-DCMAKE_INSTALL_PREFIX=${RunCMake_BINARY_DIR}/InstallPrefixInInterface-build/prefix")
+run_cmake(InstallPrefixInInterface)
+
+configure_file(
+  "${RunCMake_SOURCE_DIR}/CMakeLists.txt"
+  "${RunCMake_BINARY_DIR}/installToSrc/CMakeLists.txt"
+  COPYONLY
+)
+configure_file(
+  "${RunCMake_SOURCE_DIR}/empty.cpp"
+  "${RunCMake_BINARY_DIR}/installToSrc/empty.cpp"
+  COPYONLY
+)
+configure_file(
+  "${RunCMake_SOURCE_DIR}/InstallPrefixInInterface.cmake"
+  "${RunCMake_BINARY_DIR}/installToSrc/InstallPrefixInInterface.cmake"
+  COPYONLY
+)
+set(RunCMake_TEST_OPTIONS
+  "-DCMAKE_INSTALL_PREFIX=${RunCMake_BINARY_DIR}/installToSrc/InstallPrefixInInterface/prefix"
+  "-DTEST_FILE=${RunCMake_BINARY_DIR}/installToSrc/InstallPrefixInInterface.cmake"
+  )
+set(RunCMake_TEST_SOURCE_DIR "${RunCMake_BINARY_DIR}/installToSrc")
+run_cmake(InstallToPrefixInSrcDirOutOfSource)
+unset(RunCMake_TEST_SOURCE_DIR)
+
+
+file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}/installToSrcInSrc")
+set(RunCMake_TEST_NO_CLEAN ON)
+
+configure_file(
+  "${RunCMake_SOURCE_DIR}/CMakeLists.txt"
+  "${RunCMake_BINARY_DIR}/installToSrcInSrc/CMakeLists.txt"
+  COPYONLY
+)
+configure_file(
+  "${RunCMake_SOURCE_DIR}/empty.cpp"
+  "${RunCMake_BINARY_DIR}/installToSrcInSrc/empty.cpp"
+  COPYONLY
+)
+configure_file(
+  "${RunCMake_SOURCE_DIR}/InstallPrefixInInterface.cmake"
+  "${RunCMake_BINARY_DIR}/installToSrcInSrc/InstallPrefixInInterface.cmake"
+  COPYONLY
+)
+
+set(RunCMake_TEST_OPTIONS
+  "-DCMAKE_INSTALL_PREFIX=${RunCMake_BINARY_DIR}/installToSrcInSrc/InstallPrefixInInterface/prefix"
+  "-DTEST_FILE=${RunCMake_BINARY_DIR}/installToSrcInSrc/InstallPrefixInInterface.cmake"
+  )
+set(RunCMake_TEST_SOURCE_DIR "${RunCMake_BINARY_DIR}/installToSrcInSrc")
+set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/installToSrcInSrc")
+run_cmake(InstallToPrefixInSrcDirInSource)
+unset(RunCMake_TEST_SOURCE_DIR)
+unset(RunCMake_TEST_BINARY_DIR)
+unset(RunCMake_TEST_NO_CLEAN)

+ 0 - 0
Tests/RunCMake/include_directories/SourceDirectoryInInterface-result.txt → Tests/RunCMake/IfacePaths/SourceDirectoryInInterface-result.txt


+ 1 - 1
Tests/RunCMake/include_directories/SourceDirectoryInInterface-stderr.txt → Tests/RunCMake/IfacePaths/SourceDirectoryInInterface-stderr_INCLUDE_DIRECTORIES.txt

@@ -1,6 +1,6 @@
 CMake Error in CMakeLists.txt:
 CMake Error in CMakeLists.txt:
   Target "testTarget" INTERFACE_INCLUDE_DIRECTORIES property contains path:
   Target "testTarget" INTERFACE_INCLUDE_DIRECTORIES property contains path:
 
 
-    ".*RunCMake/include_directories/foo"
+    ".*RunCMake/IfacePaths/foo"
 
 
   which is prefixed in the source directory.
   which is prefixed in the source directory.

+ 6 - 0
Tests/RunCMake/IfacePaths/SourceDirectoryInInterface-stderr_SOURCES.txt

@@ -0,0 +1,6 @@
+CMake Error in CMakeLists.txt:
+  Target "testTarget" INTERFACE_SOURCES property contains path:
+
+    ".*Tests/RunCMake/IfacePaths/empty.cpp"
+
+  which is prefixed in the source directory.

+ 15 - 0
Tests/RunCMake/IfacePaths/SourceDirectoryInInterface.cmake

@@ -0,0 +1,15 @@
+
+enable_language(CXX)
+
+add_library(testTarget "${CMAKE_CURRENT_SOURCE_DIR}/empty.cpp")
+if (TEST_PROP STREQUAL INCLUDE_DIRECTORIES)
+  set_property(TARGET testTarget PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/foo")
+else()
+  set_property(TARGET testTarget PROPERTY INTERFACE_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/empty.cpp")
+endif()
+
+install(TARGETS testTarget EXPORT testTargets
+  DESTINATION lib
+)
+
+install(EXPORT testTargets DESTINATION lib/cmake)

+ 0 - 0
Tests/RunCMake/include_directories/SrcInInstallPrefix-CMP0052-NEW-result.txt → Tests/RunCMake/IfacePaths/SrcInInstallPrefix-CMP0052-NEW-result.txt


+ 1 - 1
Tests/RunCMake/include_directories/InstallInSrcDir-stderr.txt → Tests/RunCMake/IfacePaths/SrcInInstallPrefix-CMP0052-NEW-stderr_INCLUDE_DIRECTORIES.txt

@@ -1,6 +1,6 @@
 CMake Error in CMakeLists.txt:
 CMake Error in CMakeLists.txt:
   Target "testTarget" INTERFACE_INCLUDE_DIRECTORIES property contains path:
   Target "testTarget" INTERFACE_INCLUDE_DIRECTORIES property contains path:
 
 
-    ".*Tests/RunCMake/include_directories/copy/foo"
+    ".*Tests/RunCMake/IfacePaths_INCLUDE_DIRECTORIES/prefix/src/foo"
 
 
   which is prefixed in the source directory.
   which is prefixed in the source directory.

+ 0 - 0
Tests/RunCMake/include_directories/SrcInInstallPrefix-CMP0052-OLD-result.txt → Tests/RunCMake/IfacePaths/SrcInInstallPrefix-CMP0052-OLD-result.txt


+ 0 - 0
Tests/RunCMake/include_directories/SrcInInstallPrefix-CMP0052-WARN-result.txt → Tests/RunCMake/IfacePaths/SrcInInstallPrefix-CMP0052-WARN-result.txt


+ 3 - 3
Tests/RunCMake/include_directories/SrcInInstallPrefix-CMP0052-WARN-stderr.txt → Tests/RunCMake/IfacePaths/SrcInInstallPrefix-CMP0052-WARN-stderr_INCLUDE_DIRECTORIES.txt

@@ -6,15 +6,15 @@ CMake Warning \(dev\) in CMakeLists.txt:
 
 
   Directory:
   Directory:
 
 
-      ".*Tests/RunCMake/include_directories/prefix/src/foo"
+      ".*Tests/RunCMake/IfacePaths_INCLUDE_DIRECTORIES/prefix/src/foo"
 
 
   in INTERFACE_INCLUDE_DIRECTORIES of target "testTarget" is a subdirectory
   in INTERFACE_INCLUDE_DIRECTORIES of target "testTarget" is a subdirectory
   of the install directory:
   of the install directory:
 
 
-      ".*Tests/RunCMake/include_directories/prefix"
+      ".*Tests/RunCMake/IfacePaths_INCLUDE_DIRECTORIES/prefix"
 
 
   however it is also a subdirectory of the source tree:
   however it is also a subdirectory of the source tree:
 
 
-      ".*Tests/RunCMake/include_directories/prefix/src"
+      ".*Tests/RunCMake/IfacePaths_INCLUDE_DIRECTORIES/prefix/src"
 
 
 This warning is for project developers.  Use -Wno-dev to suppress it.
 This warning is for project developers.  Use -Wno-dev to suppress it.

+ 1 - 0
Tests/RunCMake/IfacePaths/SrcInInstallPrefix-result.txt

@@ -0,0 +1 @@
+1

+ 6 - 0
Tests/RunCMake/IfacePaths/SrcInInstallPrefix-stderr_SOURCES.txt

@@ -0,0 +1,6 @@
+CMake Error in CMakeLists.txt:
+  Target "testTarget" INTERFACE_SOURCES property contains path:
+
+    ".*Tests/RunCMake/IfacePaths_SOURCES/prefix/src/empty.cpp"
+
+  which is prefixed in the source directory.

+ 0 - 0
Tests/RunCMake/IfacePaths/empty.cpp


+ 0 - 0
Tests/RunCMake/include_directories/export-NOWARN-result.txt → Tests/RunCMake/IfacePaths/export-NOWARN-result.txt


+ 15 - 0
Tests/RunCMake/include_directories/export-NOWARN.cmake → Tests/RunCMake/IfacePaths/export-NOWARN.cmake

@@ -1,19 +1,34 @@
 enable_language(CXX)
 enable_language(CXX)
 add_library(foo empty.cpp)
 add_library(foo empty.cpp)
+
 set_property(TARGET foo APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES $<0:>/include/subdir)
 set_property(TARGET foo APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES $<0:>/include/subdir)
 set_property(TARGET foo APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES $<INSTALL_PREFIX>/include/subdir)
 set_property(TARGET foo APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES $<INSTALL_PREFIX>/include/subdir)
+set_property(TARGET foo APPEND PROPERTY INTERFACE_SOURCES $<0:>/include/subdir/empty.cpp)
+set_property(TARGET foo APPEND PROPERTY INTERFACE_SOURCES $<INSTALL_PREFIX>/include/subdir/empty.cpp)
 
 
 set_property(TARGET foo APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES $<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include/subdir>)
 set_property(TARGET foo APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES $<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include/subdir>)
 set_property(TARGET foo APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES $<INSTALL_INTERFACE:include/subdir>)
 set_property(TARGET foo APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES $<INSTALL_INTERFACE:include/subdir>)
 set_property(TARGET foo APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES $<INSTALL_INTERFACE:include/$<0:>>)
 set_property(TARGET foo APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES $<INSTALL_INTERFACE:include/$<0:>>)
 set_property(TARGET foo APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES $<INSTALL_INTERFACE:$<0:>/include>)
 set_property(TARGET foo APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES $<INSTALL_INTERFACE:$<0:>/include>)
+set_property(TARGET foo APPEND PROPERTY INTERFACE_SOURCES $<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include/subdir/empty.cpp>)
+set_property(TARGET foo APPEND PROPERTY INTERFACE_SOURCES $<INSTALL_INTERFACE:include/subdir/empty.cpp>)
+set_property(TARGET foo APPEND PROPERTY INTERFACE_SOURCES $<INSTALL_INTERFACE:include/subdir/empty.cpp$<0:>>)
+set_property(TARGET foo APPEND PROPERTY INTERFACE_SOURCES $<INSTALL_INTERFACE:$<0:>/include/subdir/empty.cpp>)
 
 
 # target_include_directories(foo INTERFACE include/subdir) # Does and should warn. INSTALL_INTERFACE must not list src dir paths.
 # target_include_directories(foo INTERFACE include/subdir) # Does and should warn. INSTALL_INTERFACE must not list src dir paths.
 target_include_directories(foo INTERFACE $<0:>/include/subdir) # Does not and should not should warn, because it starts with a genex.
 target_include_directories(foo INTERFACE $<0:>/include/subdir) # Does not and should not should warn, because it starts with a genex.
 target_include_directories(foo INTERFACE $<INSTALL_PREFIX>/include/subdir)
 target_include_directories(foo INTERFACE $<INSTALL_PREFIX>/include/subdir)
+target_sources(foo INTERFACE $<0:>/include/subdir/empty.cpp)
+target_sources(foo INTERFACE $<INSTALL_PREFIX>/include/subdir/empty.cpp)
 
 
 target_include_directories(foo INTERFACE $<INSTALL_INTERFACE:include/subdir>)
 target_include_directories(foo INTERFACE $<INSTALL_INTERFACE:include/subdir>)
 target_include_directories(foo INTERFACE $<INSTALL_INTERFACE:include/$<0:>>)
 target_include_directories(foo INTERFACE $<INSTALL_INTERFACE:include/$<0:>>)
+target_sources(foo INTERFACE $<INSTALL_INTERFACE:include/subdir/empty.cpp>)
+target_sources(foo INTERFACE $<INSTALL_INTERFACE:include/subdir/empty.cpp$<0:>>)
+
+install(FILES include/subdir/empty.cpp
+  DESTINATION include/subdir
+)
 
 
 install(TARGETS foo EXPORT FooTargets DESTINATION lib)
 install(TARGETS foo EXPORT FooTargets DESTINATION lib)
 install(EXPORT FooTargets DESTINATION lib/cmake)
 install(EXPORT FooTargets DESTINATION lib/cmake)

+ 1 - 1
Tests/RunCMake/TargetSources/ExportBuild-result.txt

@@ -1 +1 @@
-1
+0

+ 0 - 1
Tests/RunCMake/TargetSources/ExportBuild-stderr.txt

@@ -1 +0,0 @@
-CMake Error: Target "iface" has a populated INTERFACE_SOURCES property.  This is not currently supported.

+ 0 - 1
Tests/RunCMake/TargetSources/ExportInstall-stderr.txt

@@ -1 +0,0 @@
-CMake Error: Target "iface" has a populated INTERFACE_SOURCES property.  This is not currently supported.

+ 0 - 6
Tests/RunCMake/TargetSources/ExportInstall.cmake

@@ -1,6 +0,0 @@
-
-add_library(iface INTERFACE)
-target_sources(iface INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/empty_1.cpp")
-
-install(TARGETS iface EXPORT exp)
-install(EXPORT exp DESTINATION cmake)

+ 0 - 1
Tests/RunCMake/TargetSources/RunCMakeTest.cmake

@@ -10,4 +10,3 @@ endif()
 run_cmake(CMP0026-LOCATION)
 run_cmake(CMP0026-LOCATION)
 run_cmake(RelativePathInInterface)
 run_cmake(RelativePathInInterface)
 run_cmake(ExportBuild)
 run_cmake(ExportBuild)
-run_cmake(ExportInstall)

+ 0 - 11
Tests/RunCMake/include_directories/BinaryDirectoryInInterface.cmake

@@ -1,11 +0,0 @@
-
-enable_language(CXX)
-
-add_library(testTarget "${CMAKE_CURRENT_SOURCE_DIR}/empty.cpp")
-target_include_directories(testTarget INTERFACE "${CMAKE_CURRENT_BINARY_DIR}/foo")
-
-install(TARGETS testTarget EXPORT testTargets
-  DESTINATION lib
-)
-
-install(EXPORT testTargets DESTINATION lib/cmake)

+ 1 - 4
Tests/RunCMake/include_directories/CMakeLists.txt

@@ -1,6 +1,3 @@
 cmake_minimum_required(VERSION 3.0)
 cmake_minimum_required(VERSION 3.0)
 project(${RunCMake_TEST} NONE)
 project(${RunCMake_TEST} NONE)
-if(NOT TEST_FILE)
-  set(TEST_FILE ${RunCMake_TEST}.cmake)
-endif()
-include(${TEST_FILE})
+include(${RunCMake_TEST}.cmake)

+ 0 - 9
Tests/RunCMake/include_directories/DirInInstallPrefix.cmake

@@ -1,9 +0,0 @@
-enable_language(CXX)
-add_library(testTarget empty.cpp)
-target_include_directories(testTarget INTERFACE "${CMAKE_INSTALL_PREFIX}/dir")
-
-install(TARGETS testTarget EXPORT testTargets
-  DESTINATION lib
-)
-
-install(EXPORT testTargets DESTINATION lib/cmake)

+ 0 - 8
Tests/RunCMake/include_directories/RelativePathInGenex.cmake

@@ -1,8 +0,0 @@
-
-enable_language(CXX)
-
-add_library(testTarget "${CMAKE_CURRENT_SOURCE_DIR}/empty.cpp")
-set_property(TARGET testTarget PROPERTY INTERFACE_INCLUDE_DIRECTORIES "$<1:foo>")
-
-add_library(userTarget "${CMAKE_CURRENT_SOURCE_DIR}/empty.cpp")
-target_link_libraries(userTarget testTarget)

+ 0 - 11
Tests/RunCMake/include_directories/RelativePathInInterface.cmake

@@ -1,11 +0,0 @@
-
-enable_language(CXX)
-
-add_library(testTarget "${CMAKE_CURRENT_SOURCE_DIR}/empty.cpp")
-set_property(TARGET testTarget PROPERTY INTERFACE_INCLUDE_DIRECTORIES "foo")
-
-install(TARGETS testTarget EXPORT testTargets
-  DESTINATION lib
-)
-
-install(EXPORT testTargets DESTINATION lib/cmake)

+ 0 - 141
Tests/RunCMake/include_directories/RunCMakeTest.cmake

@@ -3,148 +3,7 @@ include(RunCMake)
 run_cmake(NotFoundContent)
 run_cmake(NotFoundContent)
 run_cmake(DebugIncludes)
 run_cmake(DebugIncludes)
 run_cmake(TID-bad-target)
 run_cmake(TID-bad-target)
-run_cmake(SourceDirectoryInInterface)
-run_cmake(BinaryDirectoryInInterface)
-run_cmake(RelativePathInInterface)
 run_cmake(ImportedTarget)
 run_cmake(ImportedTarget)
-run_cmake(RelativePathInGenex)
 run_cmake(CMP0021)
 run_cmake(CMP0021)
 run_cmake(install_config)
 run_cmake(install_config)
 run_cmake(incomplete-genex)
 run_cmake(incomplete-genex)
-run_cmake(export-NOWARN)
-
-set(RunCMake_TEST_OPTIONS "-DCMAKE_INSTALL_PREFIX=${RunCMake_BINARY_DIR}/DirInInstallPrefix/prefix")
-run_cmake(DirInInstallPrefix)
-
-configure_file(
-  "${RunCMake_SOURCE_DIR}/CMakeLists.txt"
-  "${RunCMake_BINARY_DIR}/copy/CMakeLists.txt"
-  COPYONLY
-)
-configure_file(
-  "${RunCMake_SOURCE_DIR}/empty.cpp"
-  "${RunCMake_BINARY_DIR}/copy/empty.cpp"
-  COPYONLY
-)
-configure_file(
-  "${RunCMake_SOURCE_DIR}/SourceDirectoryInInterface.cmake"
-  "${RunCMake_BINARY_DIR}/copy/SourceDirectoryInInterface.cmake"
-  COPYONLY
-)
-set(RunCMake_TEST_OPTIONS
-  "-DCMAKE_INSTALL_PREFIX=${RunCMake_BINARY_DIR}/copy/SourceDirectoryInInterface/prefix"
-  "-DTEST_FILE=${RunCMake_BINARY_DIR}/copy/SourceDirectoryInInterface.cmake"
-  )
-set(RunCMake_TEST_SOURCE_DIR "${RunCMake_BINARY_DIR}/copy")
-run_cmake(InstallInSrcDir)
-unset(RunCMake_TEST_SOURCE_DIR)
-
-set(RunCMake_TEST_OPTIONS "-DCMAKE_INSTALL_PREFIX=${RunCMake_BINARY_DIR}/InstallInBinDir-build/prefix")
-set(RunCMake_TEST_OPTIONS
-  "-DCMAKE_INSTALL_PREFIX=${RunCMake_BINARY_DIR}/InstallInBinDir-build/prefix"
-  "-DTEST_FILE=${RunCMake_SOURCE_DIR}/BinaryDirectoryInInterface.cmake"
-  )
-set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/InstallInBinDir-build")
-run_cmake(InstallInBinDir)
-unset(RunCMake_TEST_BINARY_DIR)
-
-configure_file(
-  "${RunCMake_SOURCE_DIR}/CMakeLists.txt"
-  "${RunCMake_BINARY_DIR}/prefix/src/CMakeLists.txt"
-  COPYONLY
-)
-configure_file(
-  "${RunCMake_SOURCE_DIR}/empty.cpp"
-  "${RunCMake_BINARY_DIR}/prefix/src/empty.cpp"
-  COPYONLY
-)
-configure_file(
-  "${RunCMake_SOURCE_DIR}/SourceDirectoryInInterface.cmake"
-  "${RunCMake_BINARY_DIR}/prefix/src/SourceDirectoryInInterface.cmake"
-  COPYONLY
-)
-
-foreach(policyStatus "" NEW OLD)
-  if (NOT "${policyStatus}" STREQUAL "")
-    set(policyOption -DCMAKE_POLICY_DEFAULT_CMP0052=${policyStatus})
-  else()
-    unset(policyOption)
-    set(policyStatus WARN)
-  endif()
-  set(RunCMake_TEST_OPTIONS
-    "-DCMAKE_INSTALL_PREFIX=${RunCMake_BINARY_DIR}/prefix" ${policyOption}
-    "-DTEST_FILE=${RunCMake_SOURCE_DIR}/BinaryDirectoryInInterface.cmake"
-    )
-  # Set the RunCMake_TEST_SOURCE_DIR here to the copy too. This is needed to run
-  # the test suite in-source properly.  Otherwise the install directory would be
-  # a subdirectory or the source directory, which is allowed and tested separately
-  # below.
-  set(RunCMake_TEST_SOURCE_DIR "${RunCMake_BINARY_DIR}/prefix/src")
-  set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/prefix/BinInInstallPrefix-CMP0052-${policyStatus}-build")
-  run_cmake(BinInInstallPrefix-CMP0052-${policyStatus})
-  unset(RunCMake_TEST_BINARY_DIR)
-
-  set(RunCMake_TEST_OPTIONS
-    "-DCMAKE_INSTALL_PREFIX=${RunCMake_BINARY_DIR}/prefix" ${policyOption}
-    "-DTEST_FILE=${RunCMake_BINARY_DIR}/prefix/src/SourceDirectoryInInterface.cmake"
-    )
-  run_cmake(SrcInInstallPrefix-CMP0052-${policyStatus})
-  unset(RunCMake_TEST_SOURCE_DIR)
-endforeach()
-
-set(RunCMake_TEST_OPTIONS "-DCMAKE_INSTALL_PREFIX=${RunCMake_BINARY_DIR}/InstallPrefixInInterface-build/prefix")
-run_cmake(InstallPrefixInInterface)
-
-configure_file(
-  "${RunCMake_SOURCE_DIR}/CMakeLists.txt"
-  "${RunCMake_BINARY_DIR}/installToSrc/CMakeLists.txt"
-  COPYONLY
-)
-configure_file(
-  "${RunCMake_SOURCE_DIR}/empty.cpp"
-  "${RunCMake_BINARY_DIR}/installToSrc/empty.cpp"
-  COPYONLY
-)
-configure_file(
-  "${RunCMake_SOURCE_DIR}/InstallPrefixInInterface.cmake"
-  "${RunCMake_BINARY_DIR}/installToSrc/InstallPrefixInInterface.cmake"
-  COPYONLY
-)
-set(RunCMake_TEST_OPTIONS
-  "-DCMAKE_INSTALL_PREFIX=${RunCMake_BINARY_DIR}/installToSrc/InstallPrefixInInterface/prefix"
-  "-DTEST_FILE=${RunCMake_BINARY_DIR}/installToSrc/InstallPrefixInInterface.cmake"
-  )
-set(RunCMake_TEST_SOURCE_DIR "${RunCMake_BINARY_DIR}/installToSrc")
-run_cmake(InstallToPrefixInSrcDirOutOfSource)
-unset(RunCMake_TEST_SOURCE_DIR)
-
-
-file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}/installToSrcInSrc")
-set(RunCMake_TEST_NO_CLEAN ON)
-
-configure_file(
-  "${RunCMake_SOURCE_DIR}/CMakeLists.txt"
-  "${RunCMake_BINARY_DIR}/installToSrcInSrc/CMakeLists.txt"
-  COPYONLY
-)
-configure_file(
-  "${RunCMake_SOURCE_DIR}/empty.cpp"
-  "${RunCMake_BINARY_DIR}/installToSrcInSrc/empty.cpp"
-  COPYONLY
-)
-configure_file(
-  "${RunCMake_SOURCE_DIR}/InstallPrefixInInterface.cmake"
-  "${RunCMake_BINARY_DIR}/installToSrcInSrc/InstallPrefixInInterface.cmake"
-  COPYONLY
-)
-
-set(RunCMake_TEST_OPTIONS
-  "-DCMAKE_INSTALL_PREFIX=${RunCMake_BINARY_DIR}/installToSrcInSrc/InstallPrefixInInterface/prefix"
-  "-DTEST_FILE=${RunCMake_BINARY_DIR}/installToSrcInSrc/InstallPrefixInInterface.cmake"
-  )
-set(RunCMake_TEST_SOURCE_DIR "${RunCMake_BINARY_DIR}/installToSrcInSrc")
-set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/installToSrcInSrc")
-run_cmake(InstallToPrefixInSrcDirInSource)
-unset(RunCMake_TEST_SOURCE_DIR)
-unset(RunCMake_TEST_BINARY_DIR)
-unset(RunCMake_TEST_NO_CLEAN)

+ 0 - 11
Tests/RunCMake/include_directories/SourceDirectoryInInterface.cmake

@@ -1,11 +0,0 @@
-
-enable_language(CXX)
-
-add_library(testTarget "${CMAKE_CURRENT_SOURCE_DIR}/empty.cpp")
-target_include_directories(testTarget INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/foo")
-
-install(TARGETS testTarget EXPORT testTargets
-  DESTINATION lib
-)
-
-install(EXPORT testTargets DESTINATION lib/cmake)