diff -Nru cmake-3.5.1/debian/changelog cmake-3.5.1/debian/changelog --- cmake-3.5.1/debian/changelog 2016-03-30 07:40:44.000000000 +0200 +++ cmake-3.5.1/debian/changelog 2016-04-04 10:56:44.000000000 +0200 @@ -1,3 +1,11 @@ +cmake (3.5.1-1ubuntu2) xenial; urgency=medium + + * cherry-picks from upstream to fix a GetProperty() crash (LP: #1564741): + - debian/patches/bc30f8b5e66cb9c15fd224f5e51454c0bc66c67e.patch + - debian/patches/0e44f4894f23d5eccd8d360f3420c832f9433a20.patch + + -- Gianfranco Costamagna Mon, 04 Apr 2016 10:04:07 +0200 + cmake (3.5.1-1ubuntu1) xenial; urgency=medium * Merge from Debian unstable (LP: #1563580). Remaining changes: diff -Nru cmake-3.5.1/debian/patches/0e44f4894f23d5eccd8d360f3420c832f9433a20.patch cmake-3.5.1/debian/patches/0e44f4894f23d5eccd8d360f3420c832f9433a20.patch --- cmake-3.5.1/debian/patches/0e44f4894f23d5eccd8d360f3420c832f9433a20.patch 1970-01-01 01:00:00.000000000 +0100 +++ cmake-3.5.1/debian/patches/0e44f4894f23d5eccd8d360f3420c832f9433a20.patch 2016-04-04 10:54:05.000000000 +0200 @@ -0,0 +1,126 @@ +From: Brad King +Date: Fri, 1 Apr 2016 14:26:08 +0000 (-0400) +Subject: Rename local target lookup methods to clarify purpose +X-Git-Url: https://cmake.org/gitweb?p=cmake.git;a=commitdiff_plain;h=0e44f4894f23d5eccd8d360f3420c832f9433a20 + +Rename local target lookup methods to clarify purpose + +Rename methods: + +* `cmMakefile::Find{ => LocalNonAlias}Target` +* `cmLocalGenerator::Find{ => LocalNonAlias}GeneratorTarget` + +These names clarify that they are for directory-local target names +and do not consider alias targets. +--- + +diff --git a/Source/cmFLTKWrapUICommand.cxx b/Source/cmFLTKWrapUICommand.cxx +index d17d664..c64e813 100644 +--- a/Source/cmFLTKWrapUICommand.cxx ++++ b/Source/cmFLTKWrapUICommand.cxx +@@ -117,7 +117,7 @@ void cmFLTKWrapUICommand::FinalPass() + // people should add the srcs to the target themselves, but the old command + // didn't support that, so check and see if they added the files in and if + // they didn;t then print a warning and add then anyhow +- cmTarget* target = this->Makefile->FindTarget(this->Target); ++ cmTarget* target = this->Makefile->FindLocalNonAliasTarget(this->Target); + if(!target) + { + std::string msg = +diff --git a/Source/cmInstallCommand.cxx b/Source/cmInstallCommand.cxx +index 2d78a41..7e72a8a 100644 +--- a/Source/cmInstallCommand.cxx ++++ b/Source/cmInstallCommand.cxx +@@ -381,7 +381,7 @@ bool cmInstallCommand::HandleTargetsMode(std::vector const& args) + return false; + } + // Lookup this target in the current directory. +- if(cmTarget* target=this->Makefile->FindTarget(*targetIt)) ++ if(cmTarget* target=this->Makefile->FindLocalNonAliasTarget(*targetIt)) + { + // Found the target. Check its type. + if(target->GetType() != cmState::EXECUTABLE && +diff --git a/Source/cmInstallTargetGenerator.cxx b/Source/cmInstallTargetGenerator.cxx +index 5e88fa2..b93fb8d 100644 +--- a/Source/cmInstallTargetGenerator.cxx ++++ b/Source/cmInstallTargetGenerator.cxx +@@ -446,7 +446,7 @@ cmInstallTargetGenerator::GetInstallFilename(cmGeneratorTarget const* target, + + void cmInstallTargetGenerator::Compute(cmLocalGenerator* lg) + { +- this->Target = lg->FindGeneratorTarget(this->TargetName); ++ this->Target = lg->FindLocalNonAliasGeneratorTarget(this->TargetName); + } + + //---------------------------------------------------------------------------- +diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx +index 6153fbd..586e4c6 100644 +--- a/Source/cmLocalGenerator.cxx ++++ b/Source/cmLocalGenerator.cxx +@@ -485,7 +485,7 @@ private: + std::string Name; + }; + +-cmGeneratorTarget* cmLocalGenerator::FindGeneratorTarget( ++cmGeneratorTarget* cmLocalGenerator::FindLocalNonAliasGeneratorTarget( + const std::string& name) const + { + std::vector::const_iterator ti = +@@ -1828,7 +1828,7 @@ cmLocalGenerator::FindGeneratorTargetToUse(const std::string& name) const + return *imported; + } + +- if(cmGeneratorTarget* t = this->FindGeneratorTarget(name)) ++ if(cmGeneratorTarget* t = this->FindLocalNonAliasGeneratorTarget(name)) + { + return t; + } +diff --git a/Source/cmLocalGenerator.h b/Source/cmLocalGenerator.h +index 68e7667..b673a85 100644 +--- a/Source/cmLocalGenerator.h ++++ b/Source/cmLocalGenerator.h +@@ -129,7 +129,8 @@ public: + void AddImportedGeneratorTarget(cmGeneratorTarget* gt); + void AddOwnedImportedGeneratorTarget(cmGeneratorTarget* gt); + +- cmGeneratorTarget* FindGeneratorTarget(const std::string& name) const; ++ cmGeneratorTarget* ++ FindLocalNonAliasGeneratorTarget(const std::string& name) const; + cmGeneratorTarget* FindGeneratorTargetToUse(const std::string& name) const; + + /** +diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx +index 598f8c4..df687d0 100644 +--- a/Source/cmMakefile.cxx ++++ b/Source/cmMakefile.cxx +@@ -4058,7 +4058,7 @@ std::vector cmMakefile::GetPropertyKeys() const + return this->StateSnapshot.GetDirectory().GetPropertyKeys(); + } + +-cmTarget* cmMakefile::FindTarget(const std::string& name) const ++cmTarget* cmMakefile::FindLocalNonAliasTarget(const std::string& name) const + { + cmTargets::iterator i = this->Targets.find( name ); + if ( i != this->Targets.end() ) +@@ -4235,7 +4235,7 @@ cmTarget* cmMakefile::FindTargetToUse(const std::string& name, + } + + // Look for a target built in this directory. +- if(cmTarget* t = this->FindTarget(name)) ++ if(cmTarget* t = this->FindLocalNonAliasTarget(name)) + { + return t; + } +diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h +index a69c705..45f2efb 100644 +--- a/Source/cmMakefile.h ++++ b/Source/cmMakefile.h +@@ -388,7 +388,7 @@ public: + } + std::vector GetImportedTargets() const; + +- cmTarget* FindTarget(const std::string& name) const; ++ cmTarget* FindLocalNonAliasTarget(const std::string& name) const; + + /** Find a target to use in place of the given name. The target + returned may be imported or built within the project. */ diff -Nru cmake-3.5.1/debian/patches/bc30f8b5e66cb9c15fd224f5e51454c0bc66c67e.patch cmake-3.5.1/debian/patches/bc30f8b5e66cb9c15fd224f5e51454c0bc66c67e.patch --- cmake-3.5.1/debian/patches/bc30f8b5e66cb9c15fd224f5e51454c0bc66c67e.patch 1970-01-01 01:00:00.000000000 +0100 +++ cmake-3.5.1/debian/patches/bc30f8b5e66cb9c15fd224f5e51454c0bc66c67e.patch 2016-04-04 10:51:57.000000000 +0200 @@ -0,0 +1,129 @@ +From: Brad King +Date: Fri, 1 Apr 2016 13:13:16 +0000 (-0400) +Subject: Fix lookup of an ALIAS target outside aliased target's directory (#16044) +X-Git-Url: https://cmake.org/gitweb?p=cmake.git;a=commitdiff_plain;h=bc30f8b5e66cb9c15fd224f5e51454c0bc66c67e + +Fix lookup of an ALIAS target outside aliased target's directory (#16044) + +Refactoring in commit v3.5.0-rc1~272^2~11 (cmTarget: Implement ALIAS in +terms of name mapping, 2015-10-25) accidentally introduced logic that +assumes ALIAS targets always reference targets in their own directory. +Fix this and add a test case. + +The configure-step fix is that `cmMakefile::FindTarget` should not consider +aliases. The purpose of this method is just to look up targets local to +a directory. Since ALIAS and normal targets share a namespace we know a +locally defined target will never collide with an ALIAS target anyway. +The method has 3 call sites, and this change is safe for all of them: + +* `cmInstallCommand::HandleTargetsMode`: Rejects aliases before the call. +* `cmFLTKWrapUICommand::FinalPass`: Should never have considered aliases. +* `cmMakefile::FindTargetToUse`: Falls back to a global lookup anyway. + +The generate-step fix is that `cmLocalGenerator::FindGeneratorTarget` +should not consider aliases. This method is the generate-step +equivalent to the above. The method has 2 call sites, and this change +is safe for both of them: + +* `cmInstallTargetGenerator::Compute`: Never uses an alias target name. +* `cmLocalGenerator::FindGeneratorTargetToUse`: Falls back to global lookup. + +Reported-by: Matteo Settenvini +--- + +diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx +index 912be0c..6153fbd 100644 +--- a/Source/cmLocalGenerator.cxx ++++ b/Source/cmLocalGenerator.cxx +@@ -488,16 +488,6 @@ private: + cmGeneratorTarget* cmLocalGenerator::FindGeneratorTarget( + const std::string& name) const + { +- std::map::const_iterator i = +- this->AliasTargets.find(name); +- if (i != this->AliasTargets.end()) +- { +- std::vector::const_iterator ai = +- std::find_if(this->GeneratorTargets.begin(), +- this->GeneratorTargets.end(), +- NamedGeneratorTargetFinder(i->second)); +- return *ai; +- } + std::vector::const_iterator ti = + std::find_if(this->GeneratorTargets.begin(), + this->GeneratorTargets.end(), +@@ -506,7 +496,6 @@ cmGeneratorTarget* cmLocalGenerator::FindGeneratorTarget( + { + return *ti; + } +- + return 0; + } + +diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx +index 600c985..598f8c4 100644 +--- a/Source/cmMakefile.cxx ++++ b/Source/cmMakefile.cxx +@@ -4058,25 +4058,13 @@ std::vector cmMakefile::GetPropertyKeys() const + return this->StateSnapshot.GetDirectory().GetPropertyKeys(); + } + +-cmTarget* cmMakefile::FindTarget(const std::string& name, +- bool excludeAliases) const ++cmTarget* cmMakefile::FindTarget(const std::string& name) const + { +- if (!excludeAliases) +- { +- std::map::const_iterator i = +- this->AliasTargets.find(name); +- if (i != this->AliasTargets.end()) +- { +- cmTargets::iterator ai = this->Targets.find(i->second); +- return &ai->second; +- } +- } + cmTargets::iterator i = this->Targets.find( name ); + if ( i != this->Targets.end() ) + { + return &i->second; + } +- + return 0; + } + +@@ -4247,7 +4235,7 @@ cmTarget* cmMakefile::FindTargetToUse(const std::string& name, + } + + // Look for a target built in this directory. +- if(cmTarget* t = this->FindTarget(name, excludeAliases)) ++ if(cmTarget* t = this->FindTarget(name)) + { + return t; + } +diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h +index 362ea75..a69c705 100644 +--- a/Source/cmMakefile.h ++++ b/Source/cmMakefile.h +@@ -388,8 +388,7 @@ public: + } + std::vector GetImportedTargets() const; + +- cmTarget* FindTarget(const std::string& name, +- bool excludeAliases = false) const; ++ cmTarget* FindTarget(const std::string& name) const; + + /** Find a target to use in place of the given name. The target + returned may be imported or built within the project. */ +diff --git a/Tests/AliasTarget/subdir/CMakeLists.txt b/Tests/AliasTarget/subdir/CMakeLists.txt +index 8c84aea..05a7d86 100644 +--- a/Tests/AliasTarget/subdir/CMakeLists.txt ++++ b/Tests/AliasTarget/subdir/CMakeLists.txt +@@ -1,3 +1,8 @@ + + add_library(tgt STATIC empty.cpp) + add_library(Sub::tgt ALIAS tgt) ++ ++# foo comes from the top-level CMakeLists.txt ++add_library(Top::foo ALIAS foo) ++get_target_property(some_prop Top::foo SOME_PROP) ++target_link_libraries(tgt Top::foo) diff -Nru cmake-3.5.1/debian/patches/series cmake-3.5.1/debian/patches/series --- cmake-3.5.1/debian/patches/series 2016-03-30 07:40:29.000000000 +0200 +++ cmake-3.5.1/debian/patches/series 2016-04-04 10:54:31.000000000 +0200 @@ -3,3 +3,5 @@ fix-ftbfs-on-kfreebsd.patch ubuntu_boost-multiarch.patch ubuntu_cmake-crosscompile.patch +bc30f8b5e66cb9c15fd224f5e51454c0bc66c67e.patch +0e44f4894f23d5eccd8d360f3420c832f9433a20.patch