diff --git a/CMakeLists.txt b/CMakeLists.txt index 051cf633241da86ec46313444b913d3cec45feac..46b4d5eb07dc7557e5be7f0f451ccd426ca79d19 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,7 +44,7 @@ option(ENABLE_NETGEN "Enable Netgen mesh generator" ON) option(ENABLE_OCC "Enable Open CASCADE geometrical models" ON) option(ENABLE_OSMESA "Use OSMesa for offscreen rendering" OFF) option(ENABLE_PARSER "Build the GEO file parser" ON) -option(ENABLE_PETSC "Enable PETSc linear algebra solvers" OFF) +option(ENABLE_PETSC "Enable PETSc linear algebra solvers" ON) option(ENABLE_PLUGINS "Build the post-processing plugins" ON) option(ENABLE_POST "Build the post-processing module" ON) option(ENABLE_QT "Build QT GUI" OFF) @@ -463,13 +463,17 @@ if(ENABLE_GMM) endif(ENABLE_GMM) if(ENABLE_KBIPACK) - add_subdirectory(contrib/kbipack) - include_directories(contrib/kbipack) - set_config_option(HAVE_KBIPACK "Kbipack") find_library(GMP_LIB NAMES gmp) if(GMP_LIB) - set_config_option(HAVE_GMP "GMP") - list(APPEND EXTERNAL_LIBRARIES ${GMP_LIB}) + find_path(GMP_INC "gmp.h" PATH_SUFFIXES src include) + if(GMP_INC) + set_config_option(HAVE_GMP "GMP") + list(APPEND EXTERNAL_LIBRARIES ${GMP_LIB}) + list(APPEND EXTERNAL_INCLUDES ${GMP_INC}) + add_subdirectory(contrib/kbipack) + include_directories(contrib/kbipack) + set_config_option(HAVE_KBIPACK "Kbipack") + endif(GMP_INC) endif(GMP_LIB) endif(ENABLE_KBIPACK) @@ -479,17 +483,6 @@ if(ENABLE_MATHEX) set_config_option(HAVE_MATHEX "MathEx") endif(ENABLE_MATHEX) -if(ENABLE_MPI) - find_package(MPI) - if(MPI_FOUND) - set_config_option(HAVE_MPI "MPI") - list(APPEND EXTERNAL_INCLUDES ${MPI_INCLUDE_DIR}) - list(APPEND EXTERNAL_LIBRARIES ${MPI_LIBRARIES}) - include(CMakeForceCompiler) - cmake_force_cxx_compiler(${MPI_COMPILER} "MPI C++ Compiler") - endif(MPI_FOUND) -endif(ENABLE_MPI) - if(ENABLE_MPEG_ENCODE) add_subdirectory(contrib/mpeg_encode) include_directories(contrib/mpeg_encode/headers) @@ -612,6 +605,7 @@ if(ENABLE_PETSC) set(ENV_PETSC_ARCH $ENV{PETSC_ARCH}) if(EXISTS ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/conf/petscvariables) set_config_option(HAVE_PETSC "PETSc") + set_config_option(HAVE_MPI "MPI") file(STRINGS ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/conf/petscvariables PETSC_VARIABLES NEWLINE_CONSUME) # find include directories @@ -621,26 +615,31 @@ if(ENABLE_PETSC) ${PETSC_VARIABLES}) string(REPLACE "PACKAGES_INCLUDES = " "" PETSC_PACKAGES_INCLUDES ${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}) foreach(VAR ${PETSC_PACKAGES_INCLUDES}) list(APPEND EXTERNAL_INCLUDES ${VAR}) endforeach(VAR) - endif (PETSC_PACKAGES_INCLUDES) + endif(PETSC_PACKAGES_INCLUDES) # find libraries (<= 3.0) set(PETSC_LIBS_REQUIRED petscksp petscdm petscmat petscvec petsc) find_all_libraries(PETSC_LIBS PETSC_LIBS_REQUIRED ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/lib "") - # petsc 3.1 create only one library (libpetsc) - if (NOT PETSC_LIBS) - find_library (PETSC_LIBS petsc PATHS ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/lib) + # petsc 3.1 creates only one library (libpetsc) + if(NOT PETSC_LIBS) + find_library(PETSC_LIBS petsc PATHS ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/lib) endif(NOT PETSC_LIBS) - string(REGEX MATCH "PACKAGES_LIBS = [^\n\r]*" PETSC_PACKAGES_LIBS - ${PETSC_VARIABLES}) - string(REPLACE "PACKAGES_LIBS = " "" PETSC_PACKAGES_LIBS - ${PETSC_PACKAGES_LIBS}) - list(APPEND EXTERNAL_LIBRARIES ${PETSC_LIBS} "${PETSC_PACKAGES_LIBS}") + list(APPEND EXTERNAL_LIBRARIES ${PETSC_LIBS}) + # find additional libraries to link with + string(REGEX MATCH "PACKAGES_LIBS = [^\n\r]*" PLIBS ${PETSC_VARIABLES}) + string(REPLACE "PACKAGES_LIBS = " "" PLIBS ${PLIBS}) + string(STRIP ${PLIBS} PLIBS) + list(APPEND EXTERNAL_LIBRARIES "${PLIBS}") + string(REGEX MATCH "PCC_LINKER_LIBS = [^\n\r]*" LLIBS ${PETSC_VARIABLES}) + string(REPLACE "PCC_LINKER_LIBS = " "" LLIBS ${LLIBS}) + string(STRIP ${LLIBS} LLIBS) + list(APPEND EXTERNAL_LIBRARIES "${LLIBS}") endif(EXISTS ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/conf/petscvariables) endif(ENABLE_PETSC) @@ -654,6 +653,18 @@ if(HAVE_PETSC AND ENABLE_SLEPC) endif(SLEPC_LIB) endif(HAVE_PETSC AND ENABLE_SLEPC) +if(ENABLE_MPI AND NOT HAVE_PETSC) + # if we use PETSc we assume that we use petsc's mpi config + find_package(MPI) + if(MPI_FOUND) + set_config_option(HAVE_MPI "MPI") + list(APPEND EXTERNAL_INCLUDES ${MPI_INCLUDE_DIR}) + list(APPEND EXTERNAL_LIBRARIES ${MPI_LIBRARIES}) + include(CMakeForceCompiler) + cmake_force_cxx_compiler(${MPI_COMPILER} "MPI C++ Compiler") + endif(MPI_FOUND) +endif(ENABLE_MPI AND NOT HAVE_PETSC) + if(ENABLE_OCC) if(WIN32) set(OCC_SYS_NAME win32) @@ -684,8 +695,6 @@ if(ENABLE_OCC) # unset(OCC_LIB CACHE) # cleaner, but only available in cmake >= 2.6.4 endforeach(OCC) list(LENGTH OCC_LIBS NUM_OCC_LIBS) - - if(NUM_OCC_LIBS EQUAL NUM_OCC_LIBS_REQUIRED) find_path(OCC_INC "BRep_Tool.hxx" PATHS ENV CASROOT PATH_SUFFIXES inc include opencascade)