]> git.pld-linux.org Git - packages/cmake.git/commitdiff
- rel 2; relative and absolute paths coexist better auto/th/cmake-3.1.0-2
authorArkadiusz Miśkiewicz <arekm@maven.pl>
Thu, 18 Dec 2014 21:30:27 +0000 (22:30 +0100)
committerArkadiusz Miśkiewicz <arekm@maven.pl>
Thu, 18 Dec 2014 21:30:27 +0000 (22:30 +0100)
cmake-bug-0015258.patch [new file with mode: 0644]
cmake.spec

diff --git a/cmake-bug-0015258.patch b/cmake-bug-0015258.patch
new file mode 100644 (file)
index 0000000..1558cd0
--- /dev/null
@@ -0,0 +1,267 @@
+From dd089e08b578f20b7dc7d2ce658e3df05e346e35 Mon Sep 17 00:00:00 2001
+From: Brad King <brad.king@kitware.com>
+Date: Mon, 15 Dec 2014 09:52:48 -0500
+Subject: [PATCH] install: Allow absolute EXPORT destination with relative
+ targets (#15258)
+
+When install(EXPORT) is given an absolute destination we cannot compute
+the install prefix relative to the installed export file location.
+Previously we disallowed installation of targets in such exports with a
+relative destination, but did not enforce this for target property
+values besides the location of the main target file.  This could lead to
+broken installations when the EXPORT is installed to an absolute path
+but usage requirements are specified relative to the install prefix.
+
+Since an EXPORT installed to an absolute destination cannot be relocated
+we can just hard-code the value of CMAKE_INSTALL_PREFIX as the base for
+relative paths.  This will allow absolute install(EXPORT) destinations
+to work with relative destinations for targets and usage requirements.
+
+Extend the ExportImport test with a case covering this behavior.
+---
+ .../release/dev/install-EXPORT-absolute-prefix.rst |    9 ++++
+ Source/cmExportInstallFileGenerator.cxx            |   57 +++++++-------------
+ Source/cmExportInstallFileGenerator.h              |    4 --
+ Tests/ExportImport/Export/CMakeLists.txt           |   15 ++++++
+ .../Export/include/abs/1a/testLibAbs1a.h           |    1 +
+ .../Export/include/abs/1b/testLibAbs1b.h           |    1 +
+ .../ExportImport/Export/include/abs/testLibAbs1.h  |    1 +
+ Tests/ExportImport/Export/testLibAbs1.c            |    1 +
+ Tests/ExportImport/Import/A/CMakeLists.txt         |   10 ++++
+ Tests/ExportImport/Import/A/imp_testExeAbs1.c      |   15 ++++++
+ 10 files changed, 73 insertions(+), 41 deletions(-)
+ create mode 100644 Help/release/dev/install-EXPORT-absolute-prefix.rst
+ create mode 100644 Tests/ExportImport/Export/include/abs/1a/testLibAbs1a.h
+ create mode 100644 Tests/ExportImport/Export/include/abs/1b/testLibAbs1b.h
+ create mode 100644 Tests/ExportImport/Export/include/abs/testLibAbs1.h
+ create mode 100644 Tests/ExportImport/Export/testLibAbs1.c
+ create mode 100644 Tests/ExportImport/Import/A/imp_testExeAbs1.c
+
+diff --git a/Help/release/dev/install-EXPORT-absolute-prefix.rst b/Help/release/dev/install-EXPORT-absolute-prefix.rst
+new file mode 100644
+index 0000000..1b2a01c
+--- /dev/null
++++ b/Help/release/dev/install-EXPORT-absolute-prefix.rst
+@@ -0,0 +1,9 @@
++install-EXPORT-absolute-prefix
++------------------------------
++
++* The :command:`install(EXPORT)` command now works with an absolute
++  ``DESTINATION`` even if targets in the export set are installed
++  with a destination or usage requirements specified relative to the
++  install prefix.  The value of the :variable:`CMAKE_INSTALL_PREFIX`
++  variable is hard-coded into the installed export file as the base
++  for relative references.
+diff --git a/Source/cmExportInstallFileGenerator.cxx b/Source/cmExportInstallFileGenerator.cxx
+index 23180f1..3f5866a 100644
+--- a/Source/cmExportInstallFileGenerator.cxx
++++ b/Source/cmExportInstallFileGenerator.cxx
+@@ -69,13 +69,24 @@ bool cmExportInstallFileGenerator::GenerateMainFile(std::ostream& os)
+   this->GenerateExpectedTargetsCode(os, expectedTargets);
+   }
+-  // Add code to compute the installation prefix relative to the
+-  // import file location.
++  // Set an _IMPORT_PREFIX variable for import location properties
++  // to reference if they are relative to the install prefix.
++  std::string installPrefix =
++    this->IEGen->GetMakefile()->GetSafeDefinition("CMAKE_INSTALL_PREFIX");
+   const char* installDest = this->IEGen->GetDestination();
+-  if(!cmSystemTools::FileIsFullPath(installDest))
++  if(cmSystemTools::FileIsFullPath(installDest))
+     {
+-    std::string installPrefix =
+-      this->IEGen->GetMakefile()->GetSafeDefinition("CMAKE_INSTALL_PREFIX");
++    // The export file is being installed to an absolute path so the
++    // package is not relocatable.  Use the configured install prefix.
++    os <<
++      "# The installation prefix configured by this project.\n"
++      "set(_IMPORT_PREFIX \"" << installPrefix << "\")\n"
++      "\n";
++    }
++  else
++    {
++    // Add code to compute the installation prefix relative to the
++    // import file location.
+     std::string absDest = installPrefix + "/" + installDest;
+     std::string absDestS = absDest + "/";
+     os << "# Compute the installation prefix relative to this file.\n"
+@@ -106,9 +117,6 @@ bool cmExportInstallFileGenerator::GenerateMainFile(std::ostream& os)
+       dest = cmSystemTools::GetFilenamePath(dest);
+       }
+     os << "\n";
+-
+-    // Import location properties may reference this variable.
+-    this->ImportPrefix = "${_IMPORT_PREFIX}/";
+     }
+   std::vector<std::string> missingTargets;
+@@ -209,12 +217,9 @@ bool cmExportInstallFileGenerator::GenerateMainFile(std::ostream& os)
+      << "\n";
+   // Cleanup the import prefix variable.
+-  if(!this->ImportPrefix.empty())
+-    {
+-    os << "# Cleanup temporary variables.\n"
+-       << "set(_IMPORT_PREFIX)\n"
+-       << "\n";
+-    }
++  os << "# Cleanup temporary variables.\n"
++     << "set(_IMPORT_PREFIX)\n"
++     << "\n";
+   this->GenerateImportedFileCheckLoop(os);
+   bool result = true;
+@@ -394,11 +399,7 @@ cmExportInstallFileGenerator
+   if(!cmSystemTools::FileIsFullPath(dest.c_str()))
+     {
+     // The target is installed relative to the installation prefix.
+-    if(this->ImportPrefix.empty())
+-      {
+-      this->ComplainAboutImportPrefix(itgen);
+-      }
+-    value = this->ImportPrefix;
++    value = "${_IMPORT_PREFIX}/";
+     }
+   value += dest;
+   value += "/";
+@@ -508,24 +509,6 @@ cmExportInstallFileGenerator
+   return namespaces;
+ }
+-
+-//----------------------------------------------------------------------------
+-void
+-cmExportInstallFileGenerator
+-::ComplainAboutImportPrefix(cmInstallTargetGenerator* itgen)
+-{
+-  const char* installDest = this->IEGen->GetDestination();
+-  cmOStringStream e;
+-  e << "install(EXPORT \""
+-    << this->IEGen->GetExportSet()->GetName()
+-    << "\") given absolute "
+-    << "DESTINATION \"" << installDest << "\" but the export "
+-    << "references an installation of target \""
+-    << itgen->GetTarget()->GetName() << "\" which has relative "
+-    << "DESTINATION \"" << itgen->GetDestination() << "\".";
+-  cmSystemTools::Error(e.str().c_str());
+-}
+-
+ //----------------------------------------------------------------------------
+ void
+ cmExportInstallFileGenerator
+diff --git a/Source/cmExportInstallFileGenerator.h b/Source/cmExportInstallFileGenerator.h
+index b851ad5..6f86ac9 100644
+--- a/Source/cmExportInstallFileGenerator.h
++++ b/Source/cmExportInstallFileGenerator.h
+@@ -83,14 +83,10 @@ protected:
+                                  std::set<std::string>& importedLocations
+                                 );
+-  void ComplainAboutImportPrefix(cmInstallTargetGenerator* itgen);
+-
+   std::string InstallNameDir(cmTarget* target, const std::string& config);
+   cmInstallExportGenerator* IEGen;
+-  std::string ImportPrefix;
+-
+   // The import file generated for each configuration.
+   std::map<std::string, std::string> ConfigImportFiles;
+ };
+diff --git a/Tests/ExportImport/Export/CMakeLists.txt b/Tests/ExportImport/Export/CMakeLists.txt
+index febdfe6..e130eca 100644
+--- a/Tests/ExportImport/Export/CMakeLists.txt
++++ b/Tests/ExportImport/Export/CMakeLists.txt
+@@ -508,3 +508,18 @@ export(TARGETS testExe2 testLib4 testLib5 testLib6 testExe3 testExe2lib
+   )
+ add_subdirectory(Interface)
++
++#-----------------------------------------------------------------------------
++# Install export with absolute destination but relative pieces.
++add_library(testLibAbs1 STATIC testLibAbs1.c)
++target_include_directories(testLibAbs1 INTERFACE
++  "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include/abs/1a;include/abs/1b>"
++  )
++install(
++  TARGETS testLibAbs1
++  EXPORT expAbs
++  ARCHIVE DESTINATION lib
++  INCLUDES DESTINATION include/abs
++  )
++install(DIRECTORY include/abs DESTINATION include)
++install(EXPORT expAbs NAMESPACE expAbs_ DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/expAbs)
+diff --git a/Tests/ExportImport/Export/include/abs/1a/testLibAbs1a.h b/Tests/ExportImport/Export/include/abs/1a/testLibAbs1a.h
+new file mode 100644
+index 0000000..4421227
+--- /dev/null
++++ b/Tests/ExportImport/Export/include/abs/1a/testLibAbs1a.h
+@@ -0,0 +1 @@
++#define testLibAbs1a
+diff --git a/Tests/ExportImport/Export/include/abs/1b/testLibAbs1b.h b/Tests/ExportImport/Export/include/abs/1b/testLibAbs1b.h
+new file mode 100644
+index 0000000..00a2a29
+--- /dev/null
++++ b/Tests/ExportImport/Export/include/abs/1b/testLibAbs1b.h
+@@ -0,0 +1 @@
++#define testLibAbs1b
+diff --git a/Tests/ExportImport/Export/include/abs/testLibAbs1.h b/Tests/ExportImport/Export/include/abs/testLibAbs1.h
+new file mode 100644
+index 0000000..19d80a5
+--- /dev/null
++++ b/Tests/ExportImport/Export/include/abs/testLibAbs1.h
+@@ -0,0 +1 @@
++extern int testLibAbs1(void);
+diff --git a/Tests/ExportImport/Export/testLibAbs1.c b/Tests/ExportImport/Export/testLibAbs1.c
+new file mode 100644
+index 0000000..34aec75
+--- /dev/null
++++ b/Tests/ExportImport/Export/testLibAbs1.c
+@@ -0,0 +1 @@
++int testLibAbs1(void) { return 0; }
+diff --git a/Tests/ExportImport/Import/A/CMakeLists.txt b/Tests/ExportImport/Import/A/CMakeLists.txt
+index eb0bbf8..9450c82 100644
+--- a/Tests/ExportImport/Import/A/CMakeLists.txt
++++ b/Tests/ExportImport/Import/A/CMakeLists.txt
+@@ -96,6 +96,16 @@ foreach(c DEBUG RELWITHDEBINFO)
+ endforeach()
+ #-----------------------------------------------------------------------------
++include(${CMAKE_INSTALL_PREFIX}/lib/expAbs/expAbs.cmake)
++
++add_executable(imp_testExeAbs1
++  imp_testExeAbs1.c
++  )
++target_link_libraries(imp_testExeAbs1
++  expAbs_testLibAbs1
++  )
++
++#-----------------------------------------------------------------------------
+ # Create a custom target to generate a header for the libraries below.
+ # Drive the header generation through an indirect chain of imported
+ # target dependencies.
+diff --git a/Tests/ExportImport/Import/A/imp_testExeAbs1.c b/Tests/ExportImport/Import/A/imp_testExeAbs1.c
+new file mode 100644
+index 0000000..069c3f0
+--- /dev/null
++++ b/Tests/ExportImport/Import/A/imp_testExeAbs1.c
+@@ -0,0 +1,15 @@
++#include "testLibAbs1.h"
++#include "testLibAbs1a.h"
++#include "testLibAbs1b.h"
++#ifndef testLibAbs1a
++# error "testLibAbs1a not defined"
++#endif
++#ifndef testLibAbs1b
++# error "testLibAbs1b not defined"
++#endif
++int main()
++{
++  return 0
++    + testLibAbs1()
++    ;
++}
+-- 
+1.7.10.4
+
index da70df2fed5297bc82853c6474fc104ca8c4bf4b..4f67080281a85097c1ef9db4bf56206967027f9f 100644 (file)
@@ -13,7 +13,7 @@ Summary:      Cross-platform, open-source make system
 Summary(pl.UTF-8):     Wieloplatformowy system make o otwartych źródłach
 Name:          cmake
 Version:       3.1.0
-Release:       1
+Release:       2
 License:       BSD
 Group:         Development/Building
 Source0:       http://www.cmake.org/files/v3.1/%{name}-%{version}.tar.gz
@@ -22,6 +22,7 @@ Patch0:               %{name}-lib64.patch
 Patch1:                %{name}-helpers.patch
 Patch2:                %{name}-findruby.patch
 Patch3:                %{name}-tests.patch
+Patch4:                %{name}-bug-0015258.patch
 Patch5:                %{name}-findruby2.patch
 Patch6:                %{name}-findpython.patch
 URL:           http://www.cmake.org/
@@ -114,6 +115,7 @@ Bashowe dopełnianie parametrów dla cmake'a.
 %patch1 -p1
 %patch2 -p1
 %patch3 -p1
+%patch4 -p1
 %patch5 -p1
 %patch6 -p1
 
This page took 0.036471 seconds and 4 git commands to generate.