[sundials] 01/01: Improve PETSc support

James Tocknell aragilar-guest at moszumanska.debian.org
Tue Feb 21 08:58:04 UTC 2017


This is an automated email from the git hooks/post-receive script.

aragilar-guest pushed a commit to branch master
in repository sundials.

commit 40707c6a53f2f59f217e47b8019256fe28cb3f23
Author: James Tocknell <aragilar at gmail.com>
Date:   Tue Feb 14 19:21:25 2017 +1100

    Improve PETSc support
    
    Clean up upstream's FindPETSc to make it cleaner and use pkg-config
---
 debian/control                                     |   2 +-
 ...indPETSc-to-use-pkg-config-where-possible.patch | 187 +++++++++++++++++++++
 debian/patches/series                              |   1 +
 debian/rules                                       |   8 -
 4 files changed, 189 insertions(+), 9 deletions(-)

diff --git a/debian/control b/debian/control
index 2594f77..7ac9251 100644
--- a/debian/control
+++ b/debian/control
@@ -12,7 +12,7 @@ Build-Depends: debhelper (>= 10),
                mpi-default-dev,
                libblas-dev | libblas.so,
                liblapack-dev | liblapack.so,
-               libpetsc3.7-dev, libsuitesparse-dev, libhypre-dev
+               petsc-dev, libsuitesparse-dev, libhypre-dev
 Standards-Version: 3.9.8
 Vcs-Browser: https://anonscm.debian.org/cgit/debian-science/packages/sundials.git
 Vcs-Git: https://anonscm.debian.org/git/debian-science/packages/sundials.git
