X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=cmake%2FQuasselMacros.cmake;h=bc665725d77e274d38f70d552fb8607143af878a;hp=f0791ec6366eb6b233f04b85421ed3ba9232fcf6;hb=0216d4a650c02155b5bcd517567209f674d8a120;hpb=a2121709c6e39fe3640163e5a4b6b96b8b0f1ab8 diff --git a/cmake/QuasselMacros.cmake b/cmake/QuasselMacros.cmake index f0791ec6..bc665725 100644 --- a/cmake/QuasselMacros.cmake +++ b/cmake/QuasselMacros.cmake @@ -1,41 +1,55 @@ -# This macro sets variables for the Qt modules we need. +# This file contains various macros useful for building Quassel. +# +# (C) 2014 by the Quassel Project +# +# The qt5_use_modules function was taken from Qt 5.10.1 (and modified): +# (C) 2005-2011 Kitware, Inc. +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. -macro(setup_qt_variables) - set(QUASSEL_QT_LIBRARIES ) - set(QUASSEL_QT_INCLUDES ${QT_INCLUDE_DIR}) # Qt4 - set(QUASSEL_QT_DEFINITIONS ${QT_DEFINITIONS}) # Qt4 +############################ +# Macros for dealing with Qt +############################ - IF(WIN32) - set(MAIN Main) - ENDIF(WIN32) - foreach(qtmod Core ${ARGV} ${MAIN}) - if(WITH_QT5) - find_package(Qt5${qtmod} ${QT_MIN_VERSION} REQUIRED) - list(APPEND QUASSEL_QT_LIBRARIES ${Qt5${qtmod}_LIBRARIES}) - list(APPEND QUASSEL_QT_INCLUDES ${Qt5${qtmod}_INCLUDE_DIRS}) - list(APPEND QUASSEL_QT_DEFINITIONS ${Qt5${qtmod}_DEFINITIONS} ${Qt5${qtmod}_EXECUTABLE_COMPILE_FLAGS}) - else(WITH_QT5) - string(TOUPPER ${qtmod} QTMOD) - list(APPEND QUASSEL_QT_LIBRARIES ${QT_QT${QTMOD}_LIBRARY}) - if(STATIC) - list(APPEND QUASSEL_QT_LIBRARIES ${QT_QT${QTMOD}_LIB_DEPENDENCIES}) - endif(STATIC) - list(APPEND QUASSEL_QT_INCLUDES ${QT_QT${QTMOD}_INCLUDE_DIR}) - list(APPEND QUASSEL_QT_DEFINITIONS -DQT_QT${QTMOD}_LIB) - endif(WITH_QT5) - endforeach(qtmod) +# Qt 5.11 removed the qt5_use_modules function, so we need to provide it until we can switch to a modern CMake version. +# If present, the Qt-provided version will be used automatically instead. +function(qt5_use_modules _target _link_type) + if (NOT TARGET ${_target}) + message(FATAL_ERROR "The first argument to qt5_use_modules must be an existing target.") + endif() + if ("${_link_type}" STREQUAL "LINK_PUBLIC" OR "${_link_type}" STREQUAL "LINK_PRIVATE" ) + set(_qt5_modules ${ARGN}) + set(_qt5_link_type ${_link_type}) + else() + set(_qt5_modules ${_link_type} ${ARGN}) + endif() - list(REMOVE_DUPLICATES QUASSEL_QT_LIBRARIES) - list(REMOVE_DUPLICATES QUASSEL_QT_INCLUDES) - list(REMOVE_DUPLICATES QUASSEL_QT_DEFINITIONS) + if ("${_qt5_modules}" STREQUAL "") + message(FATAL_ERROR "qt5_use_modules requires at least one Qt module to use.") + endif() + foreach(_module ${_qt5_modules}) + if (NOT Qt5${_module}_FOUND) + find_package(Qt5${_module} PATHS "${_Qt5_COMPONENT_PATH}" NO_DEFAULT_PATH) + if (NOT Qt5${_module}_FOUND) + message(FATAL_ERROR "Can not use \"${_module}\" module which has not yet been found.") + endif() + endif() + target_link_libraries(${_target} ${_qt5_link_type} ${Qt5${_module}_LIBRARIES}) + set_property(TARGET ${_target} APPEND PROPERTY INCLUDE_DIRECTORIES ${Qt5${_module}_INCLUDE_DIRS}) + set_property(TARGET ${_target} APPEND PROPERTY COMPILE_DEFINITIONS ${Qt5${_module}_COMPILE_DEFINITIONS}) + if (Qt5_POSITION_INDEPENDENT_CODE + AND (CMAKE_VERSION VERSION_LESS 2.8.12 + AND (NOT CMAKE_CXX_COMPILER_ID STREQUAL "GNU" + OR CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0))) + set_property(TARGET ${_target} PROPERTY POSITION_INDEPENDENT_CODE ${Qt5_POSITION_INDEPENDENT_CODE}) + endif() + endforeach() +endfunction() - # The COMPILE_FLAGS property expects a string, not a list... - set(QUASSEL_QT_COMPILEFLAGS ) - foreach(flag ${QUASSEL_QT_DEFINITIONS}) - set(QUASSEL_QT_COMPILEFLAGS "${QUASSEL_QT_COMPILEFLAGS} ${flag}") - endforeach(flag) - -endmacro(setup_qt_variables) +###################################### +# Macros for dealing with translations +###################################### # This generates a .ts from a .po file macro(generate_ts outvar basename) @@ -50,7 +64,7 @@ macro(generate_ts outvar basename) # This is a workaround to add (duplicate) strings that lconvert missed to the .ts COMMAND ${QT_LUPDATE_EXECUTABLE} ARGS -silent - ${CMAKE_SOURCE_DIR}/src/ + ${CMAKE_SOURCE_DIR}/src/ -ts ${output} DEPENDS ${basename}.po) set(${outvar} ${output})