diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index df974a878ef41d0b778244c0e1cb763ebbb4a373..95d8d1d6213efced02bf0a8b8a896fd6b4157236 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -43,56 +43,31 @@ cppcheck: artifacts: paths: - cppcheck.log - - -.VS2015-64-bit-shared-apps: + +VS2017-64-bit-shared-apps: variables: - BUILD_PLATFORM: "VS2015" + BUILD_PLATFORM: "VS2017" ARCHITECTURE: "x64" SHARED: "TRUE" APPS: "ON" script: "CI\\Windows.bat" tags: - - VS2015 - artifacts: - paths: - - build-release/*.exe - -.VS2015-32-bit-shared-apps: - variables: - BUILD_PLATFORM: "VS2015" - ARCHITECTURE: "x32" - SHARED: "TRUE" - APPS: "ON" - script: "CI\\Windows.bat" - tags: - - VS2015 + - VS2017 + - Qt5101 artifacts: paths: - - build-release/*.exe - -.VS2015-64-bit-static-apps: + - build-release/*.exe + +VS2017-64-bit-static-apps: variables: - BUILD_PLATFORM: "VS2015" + BUILD_PLATFORM: "VS2017" ARCHITECTURE: "x64" SHARED: "FALSE" APPS: "ON" script: "CI\\Windows.bat" tags: - - VS2015 - artifacts: - paths: - - build-release/*.exe - -.VS2015-32-bit-static-apps: - variables: - BUILD_PLATFORM: "VS2015" - ARCHITECTURE: "x32" - SHARED: "FALSE" - APPS: "ON" - script: "CI\\Windows.bat" - tags: - - VS2015 + - VS2017 + - Qt5101 artifacts: paths: - build-release/*.exe diff --git a/CI/Windows.bat b/CI/Windows.bat index 669c18de70626f78d2a769d6f33ec7a551b3f2eb..f3806e9a4ae90b962efe1c1e90d08ec5b4933bd8 100644 --- a/CI/Windows.bat +++ b/CI/Windows.bat @@ -21,7 +21,6 @@ IF "%BUILD_PLATFORM%" == "VS2012" ( set GTESTVERSION=gtest-1.6.0 set GENERATOR=Visual Studio 11%ARCH_VS% set VS_PATH="C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.com" - set QT_VERSION= IF "%ARCHITECTURE%" == "x64" ( set QT_INSTALL_PATH=E:\Qt\4.8.5-vs2012-%STRING_ARCH%\ set QT_BASE_CONFIG=-DQT_QMAKE_EXECUTABLE=E:\Qt\4.8.5-vs2012-%STRING_ARCH%\bin\qmake.exe @@ -38,7 +37,6 @@ IF "%BUILD_PLATFORM%" == "VS2013" ( set GTESTVERSION=gtest-1.6.0 set GENERATOR=Visual Studio 12%ARCH_VS% set VS_PATH="C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.com" - set QT_VERSION= IF "%ARCHITECTURE%" == "x64" ( set QT_INSTALL_PATH=E:\Qt\Qt5.3.1-vs2013-%STRING_ARCH%\5.3\msvc2013_64_opengl set QT_BASE_CONFIG=-DQT5_INSTALL_PATH=E:\Qt\Qt5.3.1-vs2013-%STRING_ARCH%\5.3\msvc2013_64_opengl @@ -56,7 +54,6 @@ IF "%BUILD_PLATFORM%" == "VS2015" ( set GENERATOR=Visual Studio 14%ARCH_VS% set VS_PATH="C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.com" - set QT_VERSION= IF "%ARCHITECTURE%" == "x64" ( set QT_INSTALL_PATH=E:\Qt\Qt5.6.0-vs2015-%STRING_ARCH%\5.6\msvc2015_64 set QT_BASE_CONFIG=-DQT5_INSTALL_PATH=E:\Qt\Qt5.6.0-vs2015-%STRING_ARCH%\5.6\msvc2015_64 @@ -75,7 +72,6 @@ IF "%BUILD_PLATFORM%" == "VS2017" ( set GENERATOR=Visual Studio 15%ARCH_VS% set VS_PATH="C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\devenv.com" - set QT_VERSION= IF "%ARCHITECTURE%" == "x64" ( set QT_INSTALL_PATH=E:\Qt\Qt5.10.1\5.10.1\msvc2017_64 set QT_BASE_CONFIG=-DQT5_INSTALL_PATH=E:\Qt\Qt5.10.1\5.10.1\msvc2017_64 @@ -93,14 +89,7 @@ IF "%APPS%" == "ON" ( REM Copy the platform plugins subdirectory for the qt plugins required to run the gui apps xcopy /Y %QT_INSTALL_PATH%\plugins\platforms Build\plugins\platforms - - IF "%BUILD_PLATFORM%" == "VS2015" ( - set CMAKE_CONFIGURATION=%QT_BASE_CONFIG% -DGLUT_INCLUDE_DIR="%LIBPATH%\%ARCHITECTURE%\freeglut-3.0.0\include" -DGLUT_glut_LIBRARY="%LIBPATH%\%ARCHITECTURE%\freeglut-3.0.0\lib\freeglut.lib" - - - ) ELSE ( - set CMAKE_CONFIGURATION=%QT_BASE_CONFIG% -DGLUT_INCLUDE_DIR="%LIBPATH%\%ARCHITECTURE%\freeglut-2.8.1\include" -DGLUT_glut_LIBRARY="%LIBPATH%\%ARCHITECTURE%\freeglut-2.8.1\lib\freeglut.lib" - ) + set CMAKE_CONFIGURATION=%QT_BASE_CONFIG% ) ELSE ( set STRING_APPS=-no-apps set CMAKE_CONFIGURATION= diff --git a/CMakeLists.txt b/CMakeLists.txt index 47e75aca08b9aa0fd43db5b219106c592a841666..fec71a5eccc3d23e53373790da07b686626145b4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,6 +41,7 @@ if(${PROJECT_NAME} MATCHES "OpenMesh") endif() include (ACGOutput) +include(ACGQt) # ======================================================================== # Definitions diff --git a/cmake/ACGCommon.cmake b/cmake/ACGCommon.cmake index c7220b823ed1227e421b815e359029e9a9da169c..2f0ecd2a79f92eb9b29eae8c3eb6587bd541d1ce 100644 --- a/cmake/ACGCommon.cmake +++ b/cmake/ACGCommon.cmake @@ -3,10 +3,10 @@ if (EXISTS ${CMAKE_SOURCE_DIR}/${CMAKE_PROJECT_NAME}.cmake) endif () # prevent build in source directory -if ("${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_SOURCE_DIR}") - message (SEND_ERROR "Building in the source directory is not supported.") - message (FATAL_ERROR "Please remove the created \"CMakeCache.txt\" file, the \"CMakeFiles\" directory and create a build directory and call \"${CMAKE_COMMAND} \".") -endif ("${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_SOURCE_DIR}") + if ("${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_SOURCE_DIR}") + message (SEND_ERROR "Building in the source directory is not supported.") + message (FATAL_ERROR "Please remove the created \"CMakeCache.txt\" file, the \"CMakeFiles\" directory and create a build directory and call \"${CMAKE_COMMAND} \".") + endif ("${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_SOURCE_DIR}") # allow only Debug and Release builds set (CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "") @@ -132,7 +132,7 @@ macro (acg_set_target_props target) #BUILD_WITH_INSTALL_RPATH 1 SKIP_BUILD_RPATH 0 ) - endif(NOT (CMAKE_MAJOR_VERSION LESS 3)) + endif(NOT (CMAKE_MAJOR_VERSION LESS 3) ) elseif (NOT APPLE) set_target_properties ( @@ -152,155 +152,6 @@ include (ACGCompiler) # define INCLUDE_TEMPLATES for everything we build add_definitions (-DINCLUDE_TEMPLATES) -#unset cached qt variables which are set by all qt versions. version is the major number of the qt version (e.g. 4 or 5, not 4.8) -macro (acg_unset_qt_shared_variables version) - if (ACG_INTERNAL_QT_LAST_VERSION) - if (NOT ${ACG_INTERNAL_QT_LAST_VERSION} EQUAL ${version}) - unset(QT_BINARY_DIR) - unset(QT_PLUGINS_DIR) - unset(ACG_INTERNAL_QT_LAST_VERSION) - endif() - endif() - set (ACG_INTERNAL_QT_LAST_VERSION "${version}" CACHE INTERNAL "Qt Version, which was used on the last time") -endmacro() - -# look for selected qt dependencies -macro (acg_qt4) - if (NOT QT4_FOUND) - acg_unset_qt_shared_variables(4) - find_package (Qt4 COMPONENTS QtCore QtGui ${ARGN}) - - set (QT_USE_QTOPENGL 1) - set (QT_USE_QTNETWORK 1) - set (QT_USE_QTSCRIPT 1) - set (QT_USE_QTSQL 1) - set (QT_USE_QTXML 1) - set (QT_USE_QTXMLPATTERNS 1) - set (QT_USE_QTHELP 1) - set (QT_USE_QTWEBKIT 1) - set (QT_USE_QTUITOOLS 1) - - include (${QT_USE_FILE}) - endif () -endmacro () - -macro (acg_qt5) - - if(POLICY CMP0020) - # Automatically link Qt executables to qtmain target on Windows - cmake_policy(SET CMP0020 NEW) - endif(POLICY CMP0020) - #if (NOT QT5_FOUND) - - #set (QT_MIN_VERSION ${ARGN}) - - #try to find qt5 automatically - #for custom installation of qt5, dont use any of these variables - set (QT5_INSTALL_PATH "" CACHE PATH "Path to Qt5 directory which contains lib and include folder") - if (EXISTS "${QT5_INSTALL_PATH}") - set (CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH};${QT5_INSTALL_PATH}") - set (QT5_INSTALL_PATH_EXISTS TRUE) - endif() - - - - find_package (Qt5Core QUIET) - - #find WINDOWS_SDK to avoid qt error. This must be done BEFORE Qt5Widgets is searched - if (Qt5Core_FOUND AND WIN32) - string(REGEX REPLACE "^([0-9]+)\\.[0-9]+\\.[0-9]+.*" "\\1" QT_VERSION_MAJOR "${Qt5Core_VERSION_STRING}") - string(REGEX REPLACE "^[0-9]+\\.([0-9])+\\.[0-9]+.*" "\\1" QT_VERSION_MINOR "${Qt5Core_VERSION_STRING}") - string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" QT_VERSION_PATCH "${Qt5Core_VERSION_STRING}") - - if ( (QT_VERSION_MAJOR EQUAL 5) AND (QT_VERSION_MINOR LESS 3 OR ( QT_VERSION_MINOR EQUAL 3 AND QT_VERSION_PATCH EQUAL 0 )) ) # for all Qt version > 5.0.0 and < 5.3.1 - #glu32.lib is needed by qt5 opengl version. it cannot find it by itself so we help qt - #this block has to be executed, before Qt5Gui is searched, otherwise we will end up with the (not so useful) QT5 error message - set(WINDOWS_SDK_LIBS "COULD_NOT_FOUND" CACHE PATH "Path to the latest windows sdk libs which includes glu32.lib. Used by Qt5.") - if (EXISTS "${WINDOWS_SDK_LIBS}\\glu32.lib") - set (CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH};${WINDOWS_SDK_LIBS}") - elseif(QT5_INSTALL_PATH_EXISTS) #trying to install qt5. notify about missing sdk before the qt message comes - message(FATAL_ERROR "Could not find glu32.lib. This is necessary for QT5 OpenGL version for windows, spleace specify glu32.lib in WINDOWS_SDK_LIB or install Qt version >= 5.3.1") - endif() - endif() - endif(Qt5Core_FOUND AND WIN32) - - find_package (Qt5Gui QUIET) - find_package (Qt5OpenGL QUIET) - - - if (Qt5Core_FOUND AND Qt5Gui_FOUND AND Qt5OpenGL_FOUND) - set (QT5_FOUND TRUE) - endif() - - if (QT5_FOUND) - acg_unset_qt_shared_variables(5) - - #set plugin dir - list(GET Qt5Gui_PLUGINS 0 _plugin) - if (_plugin) - get_target_property(_plugin_full ${_plugin} LOCATION) - get_filename_component(_plugin_dir ${_plugin_full} PATH) - set (QT_PLUGINS_DIR "${_plugin_dir}/../" CACHE PATH "Path to the qt plugin directory") - elseif(QT5_INSTALL_PATH_EXISTS) - set (QT_PLUGINS_DIR "${QT5_INSTALL_PATH}/plugins/" CACHE PATH "Path to the qt plugin directory") - elseif() - set (QT_PLUGINS_DIR "QT_PLUGIN_DIR_NOT_FOUND" CACHE PATH "Path to the qt plugin directory") - endif(_plugin) - - #set binary dir for fixupbundle - if(QT5_INSTALL_PATH_EXISTS) - set(_QT_BINARY_DIR "${QT5_INSTALL_PATH}/bin") - else() - get_target_property(_QT_BINARY_DIR ${Qt5Widgets_UIC_EXECUTABLE} LOCATION) - get_filename_component(_QT_BINARY_DIR ${_QT_BINARY_DIR} PATH) - endif(QT5_INSTALL_PATH_EXISTS) - - set (QT_BINARY_DIR "${_QT_BINARY_DIR}" CACHE PATH "Qt5 binary Directory") - mark_as_advanced(QT_BINARY_DIR) - - set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) - - include_directories(${Qt5Core_INCLUDE_DIRS}) - include_directories(${Qt5Gui_INCLUDE_DIRS}) - include_directories(${Qt5OpenGL_INCLUDE_DIRS}) - add_definitions(${Qt5Core_DEFINITIONS}) - add_definitions(${Qt5Gui_DEFINITIONS}) - add_definitions(${Qt5OpenGL_DEFINITIONS}) - - if ( NOT MSVC ) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") - endif() - - set (QT_LIBRARIES ${Qt5Core_LIBRARIES} ${Qt5Widgets_LIBRARIES} - ${Qt5Gui_LIBRARIES} ${Qt5OpenGL_LIBRARIES}) - - if (MSVC) - set (QT_LIBRARIES ${QT_LIBRARIES} ${Qt5Core_QTMAIN_LIBRARIES}) - endif() - - #add_definitions(-DQT_NO_OPENGL) - - #adding QT_NO_DEBUG to all release modes. - # Note: for multi generators like msvc you cannot set this definition depending of - # the current build type, because it may change in the future inside the ide and not via cmake - if (MSVC_IDE) - set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /DQT_NO_DEBUG") - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /DQT_NO_DEBUG") - - set(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_RELEASE} /DQT_NO_DEBUG") - set(CMAKE_CXX_FLAGS_MINSITEREL "${CMAKE_C_FLAGS_RELEASE} /DQT_NO_DEBUG") - - set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELEASE} /DQT_NO_DEBUG") - set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELEASE} /DQT_NO_DEBUG") - else(MSVC_IDE) - if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug") - add_definitions(-DQT_NO_DEBUG) - endif() - endif(MSVC_IDE) - - endif () -endmacro () - # unsets the given variable macro (acg_unset var) set (${var} "" CACHE INTERNAL "") @@ -314,14 +165,14 @@ endmacro () # test for OpenMP macro (acg_openmp) if (NOT OPENMP_NOTFOUND) - find_package(OpenMP) - if (OPENMP_FOUND) - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") - set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") - add_definitions(-DUSE_OPENMP) + find_package(OpenMP) + if (OPENMP_FOUND) + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") + add_definitions(-DUSE_OPENMP) else () set (OPENMP_NOTFOUND 1) - endif () + endif() endif () endmacro () @@ -380,192 +231,11 @@ macro (acg_drop_templates list) endforeach () endmacro () -# generate moc targets for sources in list -macro (acg_qt4_automoc moc_SRCS) - qt4_get_moc_flags (_moc_INCS) - - set (_matching_FILES ) - foreach (_current_FILE ${ARGN}) - - get_filename_component (_abs_FILE ${_current_FILE} ABSOLUTE) - # if "SKIP_AUTOMOC" is set to true, we will not handle this file here. - # here. this is required to make bouic work correctly: - # we need to add generated .cpp files to the sources (to compile them), - # but we cannot let automoc handle them, as the .cpp files don't exist yet when - # cmake is run for the very first time on them -> however the .cpp files might - # exist at a later run. at that time we need to skip them, so that we don't add two - # different rules for the same moc file - get_source_file_property (_skip ${_abs_FILE} SKIP_AUTOMOC) - - if ( NOT _skip AND EXISTS ${_abs_FILE} ) - - file (READ ${_abs_FILE} _contents) - - get_filename_component (_abs_PATH ${_abs_FILE} PATH) - - string (REGEX MATCHALL "Q_OBJECT" _match "${_contents}") - if (_match) - get_filename_component (_basename ${_current_FILE} NAME_WE) - set (_header ${_abs_FILE}) - set (_moc ${CMAKE_CURRENT_BINARY_DIR}/moc_${_basename}.cpp) - - add_custom_command (OUTPUT ${_moc} - COMMAND ${QT_MOC_EXECUTABLE} - ARGS ${_moc_INCS} ${_header} -o ${_moc} - DEPENDS ${_header} - ) - - add_file_dependencies (${_abs_FILE} ${_moc}) - set (${moc_SRCS} ${${moc_SRCS}} ${_moc}) - - endif () - endif () - endforeach () -endmacro () - -# generate moc targets for sources in list -macro (acg_qt5_automoc moc_SRCS) - qt5_get_moc_flags (_moc_INCS) - - list(REMOVE_DUPLICATES _moc_INCS) - - set (_matching_FILES ) - foreach (_current_FILE ${ARGN}) - - get_filename_component (_abs_FILE ${_current_FILE} ABSOLUTE) - # if "SKIP_AUTOMOC" is set to true, we will not handle this file here. - # here. this is required to make bouic work correctly: - # we need to add generated .cpp files to the sources (to compile them), - # but we cannot let automoc handle them, as the .cpp files don't exist yet when - # cmake is run for the very first time on them -> however the .cpp files might - # exist at a later run. at that time we need to skip them, so that we don't add two - # different rules for the same moc file - get_source_file_property (_skip ${_abs_FILE} SKIP_AUTOMOC) - - if ( NOT _skip AND EXISTS ${_abs_FILE} ) - - file (READ ${_abs_FILE} _contents) - - get_filename_component (_abs_PATH ${_abs_FILE} PATH) - - string (REGEX MATCHALL "Q_OBJECT" _match "${_contents}") - if (_match) - get_filename_component (_basename ${_current_FILE} NAME_WE) - set (_header ${_abs_FILE}) - set (_moc ${CMAKE_CURRENT_BINARY_DIR}/moc_${_basename}.cpp) - - add_custom_command (OUTPUT ${_moc} - COMMAND ${QT_MOC_EXECUTABLE} - ARGS ${_moc_INCS} ${_header} -o ${_moc} - DEPENDS ${_header} - ) - - add_file_dependencies (${_abs_FILE} ${_moc}) - set (${moc_SRCS} ${${moc_SRCS}} ${_moc}) - - endif () - endif () - endforeach () -endmacro () - -# generate uic targets for sources in list -macro (acg_qt4_autouic uic_SRCS) - - set (_matching_FILES ) - foreach (_current_FILE ${ARGN}) - - get_filename_component (_abs_FILE ${_current_FILE} ABSOLUTE) - - if ( EXISTS ${_abs_FILE} ) - - file (READ ${_abs_FILE} _contents) - - get_filename_component (_abs_PATH ${_abs_FILE} PATH) - - get_filename_component (_basename ${_current_FILE} NAME_WE) - string (REGEX REPLACE "Ui$" "" _cbasename ${_basename}) - set (_outfile ${CMAKE_CURRENT_BINARY_DIR}/ui_${_basename}.hh) - set (_header ${_basename}.hh) - set (_source ${_abs_PATH}/${_cbasename}.cc) - - add_custom_command (OUTPUT ${_outfile} - COMMAND ${QT_UIC_EXECUTABLE} - ARGS -o ${_outfile} ${_abs_FILE} - DEPENDS ${_abs_FILE}) - - add_file_dependencies (${_source} ${_outfile}) - set (${uic_SRCS} ${${uic_SRCS}} ${_outfile}) - - endif () - endforeach () -endmacro () - -# generate uic targets for sources in list -macro (acg_qt5_autouic uic_SRCS) - - set (_matching_FILES ) - foreach (_current_FILE ${ARGN}) - - get_filename_component (_abs_FILE ${_current_FILE} ABSOLUTE) - - if ( EXISTS ${_abs_FILE} ) - - file (READ ${_abs_FILE} _contents) - - get_filename_component (_abs_PATH ${_abs_FILE} PATH) - - get_filename_component (_basename ${_current_FILE} NAME_WE) - string (REGEX REPLACE "Ui$" "" _cbasename ${_basename}) - set (_outfile ${CMAKE_CURRENT_BINARY_DIR}/ui_${_basename}.hh) - set (_header ${_basename}.hh) - set (_source ${_abs_PATH}/${_cbasename}.cc) - - add_custom_command (OUTPUT ${_outfile} - COMMAND ${Qt5Widgets_UIC_EXECUTABLE} - ARGS -o ${_outfile} ${_abs_FILE} - MAIN_DEPENDENCY ${_abs_FILE} VERBATIM) - - add_file_dependencies (${_source} ${_outfile}) - set (${uic_SRCS} ${${uic_SRCS}} ${_outfile}) - - endif () - endforeach () -endmacro () - -# generate qrc targets for sources in list -macro (acg_qt4_autoqrc qrc_SRCS) - - set (_matching_FILES ) - foreach (_current_FILE ${ARGN}) - - get_filename_component (_abs_FILE ${_current_FILE} ABSOLUTE) - - if ( EXISTS ${_abs_FILE} ) - - file (READ ${_abs_FILE} _contents) - - get_filename_component (_abs_PATH ${_abs_FILE} PATH) - - get_filename_component (_basename ${_current_FILE} NAME_WE) - set (_outfile ${CMAKE_CURRENT_BINARY_DIR}/qrc_${_basename}.cpp) - - add_custom_command (OUTPUT ${_outfile} - COMMAND ${QT_RCC_EXECUTABLE} - ARGS -o ${_outfile} ${_abs_FILE} - DEPENDS ${_abs_FILE}) - - add_file_dependencies (${_source} ${_outfile}) - set (${qrc_SRCS} ${${qrc_SRCS}} ${_outfile}) - - endif () - endforeach () -endmacro () - # get all files in directory, but ignore svn macro (acg_get_files_in_dir ret dir) file (GLOB_RECURSE __files RELATIVE "${dir}" "${dir}/*") foreach (_file ${__files}) - if (NOT _file MATCHES ".*svn.*") + if ( (NOT _file MATCHES ".*svn.*") AND (NOT _file MATCHES ".DS_Store") ) list (APPEND ${ret} "${_file}") endif () endforeach () @@ -600,7 +270,7 @@ function (acg_add_executable _target) # set common target properties defined in common.cmake acg_set_target_props (${_target}) - + if (WIN32 OR (APPLE AND NOT ACG_PROJECT_MACOS_BUNDLE)) add_custom_command (TARGET ${_target} POST_BUILD COMMAND ${CMAKE_COMMAND} -E @@ -656,7 +326,7 @@ function (acg_add_library _target _libtype) copy_if_different $ ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_LIBDIR}/$) - add_custom_command (TARGET ${_target} POST_BUILD + add_custom_command (TARGET ${_target} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different $ @@ -671,22 +341,22 @@ function (acg_add_library _target _libtype) $ ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_PLUGINDIR}/$) elseif (${_type} STREQUAL STATIC) - add_custom_command (TARGET ${_target} POST_BUILD + add_custom_command (TARGET ${_target} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different $ ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_LIBDIR}/$) - endif() - - - # make an extra copy for windows into the binary directory + endif() + + + # make an extra copy for windows into the binary directory if (${_type} STREQUAL SHARED AND WIN32) add_custom_command (TARGET ${_target} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different $ ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_BINDIR}/$) - endif () + endif () endif( (WIN32 AND MSVC) OR (APPLE AND NOT ACG_PROJECT_MACOS_BUNDLE)) @@ -720,57 +390,3 @@ function (acg_add_library _target _libtype) endfunction () -#generates qt translations -function (acg_add_translations _target _languages _sources) - - string (TOUPPER ${_target} _TARGET) - # generate/use translation files - # run with UPDATE_TRANSLATIONS set to on to build qm files - option (UPDATE_TRANSLATIONS_${_TARGET} "Update source translation *.ts files (WARNING: make clean will delete the source .ts files! Danger!)") - - set (_new_ts_files) - set (_ts_files) - - foreach (lang ${_languages}) - if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/translations/${_target}_${lang}.ts" OR UPDATE_TRANSLATIONS_${_TARGET}) - list (APPEND _new_ts_files "translations/${_target}_${lang}.ts") - else () - list (APPEND _ts_files "translations/${_target}_${lang}.ts") - endif () - endforeach () - - - set (_qm_files) - if ( _new_ts_files ) - qt4_create_translation(_qm_files ${_sources} ${_new_ts_files}) - endif () - - if ( _ts_files ) - qt4_add_translation(_qm_files2 ${_ts_files}) - list (APPEND _qm_files ${_qm_files2}) - endif () - - # create a target for the translation files ( and object files ) - # Use this target, to update only the translations - add_custom_target (translations_target_${_target} DEPENDS ${_qm_files}) - - # Build translations with the application - add_dependencies(${_target} translations_target_${_target} ) - - if (NOT EXISTS ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Translations) - file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Translations ) - endif () - - foreach (_qm ${_qm_files}) - get_filename_component (_qm_name "${_qm}" NAME) - add_custom_command (TARGET translations_target_${_target} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E - copy_if_different - ${_qm} - ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Translations/${_qm_name}) - endforeach () - - if (NOT ACG_PROJECT_MACOS_BUNDLE OR NOT APPLE) - install (FILES ${_qm_files} DESTINATION "${ACG_PROJECT_DATADIR}/Translations") - endif () -endfunction () diff --git a/cmake/ACGQt.cmake b/cmake/ACGQt.cmake new file mode 100644 index 0000000000000000000000000000000000000000..609493538c37385d8ba04515a14e1e8523676a74 --- /dev/null +++ b/cmake/ACGQt.cmake @@ -0,0 +1,396 @@ +#unset cached qt variables which are set by all qt versions. version is the major number of the qt version (e.g. 4 or 5, not 4.8) +macro (acg_unset_qt_shared_variables version) + if (ACG_INTERNAL_QT_LAST_VERSION) + if (NOT ${ACG_INTERNAL_QT_LAST_VERSION} EQUAL ${version}) + unset(QT_BINARY_DIR) + unset(QT_PLUGINS_DIR) + unset(ACG_INTERNAL_QT_LAST_VERSION) + endif() + endif() + set (ACG_INTERNAL_QT_LAST_VERSION "${version}" CACHE INTERNAL "Qt Version, which was used on the last time") +endmacro() + +macro (acg_qt5) + + if(POLICY CMP0020) + # Automatically link Qt executables to qtmain target on Windows + cmake_policy(SET CMP0020 NEW) + endif(POLICY CMP0020) + #if (NOT QT5_FOUND) + + #set (QT_MIN_VERSION ${ARGN}) + + #try to find qt5 automatically + #for custom installation of qt5, dont use any of these variables + set (QT5_INSTALL_PATH "" CACHE PATH "Path to Qt5 directory which contains lib and include folder") + + if (EXISTS "${QT5_INSTALL_PATH}") + set (CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH};${QT5_INSTALL_PATH}") + set (QT5_INSTALL_PATH_EXISTS TRUE) + endif(EXISTS "${QT5_INSTALL_PATH}") + + set(QT5_FINDER_FLAGS "" CACHE STRING "Flags for the Qt finder e.g. + NO_DEFAULT_PATH if no system installed Qt shall be found") + # compute default search paths + set(SUPPORTED_QT_VERSIONS 5.9 5.8 5.7 5.6) + foreach (suffix gcc_64 clang_64) + foreach(version ${SUPPORTED_QT_VERSIONS}) + list(APPEND QT_DEFAULT_PATH "~/sw/Qt/${version}/${suffix}") + endforeach() + endforeach() + + find_package (Qt5Core PATHS ${QT_DEFAULT_PATH} ${QT5_FINDER_FLAGS}) + if(Qt5Core_FOUND) + + if(Qt5Core_VERSION) # use the new version variable if it is set + set(Qt5Core_VERSION_STRING ${Qt5Core_VERSION}) + endif(Qt5Core_VERSION) + + string(REGEX REPLACE "^([0-9]+)\\.[0-9]+\\.[0-9]+.*" "\\1" QT_VERSION_MAJOR "${Qt5Core_VERSION_STRING}") + string(REGEX REPLACE "^[0-9]+\\.([0-9]+)\\.[0-9]+.*" "\\1" QT_VERSION_MINOR "${Qt5Core_VERSION_STRING}") + string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" QT_VERSION_PATCH "${Qt5Core_VERSION_STRING}") + + find_package (Qt5Widgets QUIET PATHS ${QT_DEFAULT_PATH} ${QT5_FINDER_FLAGS}) + find_package (Qt5Gui QUIET PATHS ${QT_DEFAULT_PATH} ${QT5_FINDER_FLAGS}) + find_package (Qt5OpenGL QUIET PATHS ${QT_DEFAULT_PATH} ${QT5_FINDER_FLAGS}) + find_package (Qt5Network QUIET PATHS ${QT_DEFAULT_PATH} ${QT5_FINDER_FLAGS}) + find_package (Qt5Sql QUIET PATHS ${QT_DEFAULT_PATH} ${QT5_FINDER_FLAGS}) + find_package (Qt5Script QUIET PATHS ${QT_DEFAULT_PATH} ${QT5_FINDER_FLAGS}) + find_package (Qt5ScriptTools QUIET PATHS ${QT_DEFAULT_PATH} ${QT5_FINDER_FLAGS}) + find_package (Qt5Xml QUIET PATHS ${QT_DEFAULT_PATH} ${QT5_FINDER_FLAGS}) + find_package (Qt5XmlPatterns QUIET PATHS ${QT_DEFAULT_PATH} ${QT5_FINDER_FLAGS}) + find_package (Qt5Help QUIET PATHS ${QT_DEFAULT_PATH} ${QT5_FINDER_FLAGS}) + find_package (Qt5UiTools QUIET PATHS ${QT_DEFAULT_PATH} ${QT5_FINDER_FLAGS}) + find_package (Qt5Svg QUIET PATHS ${QT_DEFAULT_PATH} ${QT5_FINDER_FLAGS}) + find_package (Qt5PrintSupport QUIET PATHS ${QT_DEFAULT_PATH} ${QT5_FINDER_FLAGS}) + find_package (Qt5Concurrent QUIET PATHS ${QT_DEFAULT_PATH} ${QT5_FINDER_FLAGS}) + + #do noot look for Webkit and qt declarative on qt version 5.6 or newer + if(${QT_VERSION_MINOR} LESS 6) + find_package (Qt5Declarative QUIET PATHS ${QT_DEFAULT_PATH} ${QT5_FINDER_FLAGS}) + find_package (Qt5WebKit QUIET PATHS ${QT_DEFAULT_PATH} ${QT5_FINDER_FLAGS}) + endif(${QT_VERSION_MINOR} LESS 6) + + if (NOT WIN32 AND NOT APPLE) + find_package (Qt5X11Extras QUIET PATHS ${QT_DEFAULT_PATH} ${QT5_FINDER_FLAGS}) + endif () + + if(${QT_VERSION_MINOR} GREATER 5) + if (Qt5Core_FOUND AND Qt5Widgets_FOUND + AND Qt5Gui_FOUND AND Qt5OpenGL_FOUND AND Qt5Network_FOUND + AND Qt5Script_FOUND AND Qt5ScriptTools_FOUND AND Qt5Sql_FOUND + AND Qt5Xml_FOUND AND Qt5XmlPatterns_FOUND AND Qt5Help_FOUND + AND Qt5UiTools_FOUND AND Qt5Concurrent_FOUND + AND Qt5PrintSupport_FOUND) + set (QT5_FOUND TRUE) + endif() + else(${QT_VERSION_MINOR} GREATER 5) + if (Qt5Core_FOUND AND Qt5Declarative_FOUND AND Qt5Widgets_FOUND + AND Qt5Gui_FOUND AND Qt5OpenGL_FOUND AND Qt5Network_FOUND + AND Qt5Script_FOUND AND Qt5ScriptTools_FOUND AND Qt5Sql_FOUND + AND Qt5Xml_FOUND AND Qt5XmlPatterns_FOUND AND Qt5Help_FOUND + AND Qt5WebKit_FOUND AND Qt5UiTools_FOUND AND Qt5Concurrent_FOUND + AND Qt5PrintSupport_FOUND) + set (QT5_FOUND TRUE) + endif() + endif(${QT_VERSION_MINOR} GREATER 5) + endif(Qt5Core_FOUND) + + if (QT5_FOUND) + acg_unset_qt_shared_variables(5) + + #set plugin dir + list(GET Qt5Gui_PLUGINS 0 _plugin) + if (_plugin) + get_target_property(_plugin_full ${_plugin} LOCATION) + get_filename_component(_plugin_dir ${_plugin_full} PATH) + set (QT_PLUGINS_DIR "${_plugin_dir}/../" CACHE PATH "Path to the qt plugin directory") + elseif(QT5_INSTALL_PATH_EXISTS) + set (QT_PLUGINS_DIR "${QT5_INSTALL_PATH}/plugins/" CACHE PATH "Path to the qt plugin directory") + elseif() + set (QT_PLUGINS_DIR "QT_PLUGIN_DIR_NOT_FOUND" CACHE PATH "Path to the qt plugin directory") + endif(_plugin) + + #set binary dir for fixupbundle + if(QT5_INSTALL_PATH_EXISTS) + set(_QT_BINARY_DIR "${QT5_INSTALL_PATH}/bin") + else() + get_target_property(_QT_BINARY_DIR ${Qt5Widgets_UIC_EXECUTABLE} LOCATION) + get_filename_component(_QT_BINARY_DIR ${_QT_BINARY_DIR} PATH) + endif(QT5_INSTALL_PATH_EXISTS) + + set (QT_BINARY_DIR "${_QT_BINARY_DIR}" CACHE PATH "Qt5 binary Directory") + mark_as_advanced(QT_BINARY_DIR) + + set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) + + include_directories(${Qt5Core_INCLUDE_DIRS}) + include_directories(${Qt5Declarative_INCLUDE_DIRS}) + include_directories(${Qt5Widgets_INCLUDE_DIRS}) + include_directories(${Qt5Gui_INCLUDE_DIRS}) + include_directories(${Qt5OpenGL_INCLUDE_DIRS}) + include_directories(${Qt5Network_INCLUDE_DIRS}) + include_directories(${Qt5Script_INCLUDE_DIRS}) + include_directories(${Qt5ScriptTools_INCLUDE_DIRS}) + include_directories(${Qt5Sql_INCLUDE_DIRS}) + include_directories(${Qt5Xml_INCLUDE_DIRS}) + include_directories(${Qt5XmlPatterns_INCLUDE_DIRS}) + include_directories(${Qt5Help_INCLUDE_DIRS}) + include_directories(${Qt5WebKit_INCLUDE_DIRS}) + include_directories(${Qt5UiTools_INCLUDE_DIRS}) + include_directories(${Qt5Concurrent_INCLUDE_DIRS}) + include_directories(${Qt5PrintSupport_INCLUDE_DIRS}) + add_definitions(${Qt5Core_DEFINITIONS}) + add_definitions(${Qt5Widgets_DEFINITIONS}) + add_definitions(${Qt5Gui_DEFINITIONS}) + add_definitions(${Qt5OpenGL_DEFINITIONS}) + add_definitions(${Qt5Network_DEFINITIONS}) + add_definitions(${Qt5Script_DEFINITIONS}) + add_definitions(${Qt5ScriptTools_DEFINITIONS}) + add_definitions(${Qt5Sql_DEFINITIONS}) + add_definitions(${Qt5Xml_DEFINITIONS}) + add_definitions(${Qt5XmlPatterns_DEFINITIONS}) + add_definitions(${Qt5Help_DEFINITIONS}) + add_definitions(${Qt5WebKit_DEFINITIONS}) + add_definitions(${Qt5UiTools_DEFINITIONS}) + add_definitions(${Qt5Concurrent_DEFINITIONS}) + add_definitions(${Qt5PrintSupport_DEFINITIONS}) + + if (Qt5X11Extras_FOUND) + include_directories(${Qt5X11Extras_INCLUDE_DIRS}) + add_definitions(${Qt5X11Extras_DEFINITIONS}) + endif () + + if ( NOT MSVC ) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") + endif() + + set (QT_LIBRARIES ${Qt5Core_LIBRARIES} ${Qt5Declarative_LIBRARIES} ${Qt5Widgets_LIBRARIES} + ${Qt5Gui_LIBRARIES} ${Qt5OpenGL_LIBRARIES} ${Qt5Network_LIBRARIES} + ${Qt5Script_LIBRARIES} ${Qt5ScriptTools_LIBRARIES} ${Qt5Sql_LIBRARIES} + ${Qt5Xml_LIBRARIES} ${Qt5XmlPatterns_LIBRARIES} ${Qt5Help_LIBRARIES} + ${Qt5WebKit_LIBRARIES} ${Qt5UiTools_LIBRARIES} ${Qt5Concurrent_LIBARIES} + ${Qt5PrintSupport_LIBRARIES}) + + if (Qt5X11Extras_FOUND) + list (APPEND QT_LIBRARIES ${Qt5X11Extras_LIBRARIES}) + endif () + + if (MSVC) + set (QT_LIBRARIES ${QT_LIBRARIES} ${Qt5Core_QTMAIN_LIBRARIES}) + endif() + + #add_definitions(-DQT_NO_OPENGL) + + #adding QT_NO_DEBUG to all release modes. + # Note: for multi generators like msvc you cannot set this definition depending of + # the current build type, because it may change in the future inside the ide and not via cmake + if (MSVC_IDE) + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /DQT_NO_DEBUG") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /DQT_NO_DEBUG") + + set(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_RELEASE} /DQT_NO_DEBUG") + set(CMAKE_CXX_FLAGS_MINSITEREL "${CMAKE_C_FLAGS_RELEASE} /DQT_NO_DEBUG") + + set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELEASE} /DQT_NO_DEBUG") + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELEASE} /DQT_NO_DEBUG") + else(MSVC_IDE) + if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug") + add_definitions(-DQT_NO_DEBUG) + endif() + endif(MSVC_IDE) + + endif () +endmacro () + +# generate moc targets for sources in list +macro (acg_qt5_automoc moc_SRCS) + qt5_get_moc_flags (_moc_INCS) + + list(REMOVE_DUPLICATES _moc_INCS) + + set (_matching_FILES ) + foreach (_current_FILE ${ARGN}) + + get_filename_component (_abs_FILE ${_current_FILE} ABSOLUTE) + # if "SKIP_AUTOMOC" is set to true, we will not handle this file here. + # here. this is required to make bouic work correctly: + # we need to add generated .cpp files to the sources (to compile them), + # but we cannot let automoc handle them, as the .cpp files don't exist yet when + # cmake is run for the very first time on them -> however the .cpp files might + # exist at a later run. at that time we need to skip them, so that we don't add two + # different rules for the same moc file + get_source_file_property (_skip ${_abs_FILE} SKIP_AUTOMOC) + + if ( NOT _skip AND EXISTS ${_abs_FILE} ) + + file (READ ${_abs_FILE} _contents) + + get_filename_component (_abs_PATH ${_abs_FILE} PATH) + + string (REGEX MATCHALL "Q_OBJECT" _match "${_contents}") + if (_match) + get_filename_component (_basename ${_current_FILE} NAME_WE) + set (_header ${_abs_FILE}) + set (_moc ${CMAKE_CURRENT_BINARY_DIR}/moc_${_basename}.cpp) + + add_custom_command (OUTPUT ${_moc} + COMMAND ${QT_MOC_EXECUTABLE} + ARGS ${_moc_INCS} ${_header} -o ${_moc} + DEPENDS ${_header} + ) + + add_file_dependencies (${_abs_FILE} ${_moc}) + set (${moc_SRCS} ${${moc_SRCS}} ${_moc}) + + endif () + endif () + endforeach () +endmacro () + +# generate uic targets for sources in list +macro (acg_qt5_autouic uic_SRCS) + + set (_matching_FILES ) + foreach (_current_FILE ${ARGN}) + + get_filename_component (_abs_FILE ${_current_FILE} ABSOLUTE) + + if ( EXISTS ${_abs_FILE} ) + + file (READ ${_abs_FILE} _contents) + + get_filename_component (_abs_PATH ${_abs_FILE} PATH) + + get_filename_component (_basename ${_current_FILE} NAME_WE) + string (REGEX REPLACE "Ui$" "" _cbasename ${_basename}) + set (_outfile ${CMAKE_CURRENT_BINARY_DIR}/ui_${_basename}.hh) + set (_header ${_basename}.hh) + set (_source ${_abs_PATH}/${_cbasename}.cc) + + add_custom_command (OUTPUT ${_outfile} + COMMAND ${Qt5Widgets_UIC_EXECUTABLE} + ARGS -o ${_outfile} ${_abs_FILE} + MAIN_DEPENDENCY ${_abs_FILE} VERBATIM) + + add_file_dependencies (${_source} ${_outfile}) + set (${uic_SRCS} ${${uic_SRCS}} ${_outfile}) + + endif () + endforeach () +endmacro () + +# generate qrc targets for sources in list +macro (acg_qt5_autoqrc qrc_SRCS) + + set (_matching_FILES ) + foreach (_current_FILE ${ARGN}) + + get_filename_component (_abs_FILE ${_current_FILE} ABSOLUTE) + + if ( EXISTS ${_abs_FILE} ) + + file (READ ${_abs_FILE} _contents) + + get_filename_component (_abs_PATH ${_abs_FILE} PATH) + + get_filename_component (_basename ${_current_FILE} NAME_WE) + set (_outfile ${CMAKE_CURRENT_BINARY_DIR}/qrc_${_basename}.cpp) + + qt5_add_resources( ${_outfile} ${_abs_FILE} ) + + add_file_dependencies (${_source} ${_outfile}) + set (${qrc_SRCS} ${${qrc_SRCS}} ${_outfile}) + + endif () + endforeach () +endmacro () + + +#generates qt translations +function (acg_add_translations _target _languages _sources) + + string (TOUPPER ${_target} _TARGET) + # generate/use translation files + # run with UPDATE_TRANSLATIONS set to on to build qm files + option (UPDATE_TRANSLATIONS_${_TARGET} "Update source translation *.ts files (WARNING: make clean will delete the source .ts files! Danger!)") + + set (_new_ts_files) + set (_ts_files) + + foreach (lang ${_languages}) + if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/translations/${_target}_${lang}.ts" OR UPDATE_TRANSLATIONS_${_TARGET}) + list (APPEND _new_ts_files "translations/${_target}_${lang}.ts") + else () + list (APPEND _ts_files "translations/${_target}_${lang}.ts") + endif () + endforeach () + + + set (_qm_files) + if ( _new_ts_files ) + if (QT5_FOUND) + #qt5_create_translation(_qm_files ${_sources} ${_new_ts_files}) + endif () + endif () + + if ( _ts_files ) + if (QT5_FOUND) + #qt5_add_translation(_qm_files2 ${_ts_files}) + endif() + list (APPEND _qm_files ${_qm_files2}) + endif () + + # create a target for the translation files ( and object files ) + # Use this target, to update only the translations + add_custom_target (tr_${_target} DEPENDS ${_qm_files}) + GROUP_PROJECT( tr_${_target} "Translations") + + # Build translations with the application + add_dependencies(${_target} tr_${_target} ) + + if (NOT EXISTS ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Translations) + file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Translations ) + endif () + + foreach (_qm ${_qm_files}) + get_filename_component (_qm_name "${_qm}" NAME) + add_custom_command (TARGET tr_${_target} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E + copy_if_different + ${_qm} + ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Translations/${_qm_name}) + endforeach () + + if (NOT ACG_PROJECT_MACOS_BUNDLE OR NOT APPLE) + install (FILES ${_qm_files} DESTINATION "${ACG_PROJECT_DATADIR}/Translations") + endif () +endfunction () + +# Function that writes all generated qch files into one Help.qhcp project file +function (generate_qhp_file files_loc plugin_name) + + set(qhp_file "${files_loc}/${plugin_name}.qhp") + # Read in template file + file(STRINGS "${CMAKE_SOURCE_DIR}/OpenFlipper/Documentation/QtHelpResources/QtHelpProject.qhp" qhp_template) + + # Initialize new project file + file(WRITE ${qhp_file} "") + foreach (_line ${qhp_template}) + string(STRIP ${_line} stripped) + if("${stripped}" STREQUAL "files") + acg_get_files_in_dir (_files ${files_loc}) + foreach (_file ${_files}) + string(REGEX MATCH ".+[.]+((html)|(htm)|(xml))$" fileresult ${_file}) + string(LENGTH "${fileresult}" len) + if(${len} GREATER 0) + file(APPEND ${qhp_file} "${_file}\n") + endif() + endforeach() + else() + string(REGEX REPLACE "plugin" ${plugin} newline ${_line}) + file(APPEND ${qhp_file} "${newline}\n") + endif() + endforeach() +endfunction() + diff --git a/cmake/FindGLEW.cmake b/cmake/FindGLEW.cmake index ff2d6a23b30eaaa3d231ede7d192654433ab5b15..c715118751dd5cfb26fc46456e42cc1d6cdd43c5 100644 --- a/cmake/FindGLEW.cmake +++ b/cmake/FindGLEW.cmake @@ -32,6 +32,10 @@ if( WIN32 ) SET(VS_SEARCH_PATH "${CMAKE_WINDOWS_LIBS_DIR}/vs2015/x64/") elseif ( CMAKE_GENERATOR MATCHES "^Visual Studio 14.*" ) SET(VS_SEARCH_PATH "${CMAKE_WINDOWS_LIBS_DIR}/vs2015/x32/") + elseif ( CMAKE_GENERATOR MATCHES "^Visual Studio 15.*Win64" ) + SET(VS_SEARCH_PATH "${CMAKE_WINDOWS_LIBS_DIR}/vs2017/x64/") + elseif ( CMAKE_GENERATOR MATCHES "^Visual Studio 15.*" ) + SET(VS_SEARCH_PATH "${CMAKE_WINDOWS_LIBS_DIR}/vs2017/x32/") endif() if( MSVC80 ) @@ -45,7 +49,9 @@ if( WIN32 ) PATHS "${CMAKE_WINDOWS_LIBS_DIR}/glew/include" "${CMAKE_WINDOWS_LIBS_DIR}/glew-1.6.0/include" ${COMPILER_PATH}/PlatformSDK/Include - "${VS_SEARCH_PATH}glew-1.10.0/include") + "${VS_SEARCH_PATH}glew-2.0.0/include" + "${VS_SEARCH_PATH}glew-1.10.0/include" + "${VS_SEARCH_PATH}glew-1.13.0/include") SET( GLEW_NAMES glew32 ) FIND_LIBRARY( GLEW_LIBRARY @@ -53,7 +59,9 @@ if( WIN32 ) PATHS "${CMAKE_WINDOWS_LIBS_DIR}/glew/lib" "${CMAKE_WINDOWS_LIBS_DIR}/glew-1.6.0/lib" ${COMPILER_PATH}/PlatformSDK/Lib - "${VS_SEARCH_PATH}glew-1.10.0/lib" ) + "${VS_SEARCH_PATH}glew-2.0.0/lib" + "${VS_SEARCH_PATH}glew-1.10.0/lib" + "${VS_SEARCH_PATH}glew-1.13.0/lib" ) else( WIN32 ) FIND_PATH( GLEW_INCLUDE_DIR GL/glew.h GL/wglew.h diff --git a/cmake/FindGLUT.cmake b/cmake/FindGLUT.cmake index f3a99dfc2713b8807cb9dc241076309a63f28e93..5546069c9e7078c0dba491108e6b7027f6975be3 100644 --- a/cmake/FindGLUT.cmake +++ b/cmake/FindGLUT.cmake @@ -40,6 +40,10 @@ IF (WIN32) SET(VS_SEARCH_PATH "${CMAKE_WINDOWS_LIBS_DIR}/vs2015/x64/") elseif ( CMAKE_GENERATOR MATCHES "^Visual Studio 14.*" ) SET(VS_SEARCH_PATH "${CMAKE_WINDOWS_LIBS_DIR}/vs2015/x32/") + elseif ( CMAKE_GENERATOR MATCHES "^Visual Studio 15.*Win64" ) + SET(VS_SEARCH_PATH "${CMAKE_WINDOWS_LIBS_DIR}/vs2017/x64/") + elseif ( CMAKE_GENERATOR MATCHES "^Visual Studio 15.*" ) + SET(VS_SEARCH_PATH "${CMAKE_WINDOWS_LIBS_DIR}/vs2017/x32/") endif() @@ -49,7 +53,17 @@ IF (WIN32) "${VS_SEARCH_PATH}/freeglut-3.0.0/include" "${VS_SEARCH_PATH}/freeglut-2.8.1/include" ) - FIND_LIBRARY( GLUT_glut_LIBRARY NAMES glut32 glut freeglut + FIND_LIBRARY( GLUT_release_LIBRARY NAMES glut32 glut freeglut + PATHS + ${OPENGL_LIBRARY_DIR} + ${GLUT_ROOT_PATH}/Release + "${CMAKE_WINDOWS_LIBS_DIR}/glut-3.7/lib" + "${VS_SEARCH_PATH}/freeglut-3.0.0/lib" + "${VS_SEARCH_PATH}/freeglut-2.8.1/lib" + ) + GET_FILENAME_COMPONENT( GLUT_LIBRARY_DIR ${GLUT_release_LIBRARY} PATH ) + + FIND_LIBRARY( GLUT_debug_LIBRARY NAMES glut32d glutd freeglutd PATHS ${OPENGL_LIBRARY_DIR} ${GLUT_ROOT_PATH}/Release @@ -58,7 +72,7 @@ IF (WIN32) "${VS_SEARCH_PATH}/freeglut-2.8.1/lib" ) - GET_FILENAME_COMPONENT( GLUT_LIBRARY_DIR ${GLUT_glut_LIBRARY} PATH ) + set(GLUT_glut_LIBRARY optimized ${GLUT_release_LIBRARY} debug ${GLUT_debug_LIBRARY} CACHE STRING "Path to the glut libraries") ELSE (WIN32) @@ -99,9 +113,12 @@ ENDIF (WIN32) SET( GLUT_FOUND "NO" ) IF(GLUT_INCLUDE_DIR) IF(GLUT_glut_LIBRARY) - + # Is -lXi and -lXmu required on all platforms that have it? + # If not, we need some way to figure out what platform we are on. SET( GLUT_LIBRARIES ${GLUT_glut_LIBRARY} + ${GLUT_Xmu_LIBRARY} + ${GLUT_Xi_LIBRARY} ${GLUT_cocoa_LIBRARY} ) SET( GLUT_FOUND "YES" ) diff --git a/cmake/FindGoogleTest.cmake b/cmake/FindGoogleTest.cmake index 6918c7d9db643d79fa8cfcad8c13df536a546a6e..15c22cd63691e07adf127be8b22b70e0bc9ef1a6 100644 --- a/cmake/FindGoogleTest.cmake +++ b/cmake/FindGoogleTest.cmake @@ -59,7 +59,7 @@ else(GTEST_INCLUDE_DIRS AND GTEST_LIBRARIES AND GTEST_MAIN_LIBRARIES) /ACG/acgdev/gcc-x86_64/gtest/lib /opt/local/lib /usr/local/lib - /usr/lib + /usr/include "C:/libs/win32/gtest/lib" NO_DEFAULT_PATH ) find_library(_GTEST_MAIN_LIBRARY gtest_main @@ -70,7 +70,7 @@ else(GTEST_INCLUDE_DIRS AND GTEST_LIBRARIES AND GTEST_MAIN_LIBRARIES) /ACG/acgdev/gcc-x86_64/gtest/lib /opt/local/lib /usr/local/lib - /usr/lib + /usr/include "C:/libs/win32/gtest/lib" NO_DEFAULT_PATH ) @@ -84,24 +84,29 @@ else(GTEST_INCLUDE_DIRS AND GTEST_LIBRARIES AND GTEST_MAIN_LIBRARIES) set(GTEST_INCLUDE_DIRS ${_GTEST_INCLUDE_DIR} CACHE PATH "Include directories for Google Test framework") - if ( NOT WIN32 ) + if ( NOT WIN32 ) set(GTEST_LIBRARIES ${_GTEST_LIBRARY} CACHE FILEPATH "Libraries to link for Google Test framework") set(GTEST_MAIN_LIBRARIES ${_GTEST_MAIN_LIBRARY} CACHE FILEPATH "Libraries to link for Google Test automatic main() definition") - else() - set(GTEST_LIBRARIES "optimized;gtest;debug;gtestd" CACHE FILEPATH + set(GTEST_MAIN_LIBRARY ${_GTEST_MAIN_LIBRARY} CACHE FILEPATH + "Libraries to link for Google Test automatic main() definition") + else() + set(GTEST_LIBRARIES "optimized;gtest;debug;gtestd" CACHE FILEPATH "Libraries to link for Google Test framework") set(GTEST_MAIN_LIBRARIES "optimized;gtest_main;debug;gtest_maind" CACHE FILEPATH "Libraries to link for Google Test automatic main() definition") - endif() + set(GTEST_MAIN_LIBRARY "optimized;gtest_main;debug;gtest_maind" CACHE FILEPATH + "Libraries to link for Google Test automatic main() definition") + endif() - # Macro required to use google test with vs2012 - if ( CMAKE_GENERATOR MATCHES "^Visual Studio 11.*" ) - add_definitions(-D_VARIADIC_MAX=10) - endif() + # Macro required to use google test with vs2012 + if ( CMAKE_GENERATOR MATCHES "^Visual Studio 11.*" ) + add_definitions(-D_VARIADIC_MAX=10) + endif() - + set(GTEST_LIBRARY ${_GTEST_LIBRARY} CACHE FILEPATH + "GTest Libraries") set(GTEST_LIBRARY_DIR ${_GTEST_LIBRARY_DIR} CACHE FILEPATH "Library dir containing Google Test libraries") mark_as_advanced(GTEST_INCLUDE_DIRS GTEST_LIBRARIES GTEST_MAIN_LIBRARIES GTEST_LIBRARY_DIR )