From 3c7f55855b45168818ef6fc5e58b30f1c7e4d133 Mon Sep 17 00:00:00 2001 From: renatofilho Date: Thu, 7 Oct 2010 12:15:11 -0300 Subject: Moved cmake macros to a separeted file. Reviewer: Hugo Parente Lima Luciano Wolf --- cmake/Macros/PySideModules.cmake | 112 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 cmake/Macros/PySideModules.cmake (limited to 'cmake/Macros/PySideModules.cmake') diff --git a/cmake/Macros/PySideModules.cmake b/cmake/Macros/PySideModules.cmake new file mode 100644 index 000000000..639a0abd6 --- /dev/null +++ b/cmake/Macros/PySideModules.cmake @@ -0,0 +1,112 @@ +macro(create_pyside_module module_name module_include_dir module_libraries module_deps module_typesystem_path module_sources typesystem_name) + string(TOLOWER ${module_name} _module) + string(REGEX REPLACE ^qt "" _module ${_module}) + if (NOT EXISTS ${typesystem_name}) + set(typesystem_path ${CMAKE_CURRENT_SOURCE_DIR}/typesystem_${_module}.xml) + else() + set(typesystem_path ${typesystem_name}) + endif() + + add_custom_command(OUTPUT ${${module_sources}} + COMMAND ${GENERATORRUNNER_BINARY} ${GENERATOR_EXTRA_FLAGS} + ${CMAKE_BINARY_DIR}/PySide/global.h + --include-paths=${pyside_SOURCE_DIR}${PATH_SEP}${QT_INCLUDE_DIR} + --typesystem-paths=${pyside_SOURCE_DIR}${PATH_SEP}${${module_typesystem_path}} + --output-directory=${CMAKE_CURRENT_BINARY_DIR} + --license-file=${CMAKE_CURRENT_SOURCE_DIR}/../licensecomment.txt + ${typesystem_path} + --api-version=${SUPPORTED_QT_VERSION} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT "Running generator for ${module_name}...") + + include_directories(${module_name} ${${module_include_dir}} ${pyside_SOURCE_DIR}) + add_library(${module_name} MODULE ${${module_sources}} ${${ARGN}}) + set_target_properties(${module_name} PROPERTIES PREFIX "" LIBRARY_OUTPUT_DIRECTORY ${pyside_BINARY_DIR}) + if(WIN32) + set_target_properties(${module_name} PROPERTIES SUFFIX ".pyd") + set(${module_name}_suffix ".pyd") + else() + set(${module_name}_suffix ".so") + endif() + target_link_libraries(${module_name} ${${module_libraries}}) + if(${module_deps}) + add_dependencies(${module_name} ${${module_deps}}) + endif() + + + # install + install(TARGETS ${module_name} LIBRARY DESTINATION ${SITE_PACKAGE}/PySide) + string(TOLOWER ${module_name} lower_module_name) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/PySide/${module_name}/pyside_${lower_module_name}_python.h + DESTINATION include/PySide${pyside_SUFFIX}/${module_name}/) + file(GLOB typesystem_files ${CMAKE_CURRENT_SOURCE_DIR}/typesystem_*.xml ${typesystem_path}) + install(FILES ${typesystem_files} DESTINATION share/PySide${pyside_SUFFIX}/typesystems) +endmacro() + +#macro(check_qt_class_with_namespace module namespace class global_sources [namespace]) +macro(check_qt_class module class global_sources) + if (${ARGC} GREATER 3) + set (namespace ${ARGV3}) + string(TOLOWER ${namespace} _namespace) + else () + set (namespace "") + endif () + if (${ARGC} GREATER 4) + set (include_file ${ARGV4}) + else () + set (include_file ${module}) + endif () + string(TOLOWER ${class} _class) + string(TOUPPER ${module} _module) + if (${namespace}) + set(_cppfile ${CMAKE_CURRENT_BINARY_DIR}/PySide/${module}/${_namespace}_${_class}_wrapper.cpp) + else () + set(_cppfile ${CMAKE_CURRENT_BINARY_DIR}/PySide/${module}/${_class}_wrapper.cpp) + endif () + if (DEFINED PYSIDE_${class}) + if (PYSIDE_${class}) + list(APPEND ${global_sources} ${_cppfile}) + endif() + else() + if (NOT ${namespace} STREQUAL "" ) + set (NAMESPACE_USE "using namespace ${namespace};") + else () + set (NAMESPACE_USE "") + endif () + set(SRC_FILE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/test${class}.cxx) + file(WRITE ${SRC_FILE} + "#include <${include_file}>\n" + "#include \n" + "${NAMESPACE_USE}\n" + "int main() { typeid(${class}); }\n" + ) + try_compile(Q_WORKS ${CMAKE_BINARY_DIR} + ${SRC_FILE} + CMAKE_FLAGS + "-DLINK_LIBRARIES=${QT_${_module}_LIBRARY}" + "-DLINK_DIRECTORIES=${QT_LIBRARY_DIR}" + "-DINCLUDE_DIRECTORIES=${QT_INCLUDE_DIR};${QT_${_module}_INCLUDE_DIR}" + OUTPUT_VARIABLE OUTPUT) + file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeCheckQtClassTest.log ${OUTPUT}) + + set("PYSIDE_${class}" ${Q_WORKS} CACHE STRING "Has ${class} class been found?") + if(Q_WORKS) + message(STATUS "Checking for ${class} in ${module} -- found") + list(APPEND ${global_sources} ${_cppfile}) + else() + message(STATUS "Checking for ${class} in ${module} -- not found") + endif() + endif() +endmacro() + + +# Only add subdirectory if the associated Qt module is found. +macro(HAS_QT_MODULE var name) + if (NOT DISABLE_${name} AND ${var}) + add_subdirectory(${name}) + else() + # Used on documentation to skip modules + set("if_${name}" "" PARENT_SCOPE) + endif() +endmacro() -- cgit v1.2.3