[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