mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2023-10-10 13:36:59 +02:00
Added the find Qt4 script, because it required modifications
Former-commit-id: da617c3bbf6720c9789d7dba57c28dc964b6155c
This commit is contained in:
parent
ddd2e26475
commit
2bc84d63bf
@ -9,6 +9,8 @@ project(Hyperion)
|
||||
|
||||
# Add project specific cmake modules (find, etc)
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
|
||||
# Add specific cmake modules to find qt4 (default version finds first available QT which might not be qt4)
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/qt4)
|
||||
|
||||
# Define the global output path of binaries
|
||||
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
|
||||
|
299
cmake/qt4/FindPackageHandleStandardArgs.cmake
Normal file
299
cmake/qt4/FindPackageHandleStandardArgs.cmake
Normal file
@ -0,0 +1,299 @@
|
||||
# FIND_PACKAGE_HANDLE_STANDARD_ARGS(<name> ... )
|
||||
#
|
||||
# This function is intended to be used in FindXXX.cmake modules files.
|
||||
# It handles the REQUIRED, QUIET and version-related arguments to find_package().
|
||||
# It also sets the <UPPERCASED_NAME>_FOUND variable.
|
||||
# The package is considered found if all variables <var1>... listed contain
|
||||
# valid results, e.g. valid filepaths.
|
||||
#
|
||||
# There are two modes of this function. The first argument in both modes is
|
||||
# the name of the Find-module where it is called (in original casing).
|
||||
#
|
||||
# The first simple mode looks like this:
|
||||
# FIND_PACKAGE_HANDLE_STANDARD_ARGS(<name> (DEFAULT_MSG|"Custom failure message") <var1>...<varN> )
|
||||
# If the variables <var1> to <varN> are all valid, then <UPPERCASED_NAME>_FOUND
|
||||
# will be set to TRUE.
|
||||
# If DEFAULT_MSG is given as second argument, then the function will generate
|
||||
# itself useful success and error messages. You can also supply a custom error message
|
||||
# for the failure case. This is not recommended.
|
||||
#
|
||||
# The second mode is more powerful and also supports version checking:
|
||||
# FIND_PACKAGE_HANDLE_STANDARD_ARGS(NAME [REQUIRED_VARS <var1>...<varN>]
|
||||
# [VERSION_VAR <versionvar>]
|
||||
# [HANDLE_COMPONENTS]
|
||||
# [CONFIG_MODE]
|
||||
# [FAIL_MESSAGE "Custom failure message"] )
|
||||
#
|
||||
# As above, if <var1> through <varN> are all valid, <UPPERCASED_NAME>_FOUND
|
||||
# will be set to TRUE.
|
||||
# After REQUIRED_VARS the variables which are required for this package are listed.
|
||||
# Following VERSION_VAR the name of the variable can be specified which holds
|
||||
# the version of the package which has been found. If this is done, this version
|
||||
# will be checked against the (potentially) specified required version used
|
||||
# in the find_package() call. The EXACT keyword is also handled. The default
|
||||
# messages include information about the required version and the version
|
||||
# which has been actually found, both if the version is ok or not.
|
||||
# If the package supports components, use the HANDLE_COMPONENTS option to enable
|
||||
# handling them. In this case, find_package_handle_standard_args() will report
|
||||
# which components have been found and which are missing, and the <NAME>_FOUND
|
||||
# variable will be set to FALSE if any of the required components (i.e. not the
|
||||
# ones listed after OPTIONAL_COMPONENTS) are missing.
|
||||
# Use the option CONFIG_MODE if your FindXXX.cmake module is a wrapper for
|
||||
# a find_package(... NO_MODULE) call. In this case VERSION_VAR will be set
|
||||
# to <NAME>_VERSION and the macro will automatically check whether the
|
||||
# Config module was found.
|
||||
# Via FAIL_MESSAGE a custom failure message can be specified, if this is not
|
||||
# used, the default message will be displayed.
|
||||
#
|
||||
# Example for mode 1:
|
||||
#
|
||||
# FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibXml2 DEFAULT_MSG LIBXML2_LIBRARY LIBXML2_INCLUDE_DIR)
|
||||
#
|
||||
# LibXml2 is considered to be found, if both LIBXML2_LIBRARY and
|
||||
# LIBXML2_INCLUDE_DIR are valid. Then also LIBXML2_FOUND is set to TRUE.
|
||||
# If it is not found and REQUIRED was used, it fails with FATAL_ERROR,
|
||||
# independent whether QUIET was used or not.
|
||||
# If it is found, success will be reported, including the content of <var1>.
|
||||
# On repeated Cmake runs, the same message won't be printed again.
|
||||
#
|
||||
# Example for mode 2:
|
||||
#
|
||||
# FIND_PACKAGE_HANDLE_STANDARD_ARGS(BISON REQUIRED_VARS BISON_EXECUTABLE
|
||||
# VERSION_VAR BISON_VERSION)
|
||||
# In this case, BISON is considered to be found if the variable(s) listed
|
||||
# after REQUIRED_VAR are all valid, i.e. BISON_EXECUTABLE in this case.
|
||||
# Also the version of BISON will be checked by using the version contained
|
||||
# in BISON_VERSION.
|
||||
# Since no FAIL_MESSAGE is given, the default messages will be printed.
|
||||
#
|
||||
# Another example for mode 2:
|
||||
#
|
||||
# find_package(Automoc4 QUIET NO_MODULE HINTS /opt/automoc4)
|
||||
# FIND_PACKAGE_HANDLE_STANDARD_ARGS(Automoc4 CONFIG_MODE)
|
||||
# In this case, FindAutmoc4.cmake wraps a call to find_package(Automoc4 NO_MODULE)
|
||||
# and adds an additional search directory for automoc4.
|
||||
# The following FIND_PACKAGE_HANDLE_STANDARD_ARGS() call produces a proper
|
||||
# success/error message.
|
||||
|
||||
#=============================================================================
|
||||
# Copyright 2007-2009 Kitware, Inc.
|
||||
#
|
||||
# Distributed under the OSI-approved BSD License (the "License");
|
||||
# see accompanying file Copyright.txt for details.
|
||||
#
|
||||
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
||||
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
# See the License for more information.
|
||||
#=============================================================================
|
||||
# (To distribute this file outside of CMake, substitute the full
|
||||
# License text for the above reference.)
|
||||
|
||||
include(FindPackageMessage)
|
||||
include(CMakeParseArguments)
|
||||
|
||||
# internal helper macro
|
||||
macro(_FPHSA_FAILURE_MESSAGE _msg)
|
||||
if (${_NAME}_FIND_REQUIRED)
|
||||
message(FATAL_ERROR "${_msg}")
|
||||
else ()
|
||||
if (NOT ${_NAME}_FIND_QUIETLY)
|
||||
message(STATUS "${_msg}")
|
||||
endif ()
|
||||
endif ()
|
||||
endmacro()
|
||||
|
||||
|
||||
# internal helper macro to generate the failure message when used in CONFIG_MODE:
|
||||
macro(_FPHSA_HANDLE_FAILURE_CONFIG_MODE)
|
||||
# <name>_CONFIG is set, but FOUND is false, this means that some other of the REQUIRED_VARS was not found:
|
||||
if(${_NAME}_CONFIG)
|
||||
_FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: missing: ${MISSING_VARS} (found ${${_NAME}_CONFIG} ${VERSION_MSG})")
|
||||
else()
|
||||
# If _CONSIDERED_CONFIGS is set, the config-file has been found, but no suitable version.
|
||||
# List them all in the error message:
|
||||
if(${_NAME}_CONSIDERED_CONFIGS)
|
||||
set(configsText "")
|
||||
list(LENGTH ${_NAME}_CONSIDERED_CONFIGS configsCount)
|
||||
math(EXPR configsCount "${configsCount} - 1")
|
||||
foreach(currentConfigIndex RANGE ${configsCount})
|
||||
list(GET ${_NAME}_CONSIDERED_CONFIGS ${currentConfigIndex} filename)
|
||||
list(GET ${_NAME}_CONSIDERED_VERSIONS ${currentConfigIndex} version)
|
||||
set(configsText "${configsText} ${filename} (version ${version})\n")
|
||||
endforeach()
|
||||
if (${_NAME}_NOT_FOUND_MESSAGE)
|
||||
set(configsText "${configsText} Reason given by package: ${${_NAME}_NOT_FOUND_MESSAGE}\n")
|
||||
endif()
|
||||
_FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE} ${VERSION_MSG}, checked the following files:\n${configsText}")
|
||||
|
||||
else()
|
||||
# Simple case: No Config-file was found at all:
|
||||
_FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: found neither ${_NAME}Config.cmake nor ${_NAME_LOWER}-config.cmake ${VERSION_MSG}")
|
||||
endif()
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
|
||||
function(FIND_PACKAGE_HANDLE_STANDARD_ARGS _NAME _FIRST_ARG)
|
||||
|
||||
# set up the arguments for CMAKE_PARSE_ARGUMENTS and check whether we are in
|
||||
# new extended or in the "old" mode:
|
||||
set(options CONFIG_MODE HANDLE_COMPONENTS)
|
||||
set(oneValueArgs FAIL_MESSAGE VERSION_VAR)
|
||||
set(multiValueArgs REQUIRED_VARS)
|
||||
set(_KEYWORDS_FOR_EXTENDED_MODE ${options} ${oneValueArgs} ${multiValueArgs} )
|
||||
list(FIND _KEYWORDS_FOR_EXTENDED_MODE "${_FIRST_ARG}" INDEX)
|
||||
|
||||
if(${INDEX} EQUAL -1)
|
||||
set(FPHSA_FAIL_MESSAGE ${_FIRST_ARG})
|
||||
set(FPHSA_REQUIRED_VARS ${ARGN})
|
||||
set(FPHSA_VERSION_VAR)
|
||||
else()
|
||||
|
||||
CMAKE_PARSE_ARGUMENTS(FPHSA "${options}" "${oneValueArgs}" "${multiValueArgs}" ${_FIRST_ARG} ${ARGN})
|
||||
|
||||
if(FPHSA_UNPARSED_ARGUMENTS)
|
||||
message(FATAL_ERROR "Unknown keywords given to FIND_PACKAGE_HANDLE_STANDARD_ARGS(): \"${FPHSA_UNPARSED_ARGUMENTS}\"")
|
||||
endif()
|
||||
|
||||
if(NOT FPHSA_FAIL_MESSAGE)
|
||||
set(FPHSA_FAIL_MESSAGE "DEFAULT_MSG")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# now that we collected all arguments, process them
|
||||
|
||||
if("${FPHSA_FAIL_MESSAGE}" STREQUAL "DEFAULT_MSG")
|
||||
set(FPHSA_FAIL_MESSAGE "Could NOT find ${_NAME}")
|
||||
endif()
|
||||
|
||||
# In config-mode, we rely on the variable <package>_CONFIG, which is set by find_package()
|
||||
# when it successfully found the config-file, including version checking:
|
||||
if(FPHSA_CONFIG_MODE)
|
||||
list(INSERT FPHSA_REQUIRED_VARS 0 ${_NAME}_CONFIG)
|
||||
list(REMOVE_DUPLICATES FPHSA_REQUIRED_VARS)
|
||||
set(FPHSA_VERSION_VAR ${_NAME}_VERSION)
|
||||
endif()
|
||||
|
||||
if(NOT FPHSA_REQUIRED_VARS)
|
||||
message(FATAL_ERROR "No REQUIRED_VARS specified for FIND_PACKAGE_HANDLE_STANDARD_ARGS()")
|
||||
endif()
|
||||
|
||||
list(GET FPHSA_REQUIRED_VARS 0 _FIRST_REQUIRED_VAR)
|
||||
|
||||
string(TOUPPER ${_NAME} _NAME_UPPER)
|
||||
string(TOLOWER ${_NAME} _NAME_LOWER)
|
||||
|
||||
# collect all variables which were not found, so they can be printed, so the
|
||||
# user knows better what went wrong (#6375)
|
||||
set(MISSING_VARS "")
|
||||
set(DETAILS "")
|
||||
set(${_NAME_UPPER}_FOUND TRUE)
|
||||
# check if all passed variables are valid
|
||||
foreach(_CURRENT_VAR ${FPHSA_REQUIRED_VARS})
|
||||
if(NOT ${_CURRENT_VAR})
|
||||
set(${_NAME_UPPER}_FOUND FALSE)
|
||||
set(MISSING_VARS "${MISSING_VARS} ${_CURRENT_VAR}")
|
||||
else()
|
||||
set(DETAILS "${DETAILS}[${${_CURRENT_VAR}}]")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
# component handling
|
||||
unset(FOUND_COMPONENTS_MSG)
|
||||
unset(MISSING_COMPONENTS_MSG)
|
||||
|
||||
if(FPHSA_HANDLE_COMPONENTS)
|
||||
foreach(comp ${${_NAME}_FIND_COMPONENTS})
|
||||
if(${_NAME}_${comp}_FOUND)
|
||||
|
||||
if(NOT DEFINED FOUND_COMPONENTS_MSG)
|
||||
set(FOUND_COMPONENTS_MSG "found components: ")
|
||||
endif()
|
||||
set(FOUND_COMPONENTS_MSG "${FOUND_COMPONENTS_MSG} ${comp}")
|
||||
|
||||
else()
|
||||
|
||||
if(NOT DEFINED MISSING_COMPONENTS_MSG)
|
||||
set(MISSING_COMPONENTS_MSG "missing components: ")
|
||||
endif()
|
||||
set(MISSING_COMPONENTS_MSG "${MISSING_COMPONENTS_MSG} ${comp}")
|
||||
|
||||
if(${_NAME}_FIND_REQUIRED_${comp})
|
||||
set(${_NAME_UPPER}_FOUND FALSE)
|
||||
set(MISSING_VARS "${MISSING_VARS} ${comp}")
|
||||
endif()
|
||||
|
||||
endif()
|
||||
endforeach()
|
||||
set(COMPONENT_MSG "${FOUND_COMPONENTS_MSG} ${MISSING_COMPONENTS_MSG}")
|
||||
set(DETAILS "${DETAILS}[c${COMPONENT_MSG}]")
|
||||
endif()
|
||||
|
||||
# version handling:
|
||||
set(VERSION_MSG "")
|
||||
set(VERSION_OK TRUE)
|
||||
set(VERSION ${${FPHSA_VERSION_VAR}} )
|
||||
if (${_NAME}_FIND_VERSION)
|
||||
|
||||
if(VERSION)
|
||||
|
||||
if(${_NAME}_FIND_VERSION_EXACT) # exact version required
|
||||
if (NOT "${${_NAME}_FIND_VERSION}" VERSION_EQUAL "${VERSION}")
|
||||
set(VERSION_MSG "Found unsuitable version \"${VERSION}\", but required is exact version \"${${_NAME}_FIND_VERSION}\"")
|
||||
set(VERSION_OK FALSE)
|
||||
else ()
|
||||
set(VERSION_MSG "(found suitable exact version \"${VERSION}\")")
|
||||
endif ()
|
||||
|
||||
else() # minimum version specified:
|
||||
if ("${${_NAME}_FIND_VERSION}" VERSION_GREATER "${VERSION}")
|
||||
set(VERSION_MSG "Found unsuitable version \"${VERSION}\", but required is at least \"${${_NAME}_FIND_VERSION}\"")
|
||||
set(VERSION_OK FALSE)
|
||||
else ()
|
||||
set(VERSION_MSG "(found suitable version \"${VERSION}\", minimum required is \"${${_NAME}_FIND_VERSION}\")")
|
||||
endif ()
|
||||
endif()
|
||||
|
||||
else()
|
||||
|
||||
# if the package was not found, but a version was given, add that to the output:
|
||||
if(${_NAME}_FIND_VERSION_EXACT)
|
||||
set(VERSION_MSG "(Required is exact version \"${${_NAME}_FIND_VERSION}\")")
|
||||
else()
|
||||
set(VERSION_MSG "(Required is at least version \"${${_NAME}_FIND_VERSION}\")")
|
||||
endif()
|
||||
|
||||
endif()
|
||||
else ()
|
||||
if(VERSION)
|
||||
set(VERSION_MSG "(found version \"${VERSION}\")")
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
if(VERSION_OK)
|
||||
set(DETAILS "${DETAILS}[v${VERSION}(${${_NAME}_FIND_VERSION})]")
|
||||
else()
|
||||
set(${_NAME_UPPER}_FOUND FALSE)
|
||||
endif()
|
||||
|
||||
|
||||
# print the result:
|
||||
if (${_NAME_UPPER}_FOUND)
|
||||
FIND_PACKAGE_MESSAGE(${_NAME} "Found ${_NAME}: ${${_FIRST_REQUIRED_VAR}} ${VERSION_MSG} ${COMPONENT_MSG}" "${DETAILS}")
|
||||
else ()
|
||||
|
||||
if(FPHSA_CONFIG_MODE)
|
||||
_FPHSA_HANDLE_FAILURE_CONFIG_MODE()
|
||||
else()
|
||||
if(NOT VERSION_OK)
|
||||
_FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: ${VERSION_MSG} (found ${${_FIRST_REQUIRED_VAR}})")
|
||||
else()
|
||||
_FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE} (missing: ${MISSING_VARS}) ${VERSION_MSG}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
endif ()
|
||||
|
||||
set(${_NAME_UPPER}_FOUND ${${_NAME_UPPER}_FOUND} PARENT_SCOPE)
|
||||
|
||||
endfunction()
|
1239
cmake/qt4/FindQt4.cmake
Normal file
1239
cmake/qt4/FindQt4.cmake
Normal file
File diff suppressed because it is too large
Load Diff
295
cmake/qt4/Qt4ConfigDependentSettings.cmake
Normal file
295
cmake/qt4/Qt4ConfigDependentSettings.cmake
Normal file
@ -0,0 +1,295 @@
|
||||
# This file is included by FindQt4.cmake, don't include it directly.
|
||||
|
||||
#=============================================================================
|
||||
# Copyright 2005-2009 Kitware, Inc.
|
||||
#
|
||||
# Distributed under the OSI-approved BSD License (the "License");
|
||||
# see accompanying file Copyright.txt for details.
|
||||
#
|
||||
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
||||
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
# See the License for more information.
|
||||
#=============================================================================
|
||||
# (To distribute this file outside of CMake, substitute the full
|
||||
# License text for the above reference.)
|
||||
|
||||
|
||||
###############################################
|
||||
#
|
||||
# configuration/system dependent settings
|
||||
#
|
||||
###############################################
|
||||
|
||||
# find dependencies for some Qt modules
|
||||
# when doing builds against a static Qt, they are required
|
||||
# when doing builds against a shared Qt, they are not required
|
||||
# if a user needs the dependencies, and they couldn't be found, they can set
|
||||
# the variables themselves.
|
||||
|
||||
set(QT_QTGUI_LIB_DEPENDENCIES "")
|
||||
set(QT_QTCORE_LIB_DEPENDENCIES "")
|
||||
set(QT_QTNETWORK_LIB_DEPENDENCIES "")
|
||||
set(QT_QTOPENGL_LIB_DEPENDENCIES "")
|
||||
set(QT_QTDBUS_LIB_DEPENDENCIES "")
|
||||
set(QT_QTHELP_LIB_DEPENDENCIES ${QT_QTCLUCENE_LIBRARY})
|
||||
|
||||
|
||||
if(Q_WS_WIN)
|
||||
# On Windows, qconfig.pri has "shared" for shared library builds
|
||||
if(NOT QT_CONFIG MATCHES "shared")
|
||||
set(QT_IS_STATIC 1)
|
||||
endif()
|
||||
else()
|
||||
# On other platforms, check file extension to know if its static
|
||||
if(QT_QTCORE_LIBRARY_RELEASE)
|
||||
get_filename_component(qtcore_lib_ext "${QT_QTCORE_LIBRARY_RELEASE}" EXT)
|
||||
if("${qtcore_lib_ext}" STREQUAL "${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
||||
set(QT_IS_STATIC 1)
|
||||
endif()
|
||||
endif()
|
||||
if(QT_QTCORE_LIBRARY_DEBUG)
|
||||
get_filename_component(qtcore_lib_ext "${QT_QTCORE_LIBRARY_DEBUG}" EXT)
|
||||
if(${qtcore_lib_ext} STREQUAL ${CMAKE_STATIC_LIBRARY_SUFFIX})
|
||||
set(QT_IS_STATIC 1)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# build using shared Qt needs -DQT_DLL on Windows
|
||||
if(Q_WS_WIN AND NOT QT_IS_STATIC)
|
||||
set(QT_DEFINITIONS ${QT_DEFINITIONS} -DQT_DLL)
|
||||
endif()
|
||||
|
||||
if(NOT QT_IS_STATIC)
|
||||
return()
|
||||
endif()
|
||||
|
||||
# QtOpenGL dependencies
|
||||
find_package(OpenGL)
|
||||
set (QT_QTOPENGL_LIB_DEPENDENCIES ${OPENGL_glu_LIBRARY} ${OPENGL_gl_LIBRARY})
|
||||
|
||||
|
||||
## system png
|
||||
if(QT_QCONFIG MATCHES "system-png")
|
||||
find_package(PNG)
|
||||
set(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} ${PNG_LIBRARY})
|
||||
endif()
|
||||
|
||||
## system jpeg
|
||||
if(QT_QCONFIG MATCHES "system-jpeg")
|
||||
find_package(JPEG)
|
||||
set(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} ${JPEG_LIBRARIES})
|
||||
endif()
|
||||
|
||||
## system tiff
|
||||
if(QT_QCONFIG MATCHES "system-tiff")
|
||||
find_package(TIFF)
|
||||
set(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} ${TIFF_LIBRARIES})
|
||||
endif()
|
||||
|
||||
## system mng
|
||||
if(QT_QCONFIG MATCHES "system-mng")
|
||||
find_library(MNG_LIBRARY NAMES mng)
|
||||
set(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} ${MNG_LIBRARY})
|
||||
endif()
|
||||
|
||||
# for X11, get X11 library directory
|
||||
if(Q_WS_X11)
|
||||
find_package(X11)
|
||||
endif()
|
||||
|
||||
|
||||
## X11 SM
|
||||
if(QT_QCONFIG MATCHES "x11sm")
|
||||
if(X11_SM_LIB AND X11_ICE_LIB)
|
||||
set(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} ${X11_SM_LIB} ${X11_ICE_LIB})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
## Xi
|
||||
if(QT_QCONFIG MATCHES "tablet")
|
||||
if(X11_Xi_LIB)
|
||||
set(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} ${X11_Xi_LIB})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
## Xrender
|
||||
if(QT_QCONFIG MATCHES "xrender")
|
||||
if(X11_Xrender_LIB)
|
||||
set(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} ${X11_Xrender_LIB})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
## Xrandr
|
||||
if(QT_QCONFIG MATCHES "xrandr")
|
||||
if(X11_Xrandr_LIB)
|
||||
set(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} ${X11_Xrandr_LIB})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
## Xcursor
|
||||
if(QT_QCONFIG MATCHES "xcursor")
|
||||
if(X11_Xcursor_LIB)
|
||||
set(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} ${X11_Xcursor_LIB})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
## Xinerama
|
||||
if(QT_QCONFIG MATCHES "xinerama")
|
||||
if(X11_Xinerama_LIB)
|
||||
set(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} ${X11_Xinerama_LIB})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
## Xfixes
|
||||
if(QT_QCONFIG MATCHES "xfixes")
|
||||
if(X11_Xfixes_LIB)
|
||||
set(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} ${X11_Xfixes_LIB})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
## fontconfig
|
||||
if(QT_QCONFIG MATCHES "fontconfig")
|
||||
find_library(QT_FONTCONFIG_LIBRARY NAMES fontconfig)
|
||||
mark_as_advanced(QT_FONTCONFIG_LIBRARY)
|
||||
if(QT_FONTCONFIG_LIBRARY)
|
||||
set(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} ${QT_FONTCONFIG_LIBRARY})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
## system-freetype
|
||||
if(QT_QCONFIG MATCHES "system-freetype")
|
||||
find_package(Freetype)
|
||||
if(FREETYPE_LIBRARIES)
|
||||
set(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} ${FREETYPE_LIBRARIES})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
## system-zlib
|
||||
if(QT_QCONFIG MATCHES "system-zlib")
|
||||
find_package(ZLIB)
|
||||
set(QT_QTCORE_LIB_DEPENDENCIES ${QT_QTCORE_LIB_DEPENDENCIES} ${ZLIB_LIBRARIES})
|
||||
endif()
|
||||
|
||||
|
||||
## openssl
|
||||
if(NOT Q_WS_WIN)
|
||||
set(_QT_NEED_OPENSSL 0)
|
||||
if(QT_VERSION_MINOR LESS 4 AND QT_QCONFIG MATCHES "openssl")
|
||||
set(_QT_NEED_OPENSSL 1)
|
||||
endif()
|
||||
if(QT_VERSION_MINOR GREATER 3 AND QT_QCONFIG MATCHES "openssl-linked")
|
||||
set(_QT_NEED_OPENSSL 1)
|
||||
endif()
|
||||
if(_QT_NEED_OPENSSL)
|
||||
find_package(OpenSSL)
|
||||
if(OPENSSL_LIBRARIES)
|
||||
set(QT_QTNETWORK_LIB_DEPENDENCIES ${QT_QTNETWORK_LIB_DEPENDENCIES} ${OPENSSL_LIBRARIES})
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
## dbus
|
||||
if(QT_QCONFIG MATCHES "dbus")
|
||||
|
||||
find_library(QT_DBUS_LIBRARY NAMES dbus-1 )
|
||||
if(QT_DBUS_LIBRARY)
|
||||
set(QT_QTDBUS_LIB_DEPENDENCIES ${QT_QTDBUS_LIB_DEPENDENCIES} ${QT_DBUS_LIBRARY})
|
||||
endif()
|
||||
mark_as_advanced(QT_DBUS_LIBRARY)
|
||||
|
||||
endif()
|
||||
|
||||
|
||||
## glib
|
||||
if(QT_QCONFIG MATCHES "glib")
|
||||
|
||||
# Qt 4.2.0+ uses glib-2.0
|
||||
find_library(QT_GLIB_LIBRARY NAMES glib-2.0 )
|
||||
find_library(QT_GTHREAD_LIBRARY NAMES gthread-2.0 )
|
||||
mark_as_advanced(QT_GLIB_LIBRARY)
|
||||
mark_as_advanced(QT_GTHREAD_LIBRARY)
|
||||
|
||||
if(QT_GLIB_LIBRARY AND QT_GTHREAD_LIBRARY)
|
||||
set(QT_QTCORE_LIB_DEPENDENCIES ${QT_QTCORE_LIB_DEPENDENCIES}
|
||||
${QT_GTHREAD_LIBRARY} ${QT_GLIB_LIBRARY})
|
||||
endif()
|
||||
|
||||
|
||||
# Qt 4.5+ also links to gobject-2.0
|
||||
if(QT_VERSION_MINOR GREATER 4)
|
||||
find_library(QT_GOBJECT_LIBRARY NAMES gobject-2.0 PATHS ${_glib_query_output} )
|
||||
mark_as_advanced(QT_GOBJECT_LIBRARY)
|
||||
|
||||
if(QT_GOBJECT_LIBRARY)
|
||||
set(QT_QTCORE_LIB_DEPENDENCIES ${QT_QTCORE_LIB_DEPENDENCIES}
|
||||
${QT_GOBJECT_LIBRARY})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
endif()
|
||||
|
||||
|
||||
## clock-monotonic, just see if we need to link with rt
|
||||
if(QT_QCONFIG MATCHES "clock-monotonic")
|
||||
set(CMAKE_REQUIRED_LIBRARIES_SAVE ${CMAKE_REQUIRED_LIBRARIES})
|
||||
set(CMAKE_REQUIRED_LIBRARIES rt)
|
||||
CHECK_SYMBOL_EXISTS(_POSIX_TIMERS "unistd.h;time.h" QT_POSIX_TIMERS)
|
||||
set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES_SAVE})
|
||||
if(QT_POSIX_TIMERS)
|
||||
find_library(QT_RT_LIBRARY NAMES rt)
|
||||
mark_as_advanced(QT_RT_LIBRARY)
|
||||
if(QT_RT_LIBRARY)
|
||||
set(QT_QTCORE_LIB_DEPENDENCIES ${QT_QTCORE_LIB_DEPENDENCIES} ${QT_RT_LIBRARY})
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
if(Q_WS_X11)
|
||||
# X11 libraries Qt always depends on
|
||||
set(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} ${X11_Xext_LIB} ${X11_X11_LIB})
|
||||
|
||||
set(CMAKE_THREAD_PREFER_PTHREADS 1)
|
||||
find_package(Threads)
|
||||
if(CMAKE_USE_PTHREADS_INIT)
|
||||
set(QT_QTCORE_LIB_DEPENDENCIES ${QT_QTCORE_LIB_DEPENDENCIES} ${CMAKE_THREAD_LIBS_INIT})
|
||||
endif()
|
||||
|
||||
set (QT_QTCORE_LIB_DEPENDENCIES ${QT_QTCORE_LIB_DEPENDENCIES} ${CMAKE_DL_LIBS})
|
||||
|
||||
endif()
|
||||
|
||||
|
||||
if(Q_WS_WIN)
|
||||
set(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} imm32 winmm)
|
||||
set(QT_QTCORE_LIB_DEPENDENCIES ${QT_QTCORE_LIB_DEPENDENCIES} ws2_32)
|
||||
endif()
|
||||
|
||||
|
||||
if(Q_WS_MAC)
|
||||
set(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} "-framework Carbon")
|
||||
|
||||
# Qt 4.0, 4.1, 4.2 use QuickTime
|
||||
if(QT_VERSION_MINOR LESS 3)
|
||||
set(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} "-framework QuickTime")
|
||||
endif()
|
||||
|
||||
# Qt 4.2+ use AppKit
|
||||
if(QT_VERSION_MINOR GREATER 1)
|
||||
set(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} "-framework AppKit")
|
||||
endif()
|
||||
|
||||
set(QT_QTCORE_LIB_DEPENDENCIES ${QT_QTCORE_LIB_DEPENDENCIES} "-framework ApplicationServices")
|
||||
endif()
|
||||
|
464
cmake/qt4/Qt4Macros.cmake
Normal file
464
cmake/qt4/Qt4Macros.cmake
Normal file
@ -0,0 +1,464 @@
|
||||
# This file is included by FindQt4.cmake, don't include it directly.
|
||||
|
||||
#=============================================================================
|
||||
# Copyright 2005-2009 Kitware, Inc.
|
||||
#
|
||||
# Distributed under the OSI-approved BSD License (the "License");
|
||||
# see accompanying file Copyright.txt for details.
|
||||
#
|
||||
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
||||
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
# See the License for more information.
|
||||
#=============================================================================
|
||||
# (To distribute this file outside of CMake, substitute the full
|
||||
# License text for the above reference.)
|
||||
|
||||
|
||||
######################################
|
||||
#
|
||||
# Macros for building Qt files
|
||||
#
|
||||
######################################
|
||||
|
||||
|
||||
macro (QT4_EXTRACT_OPTIONS _qt4_files _qt4_options)
|
||||
set(${_qt4_files})
|
||||
set(${_qt4_options})
|
||||
set(_QT4_DOING_OPTIONS FALSE)
|
||||
foreach(_currentArg ${ARGN})
|
||||
if ("${_currentArg}" STREQUAL "OPTIONS")
|
||||
set(_QT4_DOING_OPTIONS TRUE)
|
||||
else ()
|
||||
if(_QT4_DOING_OPTIONS)
|
||||
list(APPEND ${_qt4_options} "${_currentArg}")
|
||||
else()
|
||||
list(APPEND ${_qt4_files} "${_currentArg}")
|
||||
endif()
|
||||
endif ()
|
||||
endforeach()
|
||||
endmacro ()
|
||||
|
||||
|
||||
# macro used to create the names of output files preserving relative dirs
|
||||
macro (QT4_MAKE_OUTPUT_FILE infile prefix ext outfile )
|
||||
string(LENGTH ${CMAKE_CURRENT_BINARY_DIR} _binlength)
|
||||
string(LENGTH ${infile} _infileLength)
|
||||
set(_checkinfile ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
if(_infileLength GREATER _binlength)
|
||||
string(SUBSTRING "${infile}" 0 ${_binlength} _checkinfile)
|
||||
if(_checkinfile STREQUAL "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
file(RELATIVE_PATH rel ${CMAKE_CURRENT_BINARY_DIR} ${infile})
|
||||
else()
|
||||
file(RELATIVE_PATH rel ${CMAKE_CURRENT_SOURCE_DIR} ${infile})
|
||||
endif()
|
||||
else()
|
||||
file(RELATIVE_PATH rel ${CMAKE_CURRENT_SOURCE_DIR} ${infile})
|
||||
endif()
|
||||
if(WIN32 AND rel MATCHES "^[a-zA-Z]:") # absolute path
|
||||
string(REGEX REPLACE "^([a-zA-Z]):(.*)$" "\\1_\\2" rel "${rel}")
|
||||
endif()
|
||||
set(_outfile "${CMAKE_CURRENT_BINARY_DIR}/${rel}")
|
||||
string(REPLACE ".." "__" _outfile ${_outfile})
|
||||
get_filename_component(outpath ${_outfile} PATH)
|
||||
get_filename_component(_outfile ${_outfile} NAME_WE)
|
||||
file(MAKE_DIRECTORY ${outpath})
|
||||
set(${outfile} ${outpath}/${prefix}${_outfile}.${ext})
|
||||
endmacro ()
|
||||
|
||||
|
||||
macro (QT4_GET_MOC_FLAGS _moc_flags)
|
||||
set(${_moc_flags})
|
||||
get_directory_property(_inc_DIRS INCLUDE_DIRECTORIES)
|
||||
|
||||
foreach(_current ${_inc_DIRS})
|
||||
if("${_current}" MATCHES "\\.framework/?$")
|
||||
string(REGEX REPLACE "/[^/]+\\.framework" "" framework_path "${_current}")
|
||||
set(${_moc_flags} ${${_moc_flags}} "-F${framework_path}")
|
||||
else()
|
||||
set(${_moc_flags} ${${_moc_flags}} "-I${_current}")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
get_directory_property(_defines COMPILE_DEFINITIONS)
|
||||
foreach(_current ${_defines})
|
||||
set(${_moc_flags} ${${_moc_flags}} "-D${_current}")
|
||||
endforeach()
|
||||
|
||||
if(Q_WS_WIN)
|
||||
set(${_moc_flags} ${${_moc_flags}} -DWIN32)
|
||||
endif()
|
||||
|
||||
endmacro()
|
||||
|
||||
|
||||
# helper macro to set up a moc rule
|
||||
macro (QT4_CREATE_MOC_COMMAND infile outfile moc_flags moc_options)
|
||||
# For Windows, create a parameters file to work around command line length limit
|
||||
if (WIN32)
|
||||
# Pass the parameters in a file. Set the working directory to
|
||||
# be that containing the parameters file and reference it by
|
||||
# just the file name. This is necessary because the moc tool on
|
||||
# MinGW builds does not seem to handle spaces in the path to the
|
||||
# file given with the @ syntax.
|
||||
get_filename_component(_moc_outfile_name "${outfile}" NAME)
|
||||
get_filename_component(_moc_outfile_dir "${outfile}" PATH)
|
||||
if(_moc_outfile_dir)
|
||||
set(_moc_working_dir WORKING_DIRECTORY ${_moc_outfile_dir})
|
||||
endif()
|
||||
set (_moc_parameters_file ${outfile}_parameters)
|
||||
set (_moc_parameters ${moc_flags} ${moc_options} -o "${outfile}" "${infile}")
|
||||
string (REPLACE ";" "\n" _moc_parameters "${_moc_parameters}")
|
||||
file (WRITE ${_moc_parameters_file} "${_moc_parameters}")
|
||||
add_custom_command(OUTPUT ${outfile}
|
||||
COMMAND ${QT_MOC_EXECUTABLE} @${_moc_outfile_name}_parameters
|
||||
DEPENDS ${infile}
|
||||
${_moc_working_dir}
|
||||
VERBATIM)
|
||||
else ()
|
||||
add_custom_command(OUTPUT ${outfile}
|
||||
COMMAND ${QT_MOC_EXECUTABLE}
|
||||
ARGS ${moc_flags} ${moc_options} -o ${outfile} ${infile}
|
||||
DEPENDS ${infile} VERBATIM)
|
||||
endif ()
|
||||
endmacro ()
|
||||
|
||||
|
||||
macro (QT4_GENERATE_MOC infile outfile )
|
||||
# get include dirs and flags
|
||||
QT4_GET_MOC_FLAGS(moc_flags)
|
||||
get_filename_component(abs_infile ${infile} ABSOLUTE)
|
||||
set(_outfile "${outfile}")
|
||||
if(NOT IS_ABSOLUTE "${outfile}")
|
||||
set(_outfile "${CMAKE_CURRENT_BINARY_DIR}/${outfile}")
|
||||
endif()
|
||||
QT4_CREATE_MOC_COMMAND(${abs_infile} ${_outfile} "${moc_flags}" "")
|
||||
set_source_files_properties(${outfile} PROPERTIES SKIP_AUTOMOC TRUE) # dont run automoc on this file
|
||||
endmacro ()
|
||||
|
||||
|
||||
# QT4_WRAP_CPP(outfiles inputfile ... )
|
||||
|
||||
macro (QT4_WRAP_CPP outfiles )
|
||||
# get include dirs
|
||||
QT4_GET_MOC_FLAGS(moc_flags)
|
||||
QT4_EXTRACT_OPTIONS(moc_files moc_options ${ARGN})
|
||||
|
||||
foreach (it ${moc_files})
|
||||
get_filename_component(it ${it} ABSOLUTE)
|
||||
QT4_MAKE_OUTPUT_FILE(${it} moc_ cxx outfile)
|
||||
QT4_CREATE_MOC_COMMAND(${it} ${outfile} "${moc_flags}" "${moc_options}")
|
||||
set(${outfiles} ${${outfiles}} ${outfile})
|
||||
endforeach()
|
||||
|
||||
endmacro ()
|
||||
|
||||
|
||||
# QT4_WRAP_UI(outfiles inputfile ... )
|
||||
|
||||
macro (QT4_WRAP_UI outfiles )
|
||||
QT4_EXTRACT_OPTIONS(ui_files ui_options ${ARGN})
|
||||
|
||||
foreach (it ${ui_files})
|
||||
get_filename_component(outfile ${it} NAME_WE)
|
||||
get_filename_component(infile ${it} ABSOLUTE)
|
||||
set(outfile ${CMAKE_CURRENT_BINARY_DIR}/ui_${outfile}.h)
|
||||
add_custom_command(OUTPUT ${outfile}
|
||||
COMMAND ${QT_UIC_EXECUTABLE}
|
||||
ARGS ${ui_options} -o ${outfile} ${infile}
|
||||
MAIN_DEPENDENCY ${infile} VERBATIM)
|
||||
set(${outfiles} ${${outfiles}} ${outfile})
|
||||
endforeach ()
|
||||
|
||||
endmacro ()
|
||||
|
||||
|
||||
# QT4_ADD_RESOURCES(outfiles inputfile ... )
|
||||
|
||||
macro (QT4_ADD_RESOURCES outfiles )
|
||||
QT4_EXTRACT_OPTIONS(rcc_files rcc_options ${ARGN})
|
||||
|
||||
foreach (it ${rcc_files})
|
||||
get_filename_component(outfilename ${it} NAME_WE)
|
||||
get_filename_component(infile ${it} ABSOLUTE)
|
||||
get_filename_component(rc_path ${infile} PATH)
|
||||
set(outfile ${CMAKE_CURRENT_BINARY_DIR}/qrc_${outfilename}.cxx)
|
||||
|
||||
set(_RC_DEPENDS)
|
||||
if(EXISTS "${infile}")
|
||||
# parse file for dependencies
|
||||
# all files are absolute paths or relative to the location of the qrc file
|
||||
file(READ "${infile}" _RC_FILE_CONTENTS)
|
||||
string(REGEX MATCHALL "<file[^<]+" _RC_FILES "${_RC_FILE_CONTENTS}")
|
||||
foreach(_RC_FILE ${_RC_FILES})
|
||||
string(REGEX REPLACE "^<file[^>]*>" "" _RC_FILE "${_RC_FILE}")
|
||||
if(NOT IS_ABSOLUTE "${_RC_FILE}")
|
||||
set(_RC_FILE "${rc_path}/${_RC_FILE}")
|
||||
endif()
|
||||
set(_RC_DEPENDS ${_RC_DEPENDS} "${_RC_FILE}")
|
||||
endforeach()
|
||||
unset(_RC_FILES)
|
||||
unset(_RC_FILE_CONTENTS)
|
||||
# Since this cmake macro is doing the dependency scanning for these files,
|
||||
# let's make a configured file and add it as a dependency so cmake is run
|
||||
# again when dependencies need to be recomputed.
|
||||
QT4_MAKE_OUTPUT_FILE("${infile}" "" "qrc.depends" out_depends)
|
||||
configure_file("${infile}" "${out_depends}" COPY_ONLY)
|
||||
else()
|
||||
# The .qrc file does not exist (yet). Let's add a dependency and hope
|
||||
# that it will be generated later
|
||||
set(out_depends)
|
||||
endif()
|
||||
|
||||
add_custom_command(OUTPUT ${outfile}
|
||||
COMMAND ${QT_RCC_EXECUTABLE}
|
||||
ARGS ${rcc_options} -name ${outfilename} -o ${outfile} ${infile}
|
||||
MAIN_DEPENDENCY ${infile}
|
||||
DEPENDS ${_RC_DEPENDS} "${out_depends}" VERBATIM)
|
||||
set(${outfiles} ${${outfiles}} ${outfile})
|
||||
endforeach ()
|
||||
|
||||
endmacro ()
|
||||
|
||||
|
||||
macro(QT4_ADD_DBUS_INTERFACE _sources _interface _basename)
|
||||
get_filename_component(_infile ${_interface} ABSOLUTE)
|
||||
set(_header "${CMAKE_CURRENT_BINARY_DIR}/${_basename}.h")
|
||||
set(_impl "${CMAKE_CURRENT_BINARY_DIR}/${_basename}.cpp")
|
||||
set(_moc "${CMAKE_CURRENT_BINARY_DIR}/${_basename}.moc")
|
||||
|
||||
get_source_file_property(_nonamespace ${_interface} NO_NAMESPACE)
|
||||
if(_nonamespace)
|
||||
set(_params -N -m)
|
||||
else()
|
||||
set(_params -m)
|
||||
endif()
|
||||
|
||||
get_source_file_property(_classname ${_interface} CLASSNAME)
|
||||
if(_classname)
|
||||
set(_params ${_params} -c ${_classname})
|
||||
endif()
|
||||
|
||||
get_source_file_property(_include ${_interface} INCLUDE)
|
||||
if(_include)
|
||||
set(_params ${_params} -i ${_include})
|
||||
endif()
|
||||
|
||||
add_custom_command(OUTPUT "${_impl}" "${_header}"
|
||||
COMMAND ${QT_DBUSXML2CPP_EXECUTABLE} ${_params} -p ${_basename} ${_infile}
|
||||
DEPENDS ${_infile} VERBATIM)
|
||||
|
||||
set_source_files_properties("${_impl}" PROPERTIES SKIP_AUTOMOC TRUE)
|
||||
|
||||
QT4_GENERATE_MOC("${_header}" "${_moc}")
|
||||
|
||||
list(APPEND ${_sources} "${_impl}" "${_header}" "${_moc}")
|
||||
MACRO_ADD_FILE_DEPENDENCIES("${_impl}" "${_moc}")
|
||||
|
||||
endmacro()
|
||||
|
||||
|
||||
macro(QT4_ADD_DBUS_INTERFACES _sources)
|
||||
foreach (_current_FILE ${ARGN})
|
||||
get_filename_component(_infile ${_current_FILE} ABSOLUTE)
|
||||
get_filename_component(_basename ${_current_FILE} NAME)
|
||||
# get the part before the ".xml" suffix
|
||||
string(TOLOWER ${_basename} _basename)
|
||||
string(REGEX REPLACE "(.*\\.)?([^\\.]+)\\.xml" "\\2" _basename ${_basename})
|
||||
QT4_ADD_DBUS_INTERFACE(${_sources} ${_infile} ${_basename}interface)
|
||||
endforeach ()
|
||||
endmacro()
|
||||
|
||||
|
||||
macro(QT4_GENERATE_DBUS_INTERFACE _header) # _customName OPTIONS -some -options )
|
||||
QT4_EXTRACT_OPTIONS(_customName _qt4_dbus_options ${ARGN})
|
||||
|
||||
get_filename_component(_in_file ${_header} ABSOLUTE)
|
||||
get_filename_component(_basename ${_header} NAME_WE)
|
||||
|
||||
if (_customName)
|
||||
if (IS_ABSOLUTE ${_customName})
|
||||
get_filename_component(_containingDir ${_customName} PATH)
|
||||
if (NOT EXISTS ${_containingDir})
|
||||
file(MAKE_DIRECTORY "${_containingDir}")
|
||||
endif()
|
||||
set(_target ${_customName})
|
||||
else()
|
||||
set(_target ${CMAKE_CURRENT_BINARY_DIR}/${_customName})
|
||||
endif()
|
||||
else ()
|
||||
set(_target ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.xml)
|
||||
endif ()
|
||||
|
||||
add_custom_command(OUTPUT ${_target}
|
||||
COMMAND ${QT_DBUSCPP2XML_EXECUTABLE} ${_qt4_dbus_options} ${_in_file} -o ${_target}
|
||||
DEPENDS ${_in_file} VERBATIM
|
||||
)
|
||||
endmacro()
|
||||
|
||||
|
||||
macro(QT4_ADD_DBUS_ADAPTOR _sources _xml_file _include _parentClass) # _optionalBasename _optionalClassName)
|
||||
get_filename_component(_infile ${_xml_file} ABSOLUTE)
|
||||
|
||||
set(_optionalBasename "${ARGV4}")
|
||||
if (_optionalBasename)
|
||||
set(_basename ${_optionalBasename} )
|
||||
else ()
|
||||
string(REGEX REPLACE "(.*[/\\.])?([^\\.]+)\\.xml" "\\2adaptor" _basename ${_infile})
|
||||
string(TOLOWER ${_basename} _basename)
|
||||
endif ()
|
||||
|
||||
set(_optionalClassName "${ARGV5}")
|
||||
set(_header "${CMAKE_CURRENT_BINARY_DIR}/${_basename}.h")
|
||||
set(_impl "${CMAKE_CURRENT_BINARY_DIR}/${_basename}.cpp")
|
||||
set(_moc "${CMAKE_CURRENT_BINARY_DIR}/${_basename}.moc")
|
||||
|
||||
if(_optionalClassName)
|
||||
add_custom_command(OUTPUT "${_impl}" "${_header}"
|
||||
COMMAND ${QT_DBUSXML2CPP_EXECUTABLE} -m -a ${_basename} -c ${_optionalClassName} -i ${_include} -l ${_parentClass} ${_infile}
|
||||
DEPENDS ${_infile} VERBATIM
|
||||
)
|
||||
else()
|
||||
add_custom_command(OUTPUT "${_impl}" "${_header}"
|
||||
COMMAND ${QT_DBUSXML2CPP_EXECUTABLE} -m -a ${_basename} -i ${_include} -l ${_parentClass} ${_infile}
|
||||
DEPENDS ${_infile} VERBATIM
|
||||
)
|
||||
endif()
|
||||
|
||||
QT4_GENERATE_MOC("${_header}" "${_moc}")
|
||||
set_source_files_properties("${_impl}" PROPERTIES SKIP_AUTOMOC TRUE)
|
||||
MACRO_ADD_FILE_DEPENDENCIES("${_impl}" "${_moc}")
|
||||
|
||||
list(APPEND ${_sources} "${_impl}" "${_header}" "${_moc}")
|
||||
endmacro()
|
||||
|
||||
|
||||
macro(QT4_AUTOMOC)
|
||||
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.
|
||||
# This is required to make uic 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 "# *include +[^ ]+\\.moc[\">]" _match "${_contents}")
|
||||
if(_match)
|
||||
foreach (_current_MOC_INC ${_match})
|
||||
string(REGEX MATCH "[^ <\"]+\\.moc" _current_MOC "${_current_MOC_INC}")
|
||||
|
||||
get_filename_component(_basename ${_current_MOC} NAME_WE)
|
||||
if(EXISTS ${_abs_PATH}/${_basename}.hpp)
|
||||
set(_header ${_abs_PATH}/${_basename}.hpp)
|
||||
else()
|
||||
set(_header ${_abs_PATH}/${_basename}.h)
|
||||
endif()
|
||||
set(_moc ${CMAKE_CURRENT_BINARY_DIR}/${_current_MOC})
|
||||
QT4_CREATE_MOC_COMMAND(${_header} ${_moc} "${_moc_INCS}" "")
|
||||
MACRO_ADD_FILE_DEPENDENCIES(${_abs_FILE} ${_moc})
|
||||
endforeach ()
|
||||
endif()
|
||||
endif ()
|
||||
endforeach ()
|
||||
endmacro()
|
||||
|
||||
|
||||
macro(QT4_CREATE_TRANSLATION _qm_files)
|
||||
QT4_EXTRACT_OPTIONS(_lupdate_files _lupdate_options ${ARGN})
|
||||
set(_my_sources)
|
||||
set(_my_dirs)
|
||||
set(_my_tsfiles)
|
||||
set(_ts_pro)
|
||||
foreach (_file ${_lupdate_files})
|
||||
get_filename_component(_ext ${_file} EXT)
|
||||
get_filename_component(_abs_FILE ${_file} ABSOLUTE)
|
||||
if(_ext MATCHES "ts")
|
||||
list(APPEND _my_tsfiles ${_abs_FILE})
|
||||
else()
|
||||
if(NOT _ext)
|
||||
list(APPEND _my_dirs ${_abs_FILE})
|
||||
else()
|
||||
list(APPEND _my_sources ${_abs_FILE})
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
foreach(_ts_file ${_my_tsfiles})
|
||||
if(_my_sources)
|
||||
# make a .pro file to call lupdate on, so we don't make our commands too
|
||||
# long for some systems
|
||||
get_filename_component(_ts_name ${_ts_file} NAME_WE)
|
||||
set(_ts_pro ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${_ts_name}_lupdate.pro)
|
||||
set(_pro_srcs)
|
||||
foreach(_pro_src ${_my_sources})
|
||||
set(_pro_srcs "${_pro_srcs} \"${_pro_src}\"")
|
||||
endforeach()
|
||||
set(_pro_includes)
|
||||
get_directory_property(_inc_DIRS INCLUDE_DIRECTORIES)
|
||||
foreach(_pro_include ${_inc_DIRS})
|
||||
get_filename_component(_abs_include "${_pro_include}" ABSOLUTE)
|
||||
set(_pro_includes "${_pro_includes} \"${_abs_include}\"")
|
||||
endforeach()
|
||||
file(WRITE ${_ts_pro} "SOURCES = ${_pro_srcs}\nINCLUDEPATH = ${_pro_includes}\n")
|
||||
endif()
|
||||
add_custom_command(OUTPUT ${_ts_file}
|
||||
COMMAND ${QT_LUPDATE_EXECUTABLE}
|
||||
ARGS ${_lupdate_options} ${_ts_pro} ${_my_dirs} -ts ${_ts_file}
|
||||
DEPENDS ${_my_sources} ${_ts_pro} VERBATIM)
|
||||
endforeach()
|
||||
QT4_ADD_TRANSLATION(${_qm_files} ${_my_tsfiles})
|
||||
endmacro()
|
||||
|
||||
|
||||
macro(QT4_ADD_TRANSLATION _qm_files)
|
||||
foreach (_current_FILE ${ARGN})
|
||||
get_filename_component(_abs_FILE ${_current_FILE} ABSOLUTE)
|
||||
get_filename_component(qm ${_abs_FILE} NAME_WE)
|
||||
get_source_file_property(output_location ${_abs_FILE} OUTPUT_LOCATION)
|
||||
if(output_location)
|
||||
file(MAKE_DIRECTORY "${output_location}")
|
||||
set(qm "${output_location}/${qm}.qm")
|
||||
else()
|
||||
set(qm "${CMAKE_CURRENT_BINARY_DIR}/${qm}.qm")
|
||||
endif()
|
||||
|
||||
add_custom_command(OUTPUT ${qm}
|
||||
COMMAND ${QT_LRELEASE_EXECUTABLE}
|
||||
ARGS ${_abs_FILE} -qm ${qm}
|
||||
DEPENDS ${_abs_FILE} VERBATIM
|
||||
)
|
||||
set(${_qm_files} ${${_qm_files}} ${qm})
|
||||
endforeach ()
|
||||
endmacro()
|
||||
|
||||
function(qt4_use_modules _target _link_type)
|
||||
if ("${_link_type}" STREQUAL "LINK_PUBLIC" OR "${_link_type}" STREQUAL "LINK_PRIVATE")
|
||||
set(modules ${ARGN})
|
||||
set(link_type ${_link_type})
|
||||
else()
|
||||
set(modules ${_link_type} ${ARGN})
|
||||
endif()
|
||||
foreach(_module ${modules})
|
||||
string(TOUPPER ${_module} _ucmodule)
|
||||
if (NOT QT_QT${_ucmodule}_FOUND)
|
||||
message(FATAL_ERROR "Can not use \"${_module}\" module which has not yet been found.")
|
||||
endif()
|
||||
if ("${_ucmodule}" STREQUAL "MAIN")
|
||||
message(FATAL_ERROR "Can not use \"${_module}\" module with qt4_use_modules.")
|
||||
endif()
|
||||
target_link_libraries(${_target} ${link_type} ${QT_QT${_ucmodule}_LIBRARY})
|
||||
set_property(TARGET ${_target} APPEND PROPERTY INCLUDE_DIRECTORIES ${QT_QT${_ucmodule}_INCLUDE_DIR} ${QT_HEADERS_DIR} ${QT_MKSPECS_DIR}/default)
|
||||
set_property(TARGET ${_target} APPEND PROPERTY COMPILE_DEFINITIONS ${QT_QT${_ucmodule}_COMPILE_DEFINITIONS})
|
||||
endforeach()
|
||||
endfunction()
|
Loading…
Reference in New Issue
Block a user