|
1 | | -# Find PETSc |
| 1 | +# FindPETSc.cmake |
2 | 2 | # |
3 | 3 | # Once done this will define |
4 | 4 | # PETSC_FOUND - System has PETSc |
5 | 5 | # PETSC_INCLUDE_DIR - The PETSc include directory |
6 | 6 | # PETSC_LIBRARY - The PETSc library |
7 | 7 | # PETSC_VERSION - The PETSc version |
| 8 | +# SLEPC_FOUND - PETSc has SLEPc |
| 9 | +# SLEPC_INCLUDE_DIR - The SLEPc include directory |
| 10 | +# SLEPC_LIBRARY - The SLEPc library |
| 11 | +# SLEPC_VERSION |
8 | 12 |
|
9 | | -find_path( |
10 | | - PETSC_INCLUDE_DIR |
11 | | - petsc.h |
12 | | - PATHS |
13 | | - $ENV{PETSC_DIR}/include |
14 | | - $ENV{PETSC_ROOT}/include |
| 13 | +include(FindPackageHandleStandardArgs) |
| 14 | + |
| 15 | +find_package(PETSc CONFIG QUIET |
| 16 | + PATHS |
| 17 | + $ENV{PETSC_DIR}/$ENV{PETSC_ARCH}/lib/cmake/PETSc |
| 18 | + $ENV{PETSC_ROOT}/$ENV{PETSC_ARCH}/lib/cmake/PETSc |
15 | 19 | ) |
16 | 20 |
|
17 | | -find_library( |
18 | | - PETSC_LIBRARY |
19 | | - petsc |
| 21 | +if (NOT PETSc_FOUND) |
| 22 | + find_path(PETSC_INCLUDE_DIR |
| 23 | + NAMES petsc.h |
20 | 24 | PATHS |
21 | | - $ENV{PETSC_DIR}/$ENV{PETSC_ARCH}/lib |
22 | | - $ENV{PETSC_DIR}/lib |
23 | | - $ENV{PETSC_ROOT}/$ENV{PETSC_ARCH}/lib |
24 | | - $ENV{PETSC_ROOT}/lib |
25 | | -) |
| 25 | + $ENV{PETSC_DIR}/include |
| 26 | + $ENV{PETSC_ROOT}/include |
| 27 | + DOC "PETSc include directory" |
| 28 | + ) |
| 29 | + |
| 30 | + find_library(PETSC_LIBRARY |
| 31 | + NAMES petsc |
| 32 | + PATHS |
| 33 | + $ENV{PETSC_DIR}/$ENV{PETSC_ARCH}/lib |
| 34 | + $ENV{PETSC_DIR}/lib |
| 35 | + $ENV{PETSC_ROOT}/$ENV{PETSC_ARCH}/lib |
| 36 | + $ENV{PETSC_ROOT}/lib |
| 37 | + DOC "PETSc library" |
| 38 | + ) |
| 39 | + |
| 40 | + set(PETSc_FOUND |
| 41 | + ${PETSC_INCLUDE_DIR} |
| 42 | + AND |
| 43 | + ${PETSC_LIBRARY} |
| 44 | + ) |
| 45 | +endif() |
| 46 | + |
| 47 | +if (TARGET PETSc::PETSc) |
| 48 | + get_target_property(_petsc_version PETSc::PETSc INTERFACE_VERSION) |
| 49 | + set(PETSC_VERSION ${_petsc_version}) |
| 50 | +endif() |
26 | 51 |
|
27 | | -set(PETSC_VERSION "unknown") |
28 | | -find_file(PETSCVERSION_H petscversion.h |
| 52 | +if(NOT DEFINED PETSC_VERSION) |
| 53 | + set(PETSC_VERSION "unknown") |
| 54 | + find_file(PETSCVERSION_H |
| 55 | + NAMES petscversion.h |
29 | 56 | PATHS |
30 | | - $ENV{PETSC_DIR}/include |
31 | | - $ENV{PETSC_ROOT}/include |
32 | | -) |
33 | | -mark_as_advanced(PETSCVERSION_H) |
34 | | -if (PETSCVERSION_H) |
35 | | - file(READ ${PETSCVERSION_H} PETSC_VERSION_FILE) |
36 | | - string(REGEX MATCH "define[ ]+PETSC_VERSION_MAJOR[ ]+([0-9]+)" TMP "${PETSC_VERSION_FILE}") |
| 57 | + $ENV{PETSC_DIR}/include |
| 58 | + $ENV{PETSC_ROOT}/include |
| 59 | + ) |
| 60 | + if(PETSCVERSION_H) |
| 61 | + file(READ ${PETSCVERSION_H} _petscver) |
| 62 | + string(REGEX MATCH "define[ ]+PETSC_VERSION_MAJOR[ ]+([0-9]+)" _ "${_petscver}") |
37 | 63 | set(PETSC_VERSION_MAJOR ${CMAKE_MATCH_1}) |
38 | | - string(REGEX MATCH "define[ ]+PETSC_VERSION_MINOR[ ]+([0-9]+)" TMP "${PETSC_VERSION_FILE}") |
| 64 | + string(REGEX MATCH "define[ ]+PETSC_VERSION_MINOR[ ]+([0-9]+)" _ "${_petscver}") |
39 | 65 | set(PETSC_VERSION_MINOR ${CMAKE_MATCH_1}) |
40 | | - string(REGEX MATCH "define[ ]+PETSC_VERSION_SUBMINOR[ ]+([0-9]+)" TMP "${PETSC_VERSION_FILE}") |
| 66 | + string(REGEX MATCH "define[ ]+PETSC_VERSION_SUBMINOR[ ]+([0-9]+)" _ "${_petscver}") |
41 | 67 | set(PETSC_VERSION_PATCH ${CMAKE_MATCH_1}) |
42 | 68 | set(PETSC_VERSION "${PETSC_VERSION_MAJOR}.${PETSC_VERSION_MINOR}.${PETSC_VERSION_PATCH}") |
| 69 | + endif() |
| 70 | +endif() |
| 71 | + |
| 72 | +find_path(SLEPC_INCLUDE_DIR |
| 73 | + NAMES slepc.h |
| 74 | + PATHS |
| 75 | + $ENV{PETSC_DIR}/include/slepc |
| 76 | + $ENV{PETSC_ROOT}/include/slepc |
| 77 | + $ENV{SLEPC_DIR}/include |
| 78 | + $ENV{SLEPC_ROOT}/include |
| 79 | + DOC "SLEPc include directory" |
| 80 | +) |
| 81 | + |
| 82 | +find_library(SLEPC_LIBRARY |
| 83 | + NAMES slepc |
| 84 | + PATHS |
| 85 | + $ENV{PETSC_DIR}/$ENV{PETSC_ARCH}/lib |
| 86 | + $ENV{PETSC_DIR}/lib |
| 87 | + $ENV{PETSC_ROOT}/$ENV{PETSC_ARCH}/lib |
| 88 | + $ENV{PETSC_ROOT}/lib |
| 89 | + $ENV{SLEPC_DIR}/$ENV{SLEPC_ARCH}/lib |
| 90 | + $ENV{SLEPC_ROOT}/$ENV{SLEPC_ARCH}/lib |
| 91 | + $ENV{SLEPC_DIR}/lib |
| 92 | + $ENV{SLEPC_ROOT}/lib |
| 93 | + DOC "SLEPc library" |
| 94 | +) |
| 95 | + |
| 96 | +set(SLEPC_VERSION "unknown") |
| 97 | +find_file(SLEPCVERSION_H |
| 98 | + NAMES slepcversion.h |
| 99 | + PATHS |
| 100 | + $ENV{PETSC_DIR}/include/slepc |
| 101 | + $ENV{PETSC_ROOT}/include/slepc |
| 102 | + $ENV{SLEPC_DIR}/include |
| 103 | + $ENV{SLEPC_ROOT}/include |
| 104 | +) |
| 105 | +if(SLEPCVERSION_H) |
| 106 | + file(READ ${SLEPCVERSION_H} _slepcver) |
| 107 | + string(REGEX MATCH "define[ ]+SLEPC_VERSION_MAJOR[ ]+([0-9]+)" _ "${_slepcver}") |
| 108 | + set(SLEPC_VERSION_MAJOR ${CMAKE_MATCH_1}) |
| 109 | + string(REGEX MATCH "define[ ]+SLEPC_VERSION_MINOR[ ]+([0-9]+)" _ "${_slepcver}") |
| 110 | + set(SLEPC_VERSION_MINOR ${CMAKE_MATCH_1}) |
| 111 | + string(REGEX MATCH "define[ ]+SLEPC_VERSION_SUBMINOR[ ]+([0-9]+)" _ "${_slepcver}") |
| 112 | + set(SLEPC_VERSION_PATCH ${CMAKE_MATCH_1}) |
| 113 | + set(SLEPC_VERSION "${SLEPC_VERSION_MAJOR}.${SLEPC_VERSION_MINOR}.${SLEPC_VERSION_PATCH}") |
| 114 | +endif() |
| 115 | + |
| 116 | +if (NOT SLEPC_INCLUDE_DIR) |
| 117 | + message(FATAL_ERROR "PETSc has not been configured with SLEPc support.") |
43 | 118 | endif() |
| 119 | +if (NOT SLEPC_LIBRARY) |
| 120 | + message(FATAL_ERROR "PETSc has not been configured with SLEPc support.") |
| 121 | +endif() |
| 122 | +set(SLEPc_FOUND TRUE) |
| 123 | + |
| 124 | +list(APPEND PETSC_LIBRARY ${SLEPC_LIBRARY}) |
44 | 125 |
|
45 | 126 | include(FindPackageHandleStandardArgs) |
46 | 127 | find_package_handle_standard_args( |
|
0 commit comments