diff --git a/debian/patches/0004-Improve-FindPETSc-to-use-pkg-config-where-possible.patch b/debian/patches/0004-Improve-FindPETSc-to-use-pkg-config-where-possible.patch
new file mode 100644
index 0000000..f3e0c0a
--- /dev/null
+++ b/debian/patches/0004-Improve-FindPETSc-to-use-pkg-config-where-possible.patch
@@ -0,0 +1,187 @@
+From: James Tocknell <aragilar at gmail.com>
+Date: Tue, 14 Feb 2017 21:05:21 +1100
+Subject: Improve FindPETSc to use pkg-config where possible
+
+---
+ CMakeLists.txt             | 14 +++++----
+ config/FindPETSc.cmake     | 54 +++++++++++++++++----------------
+ config/SundialsPETSc.cmake | 75 ----------------------------------------------
+ 3 files changed, 37 insertions(+), 106 deletions(-)
+ delete mode 100644 config/SundialsPETSc.cmake
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 5c7dbad..6db567d 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -797,16 +797,18 @@ IF(PETSC_ENABLE AND NOT MPI_ENABLE)
+ ENDIF(PETSC_ENABLE AND NOT MPI_ENABLE)
+ 
+ IF(PETSC_ENABLE AND MPI_ENABLE)
+-  SHOW_VARIABLE(PETSC_INCLUDE_DIR PATH "PETSc include directory"
+-    "${PETSC_INCLUDE_DIR}") 
+-  SHOW_VARIABLE(PETSC_LIBRARY_DIR PATH
+-    "PETSc library directory" "${PETSC_LIBRARY_DIR}")
+ 
+-  INCLUDE(SundialsPETSc)
++  find_package(PETSc)
+ 
+-  IF(PETSC_FOUND) 
++  IF(PETSC_FOUND)
+     # sundials_config.h symbol
+     SET(SUNDIALS_PETSC TRUE)
++
++    SHOW_VARIABLE(PETSC_INCLUDE_DIR PATH "PETSc include directory"
++      "${PETSC_INCLUDE_DIR}")
++    SHOW_VARIABLE(PETSC_LIBRARY_DIR PATH
++      "PETSc library directory" "${PETSC_LIBRARY_DIR}")
++
+     INCLUDE_DIRECTORIES(${PETSC_INCLUDE_DIR})
+   ENDIF(PETSC_FOUND)
+ 
+diff --git a/config/FindPETSc.cmake b/config/FindPETSc.cmake
+index 7c1f736..a84a27b 100644
+--- a/config/FindPETSc.cmake
++++ b/config/FindPETSc.cmake
+@@ -17,32 +17,36 @@
+ # Find PETSC library.
+ # 
+ 
++find_package(PkgConfig)
++
+ IF(WIN32)
+   set(CMAKE_FIND_LIBRARY_SUFFIXES ".lib" ".dll")
+ endif(WIN32)
++pkg_check_modules(PC_PETSC QUIET PETSc)
++
++find_path(PETSC_INCLUDE_DIR petsc.h
++          HINTS ${PC_PETSC_INCLUDEDIR} ${PC_PETSC_INCLUDE_DIRS}
++          PATHS PETSC_INCLUDE_DIR
++          )
++
++find_library(PETSC_LIBRARY NAMES petsc
++             HINTS ${PC_PETSC_LIBDIR} ${PC_PETSC_LIBRARY_DIRS} )
++
++include(CheckCSourceRuns)
++set(CMAKE_REQUIRED_INCLUDES ${PETSC_INCLUDE_DIR})
++set(CMAKE_REQUIRED_LIBRARIES ${PETSC_LIBRARY})
++check_c_source_runs(
++    "\#include \"petscvec.h\"\nint main(){Vec x;VecCreate(PETSC_COMM_WORLD, &x);return(0)}"
++    PETSC_BUILD_STATUS
++)
++
++include(FindPackageHandleStandardArgs)
++# handle the QUIETLY and REQUIRED arguments and set PETSC_FOUND to TRUE
++# if all listed variables are TRUE
++find_package_handle_standard_args(PETSc  DEFAULT_MSG
++    PETSC_LIBRARY PETSC_INCLUDE_DIR PETSC_BUILD_STATUS)
++
++mark_as_advanced(PETSC_INCLUDE_DIR PETSC_LIBRARY )
+ 
+-### Find include dir
+-find_path(temp_PETSC_INCLUDE_DIR petsc.h ${PETSC_INCLUDE_DIR})
+-if (temp_PETSC_INCLUDE_DIR)
+-    set(PETSC_INCLUDE_DIR ${temp_PETSC_INCLUDE_DIR})
+-endif()
+-unset(temp_PETSC_INCLUDE_DIR CACHE)
+-
+-if (PETSC_LIBRARY)
+-    # We have (or were given) PETSC_LIBRARY - get path to use for any related libs
+-    get_filename_component(PETSC_LIBRARY_DIR ${PETSC_LIBRARY} PATH)
+-    
+-    # force CACHE update to show user DIR that will be used
+-    set(PETSC_LIBRARY_DIR ${PETSC_LIBRARY_DIR} CACHE PATH "" FORCE)
+-    
+-else ()
+-    # find library with user provided directory path
+-    set(PETSC_LIBRARY_NAMES petsc PETSC)
+-    find_library(PETSC_LIBRARY 
+-      NAMES ${PETSC_LIBRARY_NAMES}
+-      PATHS ${PETSC_LIBRARY_DIR} NO_DEFAULT_PATH
+-      )
+-endif ()
+-mark_as_advanced(PETSC_LIBRARY)
+-
+-set(PETSC_LIBRARIES ${PETSC_LIBRARY})
++set(PETSC_LIBRARIES ${PETSC_LIBRARY} )
++set(PETSC_INCLUDE_DIRS ${PETSC_INCLUDE_DIR} )
+diff --git a/config/SundialsPETSc.cmake b/config/SundialsPETSc.cmake
+deleted file mode 100644
+index 4ab8f49..0000000
+--- a/config/SundialsPETSc.cmake
++++ /dev/null
+@@ -1,75 +0,0 @@
+-# ---------------------------------------------------------------
+-# $Revision:  $
+-# $Date:  $
+-# ---------------------------------------------------------------
+-# Programmer:  Eddy Banks @ LLNL
+-# ---------------------------------------------------------------
+-# LLNS Copyright Start
+-# Copyright (c) 2014, Lawrence Livermore National Security
+-# This work was performed under the auspices of the U.S. Department 
+-# of Energy by Lawrence Livermore National Laboratory in part under 
+-# Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
+-# Produced at the Lawrence Livermore National Laboratory.
+-# All rights reserved.
+-# For details, see the LICENSE file.
+-# LLNS Copyright End
+-# ---------------------------------------------------------------
+-# PETSc tests for SUNDIALS CMake-based configuration.
+-# 
+-### This is only set if running GUI - simply return first time enabled
+-IF(PETSC_DISABLED)
+-  SET(PETSC_DISABLED FALSE CACHE INTERNAL "GUI - now enabled" FORCE)
+-  RETURN()
+-ENDIF()
+-
+-SET(PETSC_FOUND FALSE)
+-
+-# set PETSC_LIBRARIES
+-include(FindPETSc)
+-
+-# If we have the PETSC libraries, test them
+-if(PETSC_LIBRARIES)
+-  message(STATUS "Looking for PETSc libraries...")
+-  # Create the PETSCTest directory
+-  set(PETSCTest_DIR ${PROJECT_BINARY_DIR}/PETSCTest)
+-  file(MAKE_DIRECTORY ${PETSCTest_DIR})
+-  # Create a CMakeLists.txt file 
+-  file(WRITE ${PETSCTest_DIR}/CMakeLists.txt
+-    "CMAKE_MINIMUM_REQUIRED(VERSION 2.4)\n"
+-    "PROJECT(ltest C)\n"
+-    "SET(CMAKE_VERBOSE_MAKEFILE ON)\n"
+-    "SET(CMAKE_BUILD_TYPE \"${CMAKE_BUILD_TYPE}\")\n"
+-    "SET(CMAKE_C_COMPILER ${MPI_MPICC})\n"
+-    "SET(CMAKE_C_FLAGS \"${CMAKE_C_FLAGS}\")\n"
+-    "SET(CMAKE_C_FLAGS_RELEASE \"${CMAKE_C_FLAGS_RELEASE}\")\n"
+-    "SET(CMAKE_C_FLAGS_DEBUG \"${CMAKE_C_FLAGS_DEBUG}\")\n"
+-    "SET(CMAKE_C_FLAGS_RELWITHDEBUGINFO \"${CMAKE_C_FLAGS_RELWITHDEBUGINFO}\")\n"
+-    "SET(CMAKE_C_FLAGS_MINSIZE \"${CMAKE_C_FLAGS_MINSIZE}\")\n"
+-    "INCLUDE_DIRECTORIES(${PETSC_INCLUDE_DIR})\n"
+-    "ADD_EXECUTABLE(ltest ltest.c)\n"
+-    "TARGET_LINK_LIBRARIES(ltest ${PETSC_LIBRARIES})\n")    
+-  # Create a C source file which calls a PETSC function
+-  file(WRITE ${PETSCTest_DIR}/ltest.c
+-    "\#include \"petscvec.h\"\n"
+-    "int main(){\n"
+-    "Vec x;\n"
+-    "VecCreate(PETSC_COMM_WORLD, &x);\n" 
+-    "return(0);\n"
+-    "}\n")
+-  # Attempt to link the "ltest" executable
+-  try_compile(LTEST_OK ${PETSCTest_DIR} ${PETSCTest_DIR} ltest OUTPUT_VARIABLE MY_OUTPUT)
+-      
+-  # To ensure we do not use stuff from the previous attempts, 
+-  # we must remove the CMakeFiles directory.
+-  file(REMOVE_RECURSE ${PETSCTest_DIR}/CMakeFiles)
+-  # Process test result
+-  if(LTEST_OK)
+-    message(STATUS "Checking if PETSc works... OK")
+-    set(PETSC_FOUND TRUE)
+-  else(LTEST_OK)
+-    message(STATUS "Checking if PETSc works... FAILED")
+-  endif(LTEST_OK)
+-else(PETSC_LIBRARIES)
+-  PRINT_WARNING("PETSC LIBRARIES NOT Found. Please check library path" "${PETSC_LIBRARY_DIR} ")
+-  message(STATUS "Looking for PETSc libraries... FAILED")
+-endif(PETSC_LIBRARIES)
diff --git a/debian/patches/series b/debian/patches/series
index 48b1d76..cdb33e9 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,2 +1,3 @@
 0001-Added-missing-linkages-to-the-DSOs.patch
 Fix-library-paths-for-multiarch.patch
