From 6cee9eb9e683d6d4d4ec14716152e28d5c416de5 Mon Sep 17 00:00:00 2001 From: Gaute Lindkvist Date: Tue, 27 Nov 2018 09:47:44 +0100 Subject: [PATCH] #3752 Upgrade ResInsight CMake-system to support both Qt5 and Qt5 --- .gitignore | 4 ++ ApplicationCode/CMakeLists.txt | 54 +++++++++++--- .../GeoMech/OdbReader/CMakeLists.txt | 2 +- .../WellPathImportSsihub/CMakeLists.txt | 27 +++++-- .../CMakeLists.txt | 72 +++++++++++++------ CMakeLists.txt | 23 +++--- 6 files changed, 137 insertions(+), 45 deletions(-) diff --git a/.gitignore b/.gitignore index ae1ef61545..23342b74cd 100644 --- a/.gitignore +++ b/.gitignore @@ -69,3 +69,7 @@ Ankh.NoLoad /Resinsight_Host.creator /Resinsight_Host.config *.RESINSIGHT_IDX +/Fwk/VizFwk/.vs/VizFramework/v15/Solution.VC.db-wal +/Fwk/VizFwk/.vs/VizFramework/v15/Solution.VC.db-shm +/Fwk/VizFwk/.vs/VizFramework/v15/Solution.VC.db +/Fwk/VizFwk/.vs/VizFramework/v15/Browse.VC.db diff --git a/ApplicationCode/CMakeLists.txt b/ApplicationCode/CMakeLists.txt index b87664ea27..1f2530ac65 100644 --- a/ApplicationCode/CMakeLists.txt +++ b/ApplicationCode/CMakeLists.txt @@ -2,6 +2,19 @@ cmake_minimum_required (VERSION 2.8.12) project (ApplicationCode) +# Open GL +find_package( OpenGL ) + +find_package(Qt5Core CONFIG QUIET) +if (Qt5Core_FOUND) + find_package(Qt5 CONFIG REQUIRED Core Gui OpenGL Network Script Widgets) + set(QT_LIBRARIES Qt5::Core Qt5::Gui Qt5::Network Qt5::OpenGL Qt5::Script Qt5::Widgets) +else() + set (QT_COMPONENTS_REQUIRED QtCore QtGui QtMain QtOpenGl QtNetwork QtScript) + find_package(Qt4 COMPONENTS ${QT_COMPONENTS_REQUIRED} REQUIRED) + include(${QT_USE_FILE}) +endif(Qt5Core_FOUND) + # NB: The generated file is written to Cmake binary folder to avoid source tree pollution # This folder is added to include_directories CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/ApplicationCode/Adm/RiaVersionInfo.h.cmake @@ -220,9 +233,14 @@ set ( QT_MOC_HEADERS SocketInterface/RiaSocketServer.h ) -qt4_wrap_cpp( MOC_FILES_CPP ${QT_MOC_HEADERS} ) +if (Qt5Core_FOUND) + qt5_wrap_cpp(MOC_SOURCE_FILES ${QT_MOC_HEADERS} ) + qt5_wrap_ui( FORM_FILES_CPP ${QT_UI_FILES} ) +else() + qt4_wrap_cpp(MOC_SOURCE_FILES ${QT_MOC_HEADERS} ) + qt4_wrap_ui( FORM_FILES_CPP ${QT_UI_FILES} ) +endif() -qt4_wrap_ui( FORM_FILES_CPP ${QT_UI_FILES} ) # NOTE! Resources in subfolders must append to QRC_FILES using the following statement # set( QRC_FILES @@ -237,7 +255,17 @@ set( QRC_FILES ) # Runs RCC on specified files -qt4_add_resources( QRC_FILES_CPP ${QRC_FILES} ) +if ( NOT CMAKE_AUTOMOC) + if (Qt5Core_FOUND) + qt5_add_resources( QRC_FILES_CPP + ${QRC_FILES} + ) + else() + qt4_add_resources( QRC_FILES_CPP + ${QRC_FILES} + ) + endif(Qt5Core_FOUND) +endif(NOT CMAKE_AUTOMOC) # Adding resource (RC) files for Windows if ( MSVC ) @@ -273,7 +301,7 @@ endif() set( EXE_FILES ${EXE_FILES} ${CPP_SOURCES} - ${MOC_FILES_CPP} + ${MOC_SOURCE_FILES} ${FORM_FILES_CPP} ${QRC_FILES_CPP} ${WIN_RESOURCE} @@ -401,11 +429,19 @@ endif() if (MSVC) # Qt DLLs - set (QTLIBLIST QtCore QtCored QtGui QtGuid QtOpenGl QtOpenGld QtNetwork QtNetworkd QtScript QtScriptd QtScriptTools QtScriptToolsd) - foreach (qtlib ${QTLIBLIST}) - list(APPEND RI_DLL_FILENAMES ${QT_BINARY_DIR}/${qtlib}4.dll) - endforeach( qtlib ) - + if (Qt5Core_FOUND) + message(STATUS "Creating post build step for copying Qt DLLs") + foreach (qtlib ${QT_LIBRARIES}) + add_custom_command(TARGET ResInsight POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different $ $ + ) + endforeach(qtlib) + else() + set (QTLIBLIST QtCore4 QtCored4 QtGui4 QtGuid4 QtOpenGl4 QtOpenGld4 QtNetwork4 QtNetworkd4 QtScript4 QtScriptd4 QtScriptTools4 QtScriptToolsd4) + foreach (qtlib ${QTLIBLIST}) + list(APPEND RI_DLL_FILENAMES ${QT_BINARY_DIR}/${qtlib}.dll) + endforeach( qtlib ) + endif() # Odb Dlls if (RESINSIGHT_USE_ODB_API) # Find all the dlls diff --git a/ApplicationCode/GeoMech/OdbReader/CMakeLists.txt b/ApplicationCode/GeoMech/OdbReader/CMakeLists.txt index 57719f104f..94a38c2db0 100644 --- a/ApplicationCode/GeoMech/OdbReader/CMakeLists.txt +++ b/ApplicationCode/GeoMech/OdbReader/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required (VERSION 2.8) +cmake_minimum_required (VERSION 2.8.12) project (RifOdbReader) diff --git a/ApplicationCode/WellPathImportSsihub/CMakeLists.txt b/ApplicationCode/WellPathImportSsihub/CMakeLists.txt index acaa843178..96388a536c 100644 --- a/ApplicationCode/WellPathImportSsihub/CMakeLists.txt +++ b/ApplicationCode/WellPathImportSsihub/CMakeLists.txt @@ -2,8 +2,16 @@ cmake_minimum_required (VERSION 2.8.12) project (WellPathImportSsihub) +find_package(Qt5Core CONFIG QUIET) +if (Qt5Core_FOUND) + find_package(Qt5 CONFIG REQUIRED Core Network) +else() + find_package(Qt4 COMPONENTS QtCore QtNetwork REQUIRED) + include(${QT_USE_FILE}) +endif(Qt5Core_FOUND) + # These headers need to go through Qt's MOC compiler -set( QOBJECT_HEADERS +set( QT_MOC_HEADERS RiuWellImportWizard.h ) @@ -12,8 +20,13 @@ set( QT_UI_FILES ) if ( NOT CMAKE_AUTOMOC ) - qt4_wrap_cpp( MOC_FILES_CPP ${QOBJECT_HEADERS} ) - qt4_wrap_ui( FORM_FILES_CPP ${QT_UI_FILES} ) + if (Qt5Core_FOUND) + qt5_wrap_cpp(MOC_SOURCE_FILES ${QT_MOC_HEADERS} ) + qt5_wrap_ui( FORM_FILES_CPP ${QT_UI_FILES} ) + else() + qt4_wrap_cpp(MOC_SOURCE_FILES ${QT_MOC_HEADERS} ) + qt4_wrap_ui( FORM_FILES_CPP ${QT_UI_FILES} ) + endif() endif() include_directories( @@ -37,13 +50,17 @@ add_library( ${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/../FileInterface/RifJsonEncodeDecode.cpp - ${MOC_FILES_CPP} + ${MOC_SOURCE_FILES} ${FORM_FILES_CPP} ${HEADER_FILES} ) +if (Qt5Core_FOUND) + set(QT_LIBRARIES Qt5::Core Qt5::Network) +endif() + target_link_libraries ( ${PROJECT_NAME} - cafUserInterface cafPdmCvf CommonCode + cafUserInterface cafPdmCvf CommonCode ${QT_LIBRARIES} ) source_group("" FILES ${PROJECT_FILES}) diff --git a/ApplicationCode/WellPathImportSsihubTestApp/CMakeLists.txt b/ApplicationCode/WellPathImportSsihubTestApp/CMakeLists.txt index 020f3032e9..e7727c021e 100644 --- a/ApplicationCode/WellPathImportSsihubTestApp/CMakeLists.txt +++ b/ApplicationCode/WellPathImportSsihubTestApp/CMakeLists.txt @@ -3,9 +3,19 @@ cmake_minimum_required (VERSION 2.8) project ( WellPathImportSsihubTestApp ) -set (QT_COMPONENTS_REQUIRED QtCore QtGui QtMain QtOpenGl QtNetwork QtScript QtScriptTools) -find_package (Qt4 COMPONENTS ${QT_COMPONENTS_REQUIRED} REQUIRED) -include (${QT_USE_FILE}) +find_package(Qt5 CONFIG COMPONENTS Core) +if (Qt5Core_FOUND) + message(STATUS "Found Qt5") + find_package(Qt5 CONFIG REQUIRED Core Gui OpenGl Network Script ScriptTools Widgets) +else() + set (QT_COMPONENTS_REQUIRED QtCore QtGui QtMain QtOpenGl QtNetwork QtScript QtScriptTools) + find_package(Qt4 COMPONENTS ${QT_COMPONENTS_REQUIRED} REQUIRED) + include(${QT_USE_FILE}) + if (QT4_FOUND) + message(STATUS "Found Qt4") + endif(QT4_FOUND) +endif(Qt5Core_FOUND) + # Open GL find_package( OpenGL ) @@ -29,18 +39,26 @@ include_directories( set ( QT_MOC_HEADERS ) -qt4_wrap_cpp( MOC_FILES_CPP - ${QT_MOC_HEADERS} -) +if (Qt5Core_FOUND) + qt5_wrap_cpp(MOC_SOURCE_FILES ${MOC_HEADER_FILES} ) +else() + qt4_wrap_cpp(MOC_SOURCE_FILES ${MOC_HEADER_FILES} ) +endif() # Resource file set( QRC_FILES ) # Runs RCC on specified files -qt4_add_resources( QRC_FILES_CPP - ${QRC_FILES} -) +if (Qt5Core_FOUND) + qt5_add_resources( QRC_FILES_CPP + ${QRC_FILES} + ) +else() + qt4_add_resources( QRC_FILES_CPP + ${QRC_FILES} + ) +endif() # add the executable @@ -48,10 +66,14 @@ add_executable ( ${PROJECT_NAME} main.cpp TestTools.cpp TestTools.h - ${MOC_FILES_CPP} + ${MOC_SOURCE_FILES} ${QRC_FILES_CPP} ) +if (Qt5Core_FOUND) + set(QT_LIBRARIES Qt5::Core Qt5::Gui Qt5::OpenGl Qt5::Network Qt5::Script Qt5::ScriptTools Qt5::Widgets) +endif() + target_link_libraries ( ${PROJECT_NAME} cafProjectDataModel @@ -62,13 +84,23 @@ target_link_libraries ( ${PROJECT_NAME} ) # Copy Qt Dlls -if (MSVC) - foreach (qtlib ${QT_COMPONENTS_REQUIRED}) - - # Debug - execute_process(COMMAND cmake -E copy_if_different ${QT_BINARY_DIR}/${qtlib}d4.dll ${CMAKE_CURRENT_BINARY_DIR}/Debug/${qtlib}d4.dll) - - # Release - execute_process(COMMAND cmake -E copy_if_different ${QT_BINARY_DIR}/${qtlib}4.dll ${CMAKE_CURRENT_BINARY_DIR}/Release/${qtlib}4.dll) - endforeach( qtlib ) -endif(MSVC) +if (Qt5Core_FOUND) + foreach (qtlib ${QT_LIBRARIES}) + add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different $ $ + ) + endforeach(qtlib) + # Copy Qt Dlls +else() + # Copy Qt Dlls + if (MSVC) + foreach (qtlib ${QT_COMPONENTS_REQUIRED}) + + # Debug + execute_process(COMMAND cmake -E copy_if_different ${QT_BINARY_DIR}/${qtlib}d4.dll ${CMAKE_BINARY_DIR}/Debug/${qtlib}d4.dll) + + # Release + execute_process(COMMAND cmake -E copy_if_different ${QT_BINARY_DIR}/${qtlib}4.dll ${CMAKE_BINARY_DIR}/Release/${qtlib}4.dll) + endforeach( qtlib ) + endif(MSVC) +endif(Qt5Core_FOUND) diff --git a/CMakeLists.txt b/CMakeLists.txt index 044eef0717..6c00b89c5e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,6 +5,7 @@ project (ResInsight) set (VIZ_MODULES_FOLDER_NAME Fwk/VizFwk) +cmake_policy(SET CMP0020 NEW) set_property(GLOBAL PROPERTY USE_FOLDERS ON) SET(BUILD_SHARED_LIBS OFF CACHE BOOL "ERT: Build shared libraries") @@ -231,17 +232,19 @@ list(APPEND THIRD_PARTY_LIBRARIES ################################################################################ # Qt ################################################################################ -set (QT_COMPONENTS_REQUIRED QtCore QtGui QtMain QtOpenGl QtNetwork QtScript QtScriptTools) -find_package (Qt4 COMPONENTS ${QT_COMPONENTS_REQUIRED}) -if ( NOT QT4_FOUND ) - message(FATAL_ERROR "Package Qt4 is required, but not found. Please specify qmake for variable QT_QMAKE_EXECUTABLE") -endif ( NOT QT4_FOUND ) +find_package(Qt5Core CONFIG QUIET) -if (QT_VERSION_MINOR LESS 6) - message(FATAL_ERROR "Qt 4.6 is required, please specify qmake for variable QT_QMAKE_EXECUTABLE") -endif() - -include (${QT_USE_FILE}) +if (Qt5Core_FOUND) + message(STATUS "Found Qt5") + find_package (Qt5 CONFIG REQUIRED Core Widgets OpenGL Network Script ScriptTools) +else() + message(STATUS "No Qt5 found, trying Qt4") + find_package(Qt4 COMPONENTS QtCore QtGui QtMain REQUIRED) + if (QT_VERSION_MINOR LESS 6) + message(FATAL_ERROR "Qt 4.6 is required, please specify qmake for variable QT_QMAKE_EXECUTABLE") + endif() + include(${QT_USE_FILE}) +endif(Qt5Core_FOUND) # Open GL find_package( OpenGL )