ResInsight/redhat/01_use_system_ert.patch
2013-04-09 18:49:26 +02:00

279 lines
9.6 KiB
Diff

commit 8f1291094f04563cefc93085b9b61c2bf3d914b8
Author: Arne Morten Kvarving <arne.morten.kvarving@sintef.no>
Date: Tue Apr 9 17:10:58 2013 +0200
Use system ERT
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e09c591..349ecf5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -4,6 +4,8 @@ project (ResInsight)
set (VIZ_MODULES_FOLDER_NAME VisualizationModules)
+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
+ ${CMAKE_SOURCE_DIR}/cmake/Modules)
# Setup the main platform defines
#-----------------------------------------------------
@@ -37,22 +39,28 @@ include (ResInsightVersion.cmake)
################################################################################
# ERT
################################################################################
-add_subdirectory(ThirdParty/Ert/devel)
-
-include_directories(
- ${CMAKE_SOURCE_DIR}/ThirdParty/Ert/devel/libecl/include/ert/ecl
- ${CMAKE_SOURCE_DIR}/ThirdParty/Ert/devel/libert_util/include/ert/util
- ${CMAKE_SOURCE_DIR}/ThirdParty/Ert/devel/libgeometry/include/ert/geometry
- ${CMAKE_SOURCE_DIR}/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well
- ${CMAKE_SOURCE_DIR}/ThirdParty/Ert/devel/libecl/include
- ${CMAKE_SOURCE_DIR}/ThirdParty/Ert/devel/libert_util/include
- ${CMAKE_SOURCE_DIR}/ThirdParty/Ert/devel/libgeometry/include
- ${CMAKE_SOURCE_DIR}/ThirdParty/Ert/devel/libecl_well/include
-
- ${CMAKE_BINARY_DIR}/ThirdParty/Ert/devel/libert_util/include/ert/util
- ${CMAKE_BINARY_DIR}/ThirdParty/Ert/devel/libert_util/include
-)
-
+find_package(ERT)
+IF(ERT_FOUND)
+ include_directories(${ERT_INCLUDE_DIR}/ert/ecl
+ ${ERT_INCLUDE_DIR}/ert/geometry
+ ${ERT_INCLUDE_DIR}/ert/ecl_well
+ ${ERT_INCLUDE_DIR}/ert/util)
+else(ERT_FOUND)
+ add_subdirectory(ThirdParty/Ert/devel)
+ include_directories(
+ ${CMAKE_SOURCE_DIR}/ThirdParty/Ert/devel/libecl/include/ert/ecl
+ ${CMAKE_SOURCE_DIR}/ThirdParty/Ert/devel/libert_util/include/ert/util
+ ${CMAKE_SOURCE_DIR}/ThirdParty/Ert/devel/libgeometry/include/ert/geometry
+ ${CMAKE_SOURCE_DIR}/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well
+ ${CMAKE_SOURCE_DIR}/ThirdParty/Ert/devel/libecl/include
+ ${CMAKE_SOURCE_DIR}/ThirdParty/Ert/devel/libert_util/include
+ ${CMAKE_SOURCE_DIR}/ThirdParty/Ert/devel/libgeometry/include
+ ${CMAKE_SOURCE_DIR}/ThirdParty/Ert/devel/libecl_well/include
+
+ ${CMAKE_BINARY_DIR}/ThirdParty/Ert/devel/libert_util/include/ert/util
+ ${CMAKE_BINARY_DIR}/ThirdParty/Ert/devel/libert_util/include
+ )
+endif(ERT_FOUND)
################################################################################
# Qt
diff --git a/cmake/Modules/FindERT.cmake b/cmake/Modules/FindERT.cmake
new file mode 100644
index 0000000..8067421
--- /dev/null
+++ b/cmake/Modules/FindERT.cmake
@@ -0,0 +1,208 @@
+# - Find the Ensemble-based Reservoir Tool (ERT)
+#
+# Set the cache variable ERT_ROOT to the install location of the ERT
+# libraries and header files.
+#
+# If found, it sets these variables:
+#
+# ERT_INCLUDE_DIRS Header file directories
+# ERT_LIBRARIES Archives and shared objects
+# ERT_CONFIG_VARS Definitions that goes in config.h
+# ERT_LINKER_FLAGS Options that must be passed to linker
+#
+# It will also add to CMAKE_C_FLAGS and CMAKE_CXX_FLAGS if necessary to
+# link with the ERT libraries.
+
+# variables to pass on to other packages
+if (FIND_QUIETLY)
+ set (ERT_QUIET "QUIET")
+else (FIND_QUIETLY)
+ set (ERT_QUIET "")
+endif (FIND_QUIETLY)
+
+# if a directory has been specified by the user, then don't go look
+# in the system directories as well
+if (ERT_ROOT)
+ set (_no_default_path "NO_DEFAULT_PATH")
+else (ERT_ROOT)
+ set (_no_default_path "")
+endif (ERT_ROOT)
+
+# ERT doesn't have any config-mode file, so we need to specify the root
+# directory in its own variable
+find_path (ERT_ECL_INCLUDE_DIR
+ NAMES "ert/ecl/ecl_util.h"
+ HINTS "${ERT_ROOT}"
+ PATHS "../ert"
+ PATH_SUFFIXES "devel/libecl/include/" "include"
+ DOC "Path to ERT Eclipse library header files"
+ ${_no_default_path}
+ )
+find_path (ERT_UTIL_INCLUDE_DIR
+ NAMES "ert/util/stringlist.h"
+ HINTS "${ERT_ROOT}"
+ PATHS "../ert"
+ PATH_SUFFIXES "devel/libert_util/include/" "include"
+ DOC "Path to ERT Eclipse library header files"
+ ${_no_default_path}
+ )
+find_path (ERT_GEN_INCLUDE_DIR
+ NAMES "ert/util/int_vector.h"
+ HINTS "${ERT_ROOT}"
+ PATHS "${PROJECT_BINARY_DIR}/../ert" "${PROJECT_BINARY_DIR}/../ert-build"
+ "${PROJECT_BINARY_DIR}/../ert/devel"
+ PATH_SUFFIXES "libert_util/include/" "include"
+ DOC "Path to ERT generated library header files"
+ ${_no_default_path}
+ )
+
+# need all of these libraries
+if (CMAKE_SIZEOF_VOID_P)
+ math (EXPR _BITS "8 * ${CMAKE_SIZEOF_VOID_P}")
+endif (CMAKE_SIZEOF_VOID_P)
+find_library (ERT_LIBRARY_ECL
+ NAMES "ecl"
+ HINTS "${ERT_ROOT}"
+ PATHS "${PROJECT_BINARY_DIR}/../ert" "${PROJECT_BINARY_DIR}/../ert-build"
+ "${PROJECT_BINARY_DIR}/../ert/devel"
+ PATH_SUFFIXES "lib" "lib${_BITS}" "lib/${CMAKE_LIBRARY_ARCHITECTURE}"
+ DOC "Path to ERT Eclipse library archive/shared object files"
+ ${_no_default_path}
+ )
+find_library (ERT_LIBRARY_GEOMETRY
+ NAMES "ert_geometry"
+ HINTS "${ERT_ROOT}"
+ PATHS "${PROJECT_BINARY_DIR}/../ert" "${PROJECT_BINARY_DIR}/../ert-build"
+ "${PROJECT_BINARY_DIR}/../ert/devel"
+ PATH_SUFFIXES "lib" "lib${_BITS}" "lib/${CMAKE_LIBRARY_ARCHITECTURE}"
+ DOC "Path to ERT Geometry library archive/shared object files"
+ ${_no_default_path}
+ )
+find_library (ERT_LIBRARY_UTIL
+ NAMES "ert_util"
+ HINTS "${ERT_ROOT}"
+ PATHS "${PROJECT_BINARY_DIR}/../ert" "${PROJECT_BINARY_DIR}/../ert-build"
+ "${PROJECT_BINARY_DIR}/../ert/devel"
+ PATH_SUFFIXES "lib" "lib${_BITS}" "lib/${CMAKE_LIBRARY_ARCHITECTURE}"
+ DOC "Path to ERT Utilities library archive/shared object files"
+ ${_no_default_path}
+ )
+# the "library" found here is actually a list of several files
+list (APPEND ERT_INCLUDE_DIR
+ ${ERT_ECL_INCLUDE_DIR}
+ ${ERT_UTIL_INCLUDE_DIR}
+ ${ERT_GEN_INCLUDE_DIR}
+ )
+list (APPEND ERT_LIBRARY
+ ${ERT_LIBRARY_ECL}
+ ${ERT_LIBRARY_GEOMETRY}
+ ${ERT_LIBRARY_UTIL}
+ )
+list (APPEND ERT_LIBRARIES ${ERT_LIBRARY})
+list (APPEND ERT_INCLUDE_DIRS ${ERT_INCLUDE_DIR})
+
+# if we didn't find any files, then don't proceed through the entire dependency list
+include (FindPackageHandleStandardArgs)
+if (ERT_INCLUDE_DIR MATCHES "-NOTFOUND" OR ERT_LIBRARIES MATCHES "-NOTFOUND")
+ find_package_handle_standard_args (ERT
+ DEFAULT_MSG
+ ERT_INCLUDE_DIR ERT_LIBRARY
+ )
+ # write unsuccessful result to the cache, as the check_c_source_compiles
+ # would do if it failed
+ set (HAVE_ERT)
+ set (HAVE_ERT "${HAVE_ERT}" CACHE INTERNAL "Did an ERT sample program compile?")
+ return ()
+endif (ERT_INCLUDE_DIR MATCHES "-NOTFOUND" OR ERT_LIBRARIES MATCHES "-NOTFOUND")
+
+# these system variables are probed for, and used in HEADER files (sic)
+list (APPEND ERT_CONFIG_VARS
+ HAVE_ISFINITE
+ HAVE_GLOB
+ HAVE_FORK
+ HAVE_GETUID
+ HAVE_LOCKF
+ HAVE_OPENDIR
+ HAVE_PROC
+ HAVE_READLINKAT
+ HAVE_SYMLINK
+ HAVE_VA_COPY
+ )
+include (CheckSymbolExists)
+include (CheckFunctionExists)
+check_symbol_exists (isfinite math.h HAVE_ISFINITE)
+check_function_exists (glob HAVE_GLOB)
+check_function_exists (fork HAVE_FORK)
+check_function_exists (getuid HAVE_GETUID)
+check_function_exists (lockf HAVE_LOCKF)
+check_function_exists (opendir HAVE_OPENDIR)
+check_function_exists (readlinkat HAVE_READLINKAT)
+check_function_exists (symlink HAVE_SYMLINK)
+check_symbol_exists (va_copy stdarg.h HAVE_VA_COPY)
+
+if (UNIX)
+ set (HAVE_PROC 1)
+else (UNIX)
+ set (HAVE_PROC)
+endif (UNIX)
+
+# dependencies
+
+# compression library
+find_package (ZLIB ${ERT_QUIET})
+if (ZLIB_FOUND)
+ list (APPEND ERT_INCLUDE_DIRS ${ZLIB_INCLUDE_DIRS})
+ list (APPEND ERT_LIBRARIES ${ZLIB_LIBRARIES})
+endif (ZLIB_FOUND)
+
+# numerics
+find_package (BLAS ${ERT_QUIET})
+if (BLAS_FOUND)
+ list (APPEND ERT_INCLUDE_DIRS ${BLAS_INCLUDE_DIRS})
+ list (APPEND ERT_LIBRARIES ${BLAS_LIBRARIES})
+ list (APPEND ERT_LINKER_FLAGS ${BLAS_LINKER_FLAGS})
+endif (BLAS_FOUND)
+find_package (LAPACK ${ERT_QUIET})
+if (LAPACK_FOUND)
+ list (APPEND ERT_INCLUDE_DIRS ${LAPACK_INCLUDE_DIRS})
+ list (APPEND ERT_LIBRARIES ${LAPACK_LIBRARIES})
+ list (APPEND ERT_LINKER_FLAGS ${LAPACK_LINKER_FLAGS})
+endif (LAPACK_FOUND)
+
+# math library (should exist on all unices; automatically linked on Windows)
+if (UNIX)
+ find_library (MATH_LIBRARY
+ NAMES "m"
+ )
+ list (APPEND ERT_LIBRARIES ${MATH_LIBRARY})
+endif (UNIX)
+
+# see if we can compile a minimum example
+# CMake logical test doesn't handle lists (sic)
+if (NOT (ERT_INCLUDE_DIR MATCHES "-NOTFOUND" OR ERT_LIBRARIES MATCHES "-NOTFOUND"))
+ include (CMakePushCheckState)
+ include (CheckCSourceCompiles)
+ cmake_push_check_state ()
+ set (CMAKE_REQUIRED_INCLUDES ${ERT_INCLUDE_DIR})
+ set (CMAKE_REQUIRED_LIBRARIES ${ERT_LIBRARIES})
+ check_c_source_compiles (
+ "#include <ert/ecl/ecl_util.h>
+int main (void) {
+ int sz;
+ sz = ecl_util_get_sizeof_ctype (ECL_INT_TYPE);
+ return 0;
+}" HAVE_ERT)
+ cmake_pop_check_state ()
+else (NOT (ERT_INCLUDE_DIR MATCHES "-NOTFOUND" OR ERT_LIBRARIES MATCHES "-NOTFOUND"))
+ # write unsuccessful result to the cache, as the check_c_source_compiles
+ # would do if it failed
+ set (HAVE_ERT)
+ set (HAVE_ERT "${HAVE_ERT}" CACHE INTERNAL "Did an ERT sample program compile?")
+endif (NOT (ERT_INCLUDE_DIR MATCHES "-NOTFOUND" OR ERT_LIBRARIES MATCHES "-NOTFOUND"))
+
+# if the test program didn't compile, but was required to do so, bail
+# out now and display an error; otherwise limp on
+find_package_handle_standard_args (ERT
+ DEFAULT_MSG
+ ERT_INCLUDE_DIR ERT_LIBRARY HAVE_ERT
+ )