+0004-Improve-FindPETSc-to-use-pkg-config-where-possible.patch
diff --git a/debian/rules b/debian/rules
index d9d33cc..b231b11 100755
--- a/debian/rules
+++ b/debian/rules
@@ -5,12 +5,6 @@ export OMPI_MCA_plm_rsh_agent=/bin/false
 
 DEB_HOST_GNU_TYPE := $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
 
-# PETSc include directory: I ask pkg-config about all the cflags I need, then
-# look through all the include directories it gives me, and report the one that
-# has petsc.h
-PETSC_INCLUDE_DIR := $(patsubst %/petsc.h,%,$(wildcard $(addsuffix /petsc.h,$(patsubst -I%,%,$(filter -I%,$(shell pkg-config --cflags PETSc))))))
-$(if $(PETSC_INCLUDE_DIR),,$(error Could not find PETSc include directory))
-
 extra_flags +=						\
    -DCMAKE_Fortran_COMPILER=gfortran			\
    -DBUILD_SHARED_LIBS:BOOL=ON				\
@@ -30,8 +24,6 @@ extra_flags +=						\
    -DKLU_LIBRARY_DIR=/usr/lib/$(DEB_HOST_GNU_TYPE)	\
                                                         \
    -DPETSC_ENABLE:BOOL=ON				\
-   -DPETSC_INCLUDE_DIR=$(PETSC_INCLUDE_DIR)		\
-   -DPETSC_LIBRARY_DIR=/usr/lib/$(DEB_HOST_GNU_TYPE)	\
                                                         \
    -DSUPERLUMT_ENABLE:BOOL=OFF				\
                                                         \

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/sundials.git



More information about the debian-science-commits mailing list