diff --git a/CMakeLists.txt b/CMakeLists.txt index 9cb575640b9859a1a5b57b6abaf05a7e360bb3d6..e6791f01cfa8876a8d48b0a8363ca391cc58c1c9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -869,19 +869,25 @@ if(HAVE_SOLVER) # old-style PETSc installations (using PETSC_DIR and PETSC_ARCH) message(STATUS "Using PETSc dir: ${ENV_PETSC_DIR}") message(STATUS "Using PETSc arch: ${ENV_PETSC_ARCH}") + # find includes by parsing the petscvariables file file(STRINGS ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/conf/petscvariables PETSC_VARIABLES NEWLINE_CONSUME) - # find include directories - list(APPEND EXTERNAL_INCLUDES ${ENV_PETSC_DIR}/include) - #if(NOT HAVE_MPI) # necessary for PETSC >= 3.4 - # list(APPEND EXTERNAL_INCLUDES ${ENV_PETSC_DIR}/include/mpiuni) - #endif(NOT HAVE_MPI) - list(APPEND EXTERNAL_INCLUDES ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/include) - string(REGEX MATCH "PACKAGES_INCLUDES = [^\n\r]*" PETSC_PACKAGES_INCLUDES + # try to find PETSC_CC_INCLUDES for PETSc >= 3.4 + string(REGEX MATCH "PETSC_CC_INCLUDES = [^\n\r]*" PETSC_PACKAGES_INCLUDES ${PETSC_VARIABLES}) if(PETSC_PACKAGES_INCLUDES) + string(REPLACE "PETSC_CC_INCLUDES = " "" PETSC_PACKAGES_INCLUDES + ${PETSC_PACKAGES_INCLUDES}) + else(PETSC_PACKAGES_INCLUDES) + # try to find PETSC_PACKAGES_INCLUDES in older versions + list(APPEND EXTERNAL_INCLUDES ${ENV_PETSC_DIR}/include) + list(APPEND EXTERNAL_INCLUDES ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/include) + string(REGEX MATCH "PACKAGES_INCLUDES = [^\n\r]*" PETSC_PACKAGES_INCLUDES + ${PETSC_VARIABLES}) string(REPLACE "PACKAGES_INCLUDES = " "" PETSC_PACKAGES_INCLUDES ${PETSC_PACKAGES_INCLUDES}) + endif(PETSC_PACKAGES_INCLUDES) + if(PETSC_PACKAGES_INCLUDES) if(PETSC_PACKAGES_INCLUDES) string(REPLACE "-I" "" PETSC_PACKAGES_INCLUDES ${PETSC_PACKAGES_INCLUDES}) string(REPLACE " " ";" PETSC_PACKAGES_INCLUDES ${PETSC_PACKAGES_INCLUDES})