CMAKE_MINIMUM_REQUIRED(VERSION 3.10)
SET(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules")
PROJECT(ElmerGUI CXX C)
SET(APPLICATION_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/netgen/libsrc/interface")
IF(APPLE)
include(cmake/Modules/FindOpenCasCade.cmake)
# add_subdirectory(cmake/Modules)
ENDIF()
SET(WITH_PYTHONQT FALSE CACHE BOOL "ElmerGUI: Use PythonQt for scripting in post processor?")
SET(WITH_OCC FALSE CACHE BOOL "ElmerGUI: Use OpenCASCADE for importing CAD files? Needs VTK.")
SET(WITH_MATC FALSE CACHE BOOL "ElmerGUI: Use MATC for internal operations in postprocessing?")
SET(WITH_PARAVIEW FALSE CACHE BOOL "ElmerGUI: Use ParaView for postprocessing?")
SET(WITH_VTK FALSE CACHE BOOL "ElmerGUI: Use VTK for postprocessing?")
SET(WITH_QWT TRUE CACHE BOOL "ElmerGUI: Use QWT for convergence monitor?")
SET(WITH_ELMERGUILOGGER FALSE CACHE BOOL "ElmerGUI: Include ElmerGUIlogger")
IF( NOT WITH_QT6)
find_package(Qt5 COMPONENTS Widgets)
if (Qt5_FOUND)
set(WITH_QT5 TRUE CACHE BOOL "ElmerGUI: Use Qt5")
endif()
ENDIF()
IF(WITH_QT6)
MESSAGE(STATUS "------------------------------------------------")
IF(WIN32)
MESSAGE(STATUS "Qt6 Windows packaging")
SET(QT6_PKG_LIST Qt6OpenGL Qt6OpenGLWidgets Qt6Qml Qt6Xml Qt6Gui Qt6Core Qt6Svg Qt6Widgets Qt6PrintSupport)
ELSE()
MESSAGE(STATUS "Qt6 non-Windows packaging")
SET(QT6_PKG_LIST Qt6OpenGL Qt6Qml Qt6Xml Qt6Gui Qt6Core Qt6Svg Qt6PrintSupport Qt6OpenGLWidgets)
ENDIF()
FOREACH(_pkg ${QT6_PKG_LIST})
FIND_PACKAGE(${_pkg} PATHS ${QT6_PATH} REQUIRED)
ENDFOREACH()
ADD_DEFINITIONS(-DWITH_QT6)
MESSAGE(STATUS " [ElmerGUI] Qt6: " ${Qt6_FOUND})
MESSAGE(STATUS " [ElmerGUI] Qt6 Libraries: ${Qt6OpenGL_LIBRARIES} ${Qt6OpenGLWidgets_LIBRARIES} ${Qt6Qml_LIBRARIES} ${Qt6Xml_LIBRARIES} ${Qt6Gui_LIBRARIES} ${Qt6Core_LIBRARIES}")
MESSAGE(STATUS "------------------------------------------------")
set(WITH_QT5 FALSE CACHE BOOL "" FORCE)
ELSEIF(WITH_QT5)
MESSAGE(STATUS "------------------------------------------------")
IF(WIN32)
MESSAGE(STATUS "Qt5 Windows packaging")
SET(QT5_PKG_LIST Qt5OpenGL Qt5Xml Qt5Script Qt5Gui Qt5Core Qt5Svg Qt5Widgets Qt5PrintSupport)
ELSE()
MESSAGE(STATUS "Qt5 non-Windows packaging")
SET(QT5_PKG_LIST Qt5OpenGL Qt5Xml Qt5Script Qt5Gui Qt5Core Qt5Svg Qt5PrintSupport)
ENDIF()
FOREACH(_pkg ${QT5_PKG_LIST})
FIND_PACKAGE(${_pkg} PATHS ${QT5_PATH} REQUIRED)
ENDFOREACH()
ADD_DEFINITIONS(-DWITH_QT5)
MESSAGE(STATUS " [ElmerGUI] Qt5: " ${Qt5_FOUND})
MESSAGE(STATUS " [ElmerGUI] Qt5 Libraries: ${Qt5OpenGL_LIBRARIES} ${Qt5Xml_LIBRARIES} ${Qt5Script_LIBRARIES} ${Qt5Gui_LIBRARIES} ${Qt5Core_LIBRARIES}")
MESSAGE(STATUS "------------------------------------------------")
ELSE()
MESSAGE(STATUS "------------------------------------------------")
FIND_PACKAGE(Qt4 COMPONENTS QtOpenGL QtXml QtScript QtGui QtCore REQUIRED)
MESSAGE(STATUS " [ElmerGUI] Qt4: " ${Qt4_FOUND})
MESSAGE(STATUS " [ElmerGUI] Qt4_LIBRARIES: " ${Qt4_LIBRARY})
MESSAGE(STATUS "------------------------------------------------")
ENDIF()
IF(WITH_PYTHONQT)
IF(WITH_QT5 OR WITH_QT6)
MESSAGE(FATAL_ERROR "PythonQt is not supported for QT5 or QT6")
ENDIF()
ADD_DEFINITIONS(-DEG_PYTHONQT)
ADD_SUBDIRECTORY(PythonQt)
SET(APPLICATION_INCLUDE_DIRS "${APPLICATION_INCLUDE_DIRS};${CMAKE_CURRENT_SOURCE_DIR}/PythonQt/src")
ENDIF()
SET_DIRECTORY_PROPERTIES(Application INCLUDE_DIRECTORIES "${APPLICATION_INCLUDE_DIRS}")
IF(WITH_QWT)
ADD_DEFINITIONS(-DEG_QWT)
FIND_PACKAGE(Qwt REQUIRED)
# FIND_PATH(QWT_INCLUDE_DIR qwt.h)
# SET(QWT_INCLUDE_DIR "C:/msys64/mingw64/include/qwt-qt5")
# SET(QWT_LIBRARY "C:/msys64/mingw64/lib/libqwt-qt5.dll.a")
MESSAGE(STATUS " [ElmerGUI] Qwt: " ${Qwt_FOUND})
MESSAGE(STATUS " [ElmerGUI] QWT_LIBRARY: " ${QWT_LIBRARY})
MESSAGE(STATUS " [ElmerGUI] QWT_INCLUDE_DIR: " ${QWT_INCLUDE_DIR})
MESSAGE(STATUS "------------------------------------------------")
string(FIND "${QWT_LIBRARY}" "-qt6" QWT_QT_OUT)
if( (QWT_QT_OUT GREATER 0) AND (NOT WITH_QT6))
MESSAGE(WARNING " [ElmerGUI] Qt version mismatch with Qwt")
MESSAGE(STATUS "------------------------------------------------")
endif()
string(FIND "${QWT_LIBRARY}" "-qt5" QWT_QT_OUT)
if( (QWT_QT_OUT GREATER 0) AND (NOT WITH_QT5))
MESSAGE(WARNING " [ElmerGUI] Qt version mismatch with Qwt")
MESSAGE(STATUS "------------------------------------------------")
endif()
string(FIND "${QWT_LIBRARY}" "-qt4" QWT_QT_OUT)
if( (QWT_QT_OUT GREATER 0) AND (WITH_QT5 OR WITH_QT6))
MESSAGE(WARNING " [ElmerGUI] Qt version mismatch with Qwt")
MESSAGE(STATUS "------------------------------------------------")
endif()
ENDIF()
IF(WITH_OCC)
IF(NOT WITH_VTK)
SET(WITHOUT_VTKPOST TRUE)
ENDIF()
SET(WITH_VTK TRUE)
ADD_DEFINITIONS(-DEG_OCC)
FIND_PACKAGE(OpenCASCADE)
IF(OpenCASCADE_FOUND)
MESSAGE(STATUS " [ElmerGUI] OpenCASCADE: " ${OpenCASCADE_FOUND})
MESSAGE(STATUS " [ElmerGUI] OpenCASCADE_VERSION: " ${OpenCASCADE_VERSION})
MESSAGE(STATUS " [ElmerGUI] OpenCASCADE_INCLUDE_DIR: " ${OpenCASCADE_INCLUDE_DIR})
# only link to available libraries
SET(ELMER_USED_OCC_LIBS "TKernel;TKMath;TKG3d;TKG2d;TKBRep;TKSTEP;TKMesh;TKIGES;TKDEIGES;TKG2d;TKGeomBase;TKBool;TKBO;TKGeomAlgo;TKPrim;TKShHealing;TKSTEP209;TKSTEPAttr;TKSTEPBase;TKDESTEP;TKTopAlgo;TKXSBase")
SET(ELMER_AVAILABLE_OCC_LIBS "")
FOREACH(_lib IN LISTS ELMER_USED_OCC_LIBS)
LIST(FIND OpenCASCADE_LIBRARIES ${_lib} _index)
IF(NOT ${_index} EQUAL -1)
LIST(APPEND ELMER_AVAILABLE_OCC_LIBS ${_lib})
ENDIF()
ENDFOREACH()
SET(ELMER_OCC_LIBS "${ELMER_AVAILABLE_OCC_LIBS}" CACHE INTERNAL "")
MESSAGE(STATUS " [ElmerGUI] ELMER_OCC_LIBS: " "${ELMER_OCC_LIBS}")
MESSAGE(STATUS "------------------------------------------------")
ELSE()
FIND_PACKAGE(OCE REQUIRED)
MESSAGE(STATUS " [ElmerGUI] OCE: " ${OCE_FOUND})
MESSAGE(STATUS " [ElmerGUI] OCE_VERSION: " ${OCE_VERSION})
MESSAGE(STATUS " [ElmerGUI] OCE_INCLUDE_DIRS: " ${OCE_INCLUDE_DIRS})
SET(ELMER_OCC_LIBS "TKernel;TKMath;TKG3d;TKG2d;TKBRep;TKSTEP;TKMesh;TKIGES;TKG2d;TKGeomBase;TKBool;TKBO;TKGeomAlgo;TKPrim;TKShHealing;TKSTEP209;TKSTEPAttr;TKSTEPBase;TKTopAlgo;TKXSBase" CACHE INTERNAL "")
MESSAGE(STATUS " [ElmerGUI] ELMER_OCC_LIBS: " "${ELMER_OCC_LIBS}")
MESSAGE(STATUS "------------------------------------------------")
SET(OpenCASCADE_INCLUDE_DIR ${OCE_INCLUDE_DIRS} CACHE PATH "Include dir for OCCT or OCE")
ENDIF()
ENDIF()
IF(WITH_VTK)
FIND_PACKAGE(VTK REQUIRED)
INCLUDE(testVTKcapabilities)
MESSAGE(STATUS " [ElmerGUI] VTK version: " ${VTK_VERSION})
MESSAGE(STATUS " [ElmerGUI] VTK_LIBS: " "${VTK_LIBRARIES}")
MESSAGE(STATUS " [ElmerGUI] VTK_INCLUDE_DIRS: " "${VTK_INCLUDE_DIRS}")
MESSAGE(STATUS " [ElmerGUI] VTK_QT_VERSION: " ${VTK_QT_VERSION})
MESSAGE(STATUS "------------------------------------------------")
if((${VTK_QT_VERSION} EQUAL 6) AND (NOT WITH_QT6))
MESSAGE(WARNING " [ElmerGUI] Qt version mismatch with VTK_QT_VERSION")
MESSAGE(STATUS "------------------------------------------------")
elseif((${VTK_QT_VERSION} EQUAL 5) AND (NOT WITH_QT5))
MESSAGE(WARNING " [ElmerGUI] Qt version mismatch with VTK_QT_VERSION")
MESSAGE(STATUS "------------------------------------------------")
elseif((${VTK_QT_VERSION} EQUAL 4) AND (WITH_QT5 OR WITH_QT6))
MESSAGE(WARNING " [ElmerGUI] Qt version mismatch with VTK_QT_VERSION")
MESSAGE(STATUS "------------------------------------------------")
endif()
ENDIF()
IF(WITH_MATC)
ADD_DEFINITIONS(-DEG_MATC)
ADD_SUBDIRECTORY(matc)
MESSAGE(STATUS " [ElmerGUI] Compiling in matc")
MESSAGE(STATUS "------------------------------------------------")
ENDIF()
IF(WITH_PARAVIEW)
ADD_DEFINITIONS(-DEG_PARAVIEW)
ENDIF()
ADD_SUBDIRECTORY(netgen)
ADD_SUBDIRECTORY(Application)
IF(WIN32)
INCLUDE(cmake/windows_bundle.cmake)
ENDIF(WIN32)
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/LICENSES DESTINATION "share/ElmerGUI/license_texts" COMPONENT "elmergui")
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/GPL-2 DESTINATION "share/ElmerGUI/license_texts" COMPONENT "elmergui")
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/GPL_EXCEPTION DESTINATION "share/ElmerGUI/license_texts" COMPONENT "elmergui")
INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/samples DESTINATION "share/ElmerGUI" COMPONENT "elmergui_samples")