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")