From f324d9a236f201f8010117477ec9dcae4b563f0d Mon Sep 17 00:00:00 2001 From: Mohcine Chraibi <m.chraibi@fz-juelich.de> Date: Wed, 4 Nov 2015 15:17:53 +0100 Subject: [PATCH] changes in jpsvis as in jpsedit -FIXME: Code does NOT compile with Qt5. Some widget-issues --- CMakeLists.txt | 260 ++++++++++++++++++++++++++---------- forms/settings.ui | 6 +- install_packages_debian.txt | 5 + 3 files changed, 198 insertions(+), 73 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 222af7a..d7de665 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,8 @@ # -DCMAKE_BUILD_TYPE:STRING=Debug (default Release) # -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON (default OFF) # -DBUILD_TESTING=ON (default OFF) +# MARK_AS_ADVANCED (BUILD_TESTING CMAKE_BUILD_TYPE=Debug) + #-------------------------------------------------------------------------- @@ -58,11 +60,16 @@ message( STATUS "JPSVIS_VERSION: " ${JPSVIS_VERSION} ) INCLUDE_DIRECTORIES( ${CMAKE_BINARY_DIR} ) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) set(CMAKE_INCLUDE_CURRENT_DIR ON) +set(README_FILE "${CMAKE_SOURCE_DIR}/README.md") +if(APPLE AND CMAKE_INSTALL_PREFIX MATCHES "/usr/local") + set(CMAKE_INSTALL_PREFIX "/Applications") +endif() +message(STATUS "${PROJECT_NAME} will be installed to ${CMAKE_INSTALL_PREFIX}") # these files compile need Cocoa (evtl. Mac specific) SET(MAC_FIX_SRC src/fix/osx_thread_fix.mm) #.mm SET(MAC_FIX_HDR src/fix/osx_thread_fix.h) #.h -set( SAMPLE_SRCS +set( SRCS # src/fix/osx_thread_fix.mm src/geometry/Building.cpp src/geometry/Crossing.cpp @@ -109,7 +116,7 @@ set( SAMPLE_SRCS forms/jpsvis.rc ) # all header files that should be treated with moc -set( SAMPLE_HDR +set( HDR # src/fix/osx_thread_fix.h src/geometry/Building.h src/geometry/Crossing.h @@ -154,24 +161,25 @@ set( SAMPLE_HDR src/MainWindow.h src/TrailPlotter.h ) - IF(APPLE) - SET(SAMPLE_SRCS ${SAMPLE_SRCS} ${MAC_FIX_SRC}) - SET(SAMPLE_HDR ${SAMPLE_HDR} ${MAC_FIX_HDR}) +IF(APPLE) + SET(SRCS ${SRCS} ${MAC_FIX_SRC}) + SET(HDR ${HDR} ${MAC_FIX_HDR}) ENDIF(APPLE) # *.ui files -set( SAMPLE_UIS +set( UIS forms/settings.ui forms/mainwindow.ui ) # and finally a resource file -set( SAMPLE_RCS +set( RCS forms/icons.qrc ) + #set(VTK_USE_HYBRID ON CACHE BOOL "doc" FORCE) find_package(VTK REQUIRED) @@ -199,68 +207,172 @@ IF (WIN32) ENDIF (WIN32) #--------------- here comes QT. Version problem (4 or 5?) -#FIND_PACKAGE( Qt4 REQUIRED ) -#FIND_PACKAGE(QT REQUIRED) - -FIND_PROGRAM(QT_QMAKE_EXECUTABLE NAMES qmake REQUIRED) -FIND_PACKAGE(Qt COMPONENTS QtXml QT_USE_QTNETWORK QtXmlPatterns REQUIRED) - +# cmake does not provide findqt5-modules + + +#=================================================== Qt4 +# FIND_PROGRAM(QT_QMAKE_EXECUTABLE NAMES qmake REQUIRED) +# FIND_PACKAGE(Qt COMPONENTS QtXml QT_USE_QTNETWORK QtXmlPatterns REQUIRED) + +# if("${DESIRED_QT_VERSION}" STREQUAL "") +# set(DESIRED_QT_VERSION "4") +# endif() + +# if( ${DESIRED_QT_VERSION} VERSION_GREATER "4" OR ${DESIRED_QT_VERSION} VERSION_LESS "3") +# message(WARNING "QT version: " ${DESIRED_QT_VERSION} " not supported") +# endif() + +# message(STATUS "DESIRED_QT_VERSION " ${DESIRED_QT_VERSION}) +# message(STATUS "QT5_INSTALLED: " ${QT5_INSTALLED}) +# message(STATUS "QT4_INSTALLED: " ${QT4_INSTALLED}) +# message(STATUS "QT3_INSTALLED: " ${QT3_INSTALLED}) + +# # by default only QtCore and QtGui modules are enabled +# # other modules must be enabled like this: +# set(QT_USE_QTXML TRUE) # needed! +# set(QT_USE_QTNETWORK TRUE) + +# # this command will generate rules that will run rcc on all files from SAMPLE_RCS +# # in result SAMPLE_RC_SRCS variable will contain paths to files produced by rcc +# if( ${QT4_INSTALLED} ) +# message(STATUS "Working with Qt4") +# QT4_ADD_RESOURCES( SAMPLE_RC_SRCS ${SAMPLE_RCS} ) +# # and finally this will run moc: +# QT4_WRAP_CPP( SAMPLE_MOC_HDRS ${SAMPLE_MOC_HDRS} ) +# # this will run uic on .ui files: +# QT4_WRAP_UI( SAMPLE_UI_HDRS ${SAMPLE_UIS} ) +# # QT4_ADD_RESOURCES(SAMPLE_RESOURCES_RCS ${SAMPLE_RCS}) +# # add some useful macros and variables +# # (QT_USE_FILE is a variable defined by FIND_PACKAGE( Qt4 ) that contains a path to CMake script) +# include( ${QT_USE_FILE} ) +# elseif( ${QT5_INSTALLED} ) +# message(STATUS "Working with Qt5") +# find_package(Qt5Widgets REQUIRED) +# qt5_wrap_ui(SAMPLE_UI_HDRS ${SAMPLE_UIS}) +# endif() +#==================================================== QT4 +message(STATUS "QT_Qmake_executable " ${QT_QMAKE_EXECUTABLE}) +if($QT_QMAKE_EXECUTABLE STREQUAL "") + FIND_PROGRAM(QT_QMAKE_EXECUTABLE NAMES qmake) + if (NOT QT_QMAKE_EXECUTABL) + message(WARNING "QT not found - abort.") + endif() +endif() +# default qt version is 4 if("${DESIRED_QT_VERSION}" STREQUAL "") set(DESIRED_QT_VERSION "4") endif() -if( ${DESIRED_QT_VERSION} VERSION_GREATER "4" OR ${DESIRED_QT_VERSION} VERSION_LESS "3") - message(WARNING "QT version: " ${DESIRED_QT_VERSION} " not supported") +# qt version > 5 or qt version < 3 are not supported +if( ${DESIRED_QT_VERSION} VERSION_GREATER 5 OR ${DESIRED_QT_VERSION} VERSION_LESS 3) + message(FATAL_ERROR "QT version " ${DESIRED_QT_VERSION} " not supported. Try 4 or 5") endif() +# find packages according to qt version +if("${DESIRED_QT_VERSION}" STREQUAL "5") + find_package(Qt5Widgets REQUIRED) +# - these find_packages are not necessary? ----------- + FIND_PACKAGE(Qt5Core REQUIRED) + FIND_PACKAGE(Qt5Gui REQUIRED) + FIND_PACKAGE(Qt5Network REQUIRED) + FIND_PACKAGE(Qt5Xml REQUIRED) + #----------------------------------------------------- + set(QT5_INSTALLED TRUE) + # # by default only QtCore and QtGui modules are enabled + # # other modules must be enabled like this: + set(QT_USE_QTXML TRUE) # needed! + set(QT_USE_QTNETWORK TRUE) + + MESSAGE(STATUS "Found Qt version: ${Qt5Core_VERSION_STRING}") +elseif("${DESIRED_QT_VERSION}" STREQUAL "4") + + # QT4_INSTALLED is set to TRUE if qt4 is found and + # QT3_INSTALLED is set to TRUE if qt3 is found. + FIND_PACKAGE(Qt COMPONENTS QtXml QT_USE_QTNETWORK QtXmlPatterns REQUIRED) + set(QT_USE_QTXML TRUE) # needed! + set(QT_USE_QTNETWORK TRUE) + +endif() + + + + message(STATUS "DESIRED_QT_VERSION " ${DESIRED_QT_VERSION}) -message(STATUS "QT5_INSTALLED: " ${QT3_INSTALLED}) -message(STATUS "QT4_INSTALLED: " ${QT4_INSTALLED}) -message(STATUS "QT3_INSTALLED: " ${QT3_INSTALLED}) - -# by default only QtCore and QtGui modules are enabled -# other modules must be enabled like this: -set(QT_USE_QTXML TRUE) # needed! -set(QT_USE_QTNETWORK TRUE) - -# this command will generate rules that will run rcc on all files from SAMPLE_RCS -# in result SAMPLE_RC_SRCS variable will contain paths to files produced by rcc -if( ${QT4_INSTALLED} ) +if(QT5_INSTALLED) + message(STATUS "QT5_INSTALLED: " ${QT5_INSTALLED}) +elseif(QT4_INSTALLED ) + message(STATUS "QT4_INSTALLED: " ${QT4_INSTALLED}) +elseif(QT3_INSTALLED) + message(STATUS "QT3_INSTALLED: " ${QT3_INSTALLED}) +else() + message(SEND_ERROR "No supported Qt found.") +endif() +# Disable automatic conversion from QString to ASCII 8-bit strings (char *) +# (Keeps code compatible with Qt/Mac/64bit) +if(APPLE) + ADD_DEFINITIONS(-DQT_NO_CAST_TO_ASCII) + # include the icns file in the target + SET(SRCS ${SRCS} ${CMAKE_CURRENT_SOURCE_DIR}/forms/icons/JPSvis.icns) +endif() + +# this command will generate rules that will run rcc on all files from RCS +# in result RC_SRCS variable will contain paths to files produced by rcc +if(${QT4_INSTALLED}) message(STATUS "Working with Qt4") - QT4_ADD_RESOURCES( SAMPLE_RC_SRCS ${SAMPLE_RCS} ) # and finally this will run moc: - QT4_WRAP_CPP( SAMPLE_MOC_HDRS ${SAMPLE_MOC_HDRS} ) + QT4_WRAP_CPP( MOC_HDRS ${MOC_HDRS} ) # this will run uic on .ui files: - QT4_WRAP_UI( SAMPLE_UI_HDRS ${SAMPLE_UIS} ) - QT4_ADD_RESOURCES(SAMPLE_RESOURCES_RCS ${SAMPLE_RCS}) - # add some useful macros and variables - # (QT_USE_FILE is a variable defined by FIND_PACKAGE( Qt4 ) that contains a path to CMake script) + QT4_WRAP_UI( UI_HDRS ${UIS} ) + QT4_ADD_RESOURCES( RCS ${RCS} ) include( ${QT_USE_FILE} ) -elseif( ${QT5_INSTALLED} ) - message(STATUS "Working with Qt5") - find_package(Qt5Widgets REQUIRED) - qt5_wrap_ui(SAMPLE_UI_HDRS ${SAMPLE_UIS}) -endif() + ADD_EXECUTABLE( JPSvis MACOSX_BUNDLE WIN32 + ${SRCS} + ${MOC_HDRS} + ${UI_HDRS} + ${RCS} + ) + TARGET_LINK_LIBRARIES( JPSvis ${QT_LIBRARIES}) +elseif( ${QT5_INSTALLED}) + message(STATUS "Working with Qt5") + # http://www.kdab.com/using-cmake-with-qt-5/ + set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}" ) + + qt5_wrap_ui( UI_HDRS ${UIS} ) + qt5_add_resources( RCS ${RCS} ) + + ADD_EXECUTABLE( JPSvis MACOSX_BUNDLE WIN32 + ${SRCS} + ${MOC_HDRS} + ${UI_HDRS} + ${RCS} + ) + qt5_use_modules(JPSvis Widgets) + target_link_libraries(JPSvis ${Qt5Widgets_LIBRARIES}) +else() + message(FATAL_ERROR "QT NOT FOUND - ABORT") +endif() + +#====================================================================== # debug where is python? -# foreach(REQUIRED_PYTHON_VERSION 2.7 2.6 2.5) -# message(STATUS "======== LOOKING FOR ${REQUIRED_PYTHON_VERSION} ========================") -# find_package ( PythonInterp ${REQUIRED_PYTHON_VERSION} REQUIRED) -# find_package ( PythonLibs ${PYTHON_VERSION_STRING} EXACT) -# #find_package ( PythonLibs ${PYTHON_VERSION_STRING} EXACT REQUIRED ) +foreach(REQUIRED_PYTHON_VERSION 2.7) # 2.6 2.5) + message(STATUS "======== LOOKING FOR ${REQUIRED_PYTHON_VERSION} ========================") + # find_package ( PythonInterp ${REQUIRED_PYTHON_VERSION} REQUIRED) + # find_package ( PythonLibs ${PYTHON_VERSION_STRING} EXACT) + # find_package ( PythonLibs ${PYTHON_VERSION_STRING} EXACT REQUIRED ) -# message(STATUS "PYTHON_EXECUTABLE:FILEPATH=${PYTHON_EXECUTABLE}") -# message(STATUS "PYTHON_LIBRARY:FILEPATH=${PYTHON_LIBRARY}") -# message(STATUS "PYTHON_INCLUDE_DIR:FILEPATH=${PYTHON_INCLUDE_DIR}") -# message(STATUS "PYTHON_FRAMEWORK_INCLUDES=${PYTHON_FRAMEWORK_INCLUDES}") -# message(STATUS "PYTHONLIBS_VERSION_STRING=${PYTHONLIBS_VERSION_STRING}") -# message(STATUS "Python_FRAMEWORKS=${Python_FRAMEWORKS}") + message(STATUS "PYTHON_EXECUTABLE:FILEPATH=${PYTHON_EXECUTABLE}") + message(STATUS "PYTHON_LIBRARY:FILEPATH=${PYTHON_LIBRARY}") + message(STATUS "PYTHON_INCLUDE_DIR:FILEPATH=${PYTHON_INCLUDE_DIR}") + message(STATUS "PYTHON_FRAMEWORK_INCLUDES=${PYTHON_FRAMEWORK_INCLUDES}") + message(STATUS "PYTHONLIBS_VERSION_STRING=${PYTHONLIBS_VERSION_STRING}") + message(STATUS "Python_FRAMEWORKS=${Python_FRAMEWORKS}") -# unset(PYTHON_EXECUTABLE CACHE) -# unset(PYTHON_LIBRARY CACHE) -# unset(PYTHON_INCLUDE_DIR CACHE) -# endforeach() + # unset(PYTHON_EXECUTABLE CACHE) + # unset(PYTHON_LIBRARY CACHE) + # unset(PYTHON_INCLUDE_DIR CACHE) +endforeach() # For Apple set the icns file containing icons @@ -271,25 +383,11 @@ IF(APPLE) # set where in the bundle to put the icns file SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/forms/icons/JPSvis.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources) # include the icns file in the target - SET(SAMPLE_SRCS ${SAMPLE_SRCS} ${CMAKE_CURRENT_SOURCE_DIR}/forms/icons/JPSvis.icns) + SET(SRCS ${SRCS} ${CMAKE_CURRENT_SOURCE_DIR}/forms/icons/JPSvis.icns) ENDIF(APPLE) -# here we instruct CMake to build JPSvis executable from all of the source files -ADD_EXECUTABLE( JPSvis MACOSX_BUNDLE WIN32 - ${SAMPLE_SRCS} - ${SAMPLE_MOC_HDRS} - ${SAMPLE_UI_HDRS} - ${SAMPLE_RESOURCES_RCS} - - # ${CMAKE_CURRENT_SOURCE_DIR}/forms/icons/JPSvis.png -# JPSvis.icns - ) - - - - -SET_TARGET_PROPERTIES(JPSvis PROPERTIES LINKER_LANGUAGE CXX) -set_property(TARGET JPSvis PROPERTY CXX_STANDARD 11) +# SET_TARGET_PROPERTIES(JPSvis PROPERTIES LINKER_LANGUAGE CXX) +# set_property(TARGET JPSvis PROPERTY CXX_STANDARD 11) # last thing we have to do is to tell CMake what libraries our executable needs, # luckily FIND_PACKAGE prepared QT_LIBRARIES variable for us: @@ -450,3 +548,25 @@ set(CPACK_PACKAGE_INSTALL_DIRECTORY "CPack Component Example") include(CPack) + +message (STATUS "bin install dir" ${BIN_INSTALL_DIR}) +set(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION "${BIN_INSTALL_DIR}") +include(InstallRequiredSystemLibraries) + +if(APPLE) + set(EXECUTABLE "${PROJECT_NAME}.app") +elseif(WIN32) + set(EXECUTABLE "${PROJECT_NAME}${CMAKE_EXECUTABLE_SUFFIX}") +else() + set(EXECUTABLE "${BIN_INSTALL_DIR}/${PROJECT_NAME}${CMAKE_EXECUTABLE_SUFFIX}") +endif() + +if(APPLE OR WIN32) + if(${QT4_INSTALLED}) + include(DeployQt4) + install_qt4_executable("${EXECUTABLE}" "qsqlite") + elseif(${QT4_INSTALLED}) + include(DeployQt5) + install_qt5_executable("${EXECUTABLE}" "qsqlite") + endif() +endif() diff --git a/forms/settings.ui b/forms/settings.ui index 52d4fdd..80896a8 100644 --- a/forms/settings.ui +++ b/forms/settings.ui @@ -146,7 +146,7 @@ <property name="title"> <string>Color</string> </property> - <widget class="QWidget" name="layoutWidget"> + <widget class="QWidget" name="layoutWidget2"> <property name="geometry"> <rect> <x>10</x> @@ -216,7 +216,7 @@ <attribute name="title"> <string>Trails/Captions</string> </attribute> - <widget class="QWidget" name="layoutWidget"> + <widget class="QWidget" name="layoutWidget3"> <property name="geometry"> <rect> <x>70</x> @@ -645,7 +645,7 @@ <attribute name="title"> <string>Locations</string> </attribute> - <widget class="QWidget" name="layoutWidget"> + <widget class="QWidget" name="layoutWidget5"> <property name="geometry"> <rect> <x>20</x> diff --git a/install_packages_debian.txt b/install_packages_debian.txt index 3a5832c..2d17b76 100644 --- a/install_packages_debian.txt +++ b/install_packages_debian.txt @@ -1,3 +1,8 @@ +MAc +brew update +# brew uninstall vtk +brew install vtk --with-qt --without-python --without-boost --build-from-source + Debian 7.7 sudo apt-get install libmgl-qt5 sudo apt-get install libvtk5-dev -- GitLab