On 7/21/2011 1:07 PM, Marco Corvo wrote:
Hi all,

I'm trying to use a new feature of releases 2.8.4/5, that is the possibility
> to define dependencies for IMPORTED targets and when I run cmake I get a
> SIGSEV signal. Trying to get some more info with Valgrind I found that:

I can reproduce this with just:

  cmake_minimum_required(VERSION 2.8.4)
  project(FOO C)
  add_library(foo STATIC IMPORTED)
  add_dependencies(foo does_not_exist) # ***
  add_executable(bar bar.c)
  target_link_libraries(bar foo)

So it looks like cmake is trying to access (dereference) a NULL pointer.
> In particular, digging in the source code, the issue arises (apparently)
> in cmComputeTargetDepends.cxx(AddTargetDepend) at line 279

cmTarget* transitive_dependee =
dependee->GetMakefile()->FindTargetToUse(i->c_str());

when cmake recursively calculates the dependency of my target, which relies
> on all IMPORTED targets, and hits an IMPORTED target (a library) with NO
> dependencies, that is the last leaf of my deps tree. The "transitive_dependee"
> returned by FindTargetToTuse turns out to be a NULL pointer and when
IsImported() is called on it, it makes the program crash.

You found the correct line.  The bad code was added along with the feature:

  http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=e01cce28

This was a dumb mistake on my part.  I will fix it.  Meanwhile you can
avoid the crash by not making an imported target depend on a target
that does not exist.

-Brad
_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to