read directly from file
detour via dummy makefile not needed
This commit is contained in:
parent
15c498f1ed
commit
d4f439ae8b
|
@ -16,54 +16,24 @@ if (PETSC_DIR STREQUAL "")
|
||||||
message (FATAL_ERROR "PETSc location (PETSC_DIR) is not defined")
|
message (FATAL_ERROR "PETSc location (PETSC_DIR) is not defined")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
set (petsc_conf_variables "${PETSC_DIR}/lib/petsc/conf/variables")
|
file (STRINGS "${PETSC_DIR}/lib/petsc/conf/petscvariables" petsc_external_lib REGEX "PETSC_WITH_EXTERNAL_LIB = .*$?")
|
||||||
|
string (REPLACE "=" ";" petsc_external_lib "${petsc_external_lib}")
|
||||||
# Use existing variables from PETSc
|
list (GET petsc_external_lib 1 petsc_external_lib)
|
||||||
# https://github.com/jedbrown/cmake-modules/blob/master/FindPETSc.cmake
|
|
||||||
|
|
||||||
# Generate a temporary makefile to probe the PETSc configuration
|
|
||||||
# This file will be deleted once the settings from PETSc are parsed into CMake
|
|
||||||
exec_program (mktemp ARGS -d OUTPUT_VARIABLE TEMPDIR)
|
|
||||||
set (petsc_config_makefile "${TEMPDIR}/Makefile.petsc")
|
|
||||||
file (WRITE
|
|
||||||
"${petsc_config_makefile}"
|
|
||||||
"## This file was auto generated by CMake
|
|
||||||
# PETSC_DIR = ${PETSC_DIR}
|
|
||||||
SHELL = /bin/sh
|
|
||||||
include ${petsc_conf_variables}
|
|
||||||
INCLUDE_DIRS := \${PETSC_FC_INCLUDES}
|
|
||||||
LIBRARIES := \${PETSC_WITH_EXTERNAL_LIB}
|
|
||||||
includes:
|
|
||||||
\t@echo \${INCLUDE_DIRS}
|
|
||||||
extlibs:
|
|
||||||
\t@echo \${LIBRARIES}
|
|
||||||
")
|
|
||||||
|
|
||||||
# CMake will execute each target in petsc_config_makefile to acquire corresponding PETSc Variables.
|
|
||||||
find_program (MAKE_EXECUTABLE NAMES gmake make)
|
|
||||||
execute_process (COMMAND ${MAKE_EXECUTABLE} --no-print-directory -f ${petsc_config_makefile} "includes"
|
|
||||||
RESULT_VARIABLE PETSC_INCLUDES_RETURN
|
|
||||||
OUTPUT_VARIABLE petsc_includes
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
||||||
execute_process (COMMAND ${MAKE_EXECUTABLE} --no-print-directory -f ${petsc_config_makefile} "extlibs"
|
|
||||||
RESULT_VARIABLE PETSC_EXTERNAL_LIB_RETURN
|
|
||||||
OUTPUT_VARIABLE petsc_external_lib
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
||||||
|
|
||||||
file (REMOVE_RECURSE ${TEMPDIR})
|
|
||||||
|
|
||||||
# Remove duplicate compiler and linker flags
|
|
||||||
string (REGEX MATCHALL "-I([^\" ]+)" TMP_LIST "${petsc_includes}")
|
|
||||||
list (REMOVE_DUPLICATES TMP_LIST)
|
|
||||||
foreach (dir ${TMP_LIST})
|
|
||||||
set (PETSC_INCLUDES "${PETSC_INCLUDES} ${dir}")
|
|
||||||
endforeach (dir)
|
|
||||||
string (REGEX MATCHALL "-[lLW]([^\" ]+)" TMP_LIST "${petsc_external_lib}")
|
string (REGEX MATCHALL "-[lLW]([^\" ]+)" TMP_LIST "${petsc_external_lib}")
|
||||||
list (REMOVE_DUPLICATES TMP_LIST)
|
list (REMOVE_DUPLICATES TMP_LIST)
|
||||||
foreach (exlib ${TMP_LIST})
|
foreach (exlib ${TMP_LIST})
|
||||||
set (PETSC_EXTERNAL_LIB "${PETSC_EXTERNAL_LIB} ${exlib}")
|
set (PETSC_EXTERNAL_LIB "${PETSC_EXTERNAL_LIB} ${exlib}")
|
||||||
endforeach (exlib)
|
endforeach (exlib)
|
||||||
|
|
||||||
|
file (STRINGS "${PETSC_DIR}/lib/petsc/conf/petscvariables" petsc_includes REGEX "PETSC_FC_INCLUDES = .*$?")
|
||||||
|
string (REPLACE "=" ";" petsc_includes "${petsc_includes}")
|
||||||
|
list (GET petsc_includes 1 petsc_includes)
|
||||||
|
string (REGEX MATCHALL "-I([^\" ]+)" TMP_LIST "${petsc_includes}")
|
||||||
|
list (REMOVE_DUPLICATES TMP_LIST)
|
||||||
|
foreach (dir ${TMP_LIST})
|
||||||
|
set (PETSC_INCLUDES "${PETSC_INCLUDES} ${dir}")
|
||||||
|
endforeach (dir)
|
||||||
|
|
||||||
message ("PETSC_DIR:\n${PETSC_DIR}\n" )
|
message ("PETSC_DIR:\n${PETSC_DIR}\n" )
|
||||||
message ("PETSC_INCLUDES:\n${PETSC_INCLUDES}\n" )
|
message ("PETSC_INCLUDES:\n${PETSC_INCLUDES}\n" )
|
||||||
message ("PETSC_EXTERNAL_LIB:\n${PETSC_EXTERNAL_LIB}\n")
|
message ("PETSC_EXTERNAL_LIB:\n${PETSC_EXTERNAL_LIB}\n")
|
||||||
|
|
Loading…
Reference in New Issue