Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
search libunwind with cmake and die at config time if not found
authorMartin Quinson <martin.quinson@loria.fr>
Mon, 15 Oct 2012 21:57:55 +0000 (23:57 +0200)
committerMartin Quinson <martin.quinson@loria.fr>
Mon, 15 Oct 2012 21:57:55 +0000 (23:57 +0200)
buildtools/Cmake/CompleteInFiles.cmake
buildtools/Cmake/DefinePackages.cmake
buildtools/Cmake/MakeLib.cmake
buildtools/Cmake/Modules/FindLibunwind.cmake [new file with mode: 0644]

index 5f1d02e..199fa68 100644 (file)
@@ -206,6 +206,7 @@ endif(enable_mallocators)
 if(enable_model-checking AND HAVE_MMAP)
   SET(HAVE_MC 1)
   SET(MMALLOC_WANT_OVERRIDE_LEGACY 1)
+  include(FindLibunwind)
 else(enable_model-checking AND HAVE_MMAP)
   SET(HAVE_MC 0)
   SET(MMALLOC_WANT_OVERRIDE_LEGACY 0)
index 9c8456d..5f609b0 100644 (file)
@@ -786,6 +786,7 @@ set(CMAKE_SOURCE_FILES
   buildtools/Cmake/Modules/FindRubySimgrid.cmake
   buildtools/Cmake/Modules/FindSimGrid.cmake
   buildtools/Cmake/Modules/FindValgrind.cmake
+  buildtools/Cmake/Modules/FindLibunwind.cmake
   buildtools/Cmake/Option.cmake
   buildtools/Cmake/Pipol.cmake
   buildtools/Cmake/PrintArgs.cmake
index 96b330e..8e71f41 100644 (file)
@@ -115,6 +115,8 @@ if(HAVE_GTNETS)
 endif(HAVE_GTNETS)
 
 if(HAVE_MC)
+  # The availability of libunwind was checked in CompleteInFiles.cmake
+  #   (that includes FindLibunwind.cmake), so simply load it now.
   if(PROCESSOR_x86_64)
     SET(SIMGRID_DEP "${SIMGRID_DEP} -lunwind-x86_64")
   else(PROCESSOR_x86_64)
diff --git a/buildtools/Cmake/Modules/FindLibunwind.cmake b/buildtools/Cmake/Modules/FindLibunwind.cmake
new file mode 100644 (file)
index 0000000..101a9df
--- /dev/null
@@ -0,0 +1,70 @@
+if(PROCESSOR_x86_64)
+  find_library(PATH_LIBUNWIND_LIB
+    NAMES unwind-x86_64
+    HINTS
+    $ENV{SIMGRID_LIBUNWIND_LIBRARY_PATH}
+    $ENV{LD_LIBRARY_PATH}
+    $ENV{LIBUNWIND_LIBRARY_PATH}
+    PATH_SUFFIXES lib/ GnuWin32/lib
+    PATHS
+    /opt
+    /opt/local
+    /opt/csw
+    /sw
+    /usr)
+else(PROCESSOR_x86_64)
+  find_library(PATH_LIBUNWIND_LIB
+    NAMES unwind
+    HINTS
+    $ENV{SIMGRID_LIBUNWIND_LIBRARY_PATH}
+    $ENV{LD_LIBRARY_PATH}
+    $ENV{LIBUNWIND_LIBRARY_PATH}
+    PATH_SUFFIXES lib/ GnuWin32/lib
+    PATHS
+    /opt
+    /opt/local
+    /opt/csw
+    /sw
+    /usr)
+endif(PROCESSOR_x86_64)
+
+find_path(PATH_LIBUNWIND_H "libunwind.h"
+  HINTS
+  $ENV{SIMGRID_LIBUNWIND_LIBRARY_PATH}
+  $ENV{LD_LIBRARY_PATH}
+  $ENV{LIBUNWIND_LIBRARY_PATH}
+  PATH_SUFFIXES include/ GnuWin32/include
+  PATHS
+  /opt
+  /opt/local
+  /opt/csw
+  /sw
+  /usr)
+
+message(STATUS "Looking for libunwind.h")
+if(PATH_LIBUNWIND_H)
+  message(STATUS "Looking for libunwind.h - found")
+else(PATH_LIBUNWIND_H)
+  message(STATUS "Looking for libunwind.h - not found")
+endif(PATH_LIBUNWIND_H)
+
+message(STATUS "Looking for libunwind")
+if(PATH_LIBUNWIND_LIB)
+  message(STATUS "Looking for libunwind - found")
+else(PATH_LIBUNWIND_LIB)
+  message(STATUS "Looking for libunwind - not found")
+endif(PATH_LIBUNWIND_LIB)
+
+if(PATH_LIBUNWIND_LIB AND PATH_LIBUNWIND_H)
+  string(REGEX REPLACE "/libunwind.*[.]${LIB_EXE}$" "" PATH_LIBUNWIND_LIB "${PATH_LIBUNWIND_LIB}")
+  string(REGEX REPLACE "/libunwind.h"               "" PATH_LIBUNWIND_H   "${PATH_LIBUNWIND_H}")
+      
+  include_directories(${PATH_LIBUNWIND_H})
+  link_directories(${PATH_LIBUNWIND_LIB})
+  
+else(PATH_LIBUNWIND_LIB AND PATH_LIBUNWIND_H)
+  message(FATAL_ERROR "Please either install the libunwind7-dev package (or equivalent) or turn off the model-checking option of SimGrid.")
+endif(PATH_LIBUNWIND_LIB AND PATH_LIBUNWIND_H)
+
+mark_as_advanced(PATH_LIBUNWIND_H)
+mark_as_advanced(PATH_LIBUNWIND_LIB)
\ No newline at end of file