project(PythonQt) cmake_minimum_required(VERSION 2.8.10) IF(POLICY CMP0020) cmake_policy(SET CMP0020 NEW) ENDIF() include(CTestUseLaunchers OPTIONAL) set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH}) #----------------------------------------------------------------------------- # Version SET(PythonQt_VERSION 2.2.0) #----------------------------------------------------------------------------- # Debug option(PythonQt_DEBUG "Enable/Disable PythonQt debug output" OFF) if(PythonQt_DEBUG) add_definitions(-DPYTHONQT_DEBUG) else() remove_definitions(-DPYTHONQT_DEBUG) endif() if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release) endif() #----------------------------------------------------------------------------- # Qt option(PythonQt_Qt5 "Use Qt 5.x" OFF) if(PythonQt_Qt5) include(PythonQt_Qt_5x) else(PythonQt_Qt5) include(PythonQt_Qt_4x) endif(PythonQt_Qt5) #----------------------------------------------------------------------------- # The variable "generated_cpp_suffix" allows to conditionnally compile the generated wrappers # associated with the Qt version being used. set(generated_cpp_suffix "_${QT_VERSION_MAJOR}${QT_VERSION_MINOR}") if("${generated_cpp_suffix}" STREQUAL "_48") set(generated_cpp_suffix "") endif() if("${generated_cpp_suffix}" STREQUAL "_46") set(generated_cpp_suffix "_47") # Also use 4.7 wrappers for 4.6.x version endif() if("${generated_cpp_suffix}" STREQUAL "_51") set(generated_cpp_suffix "_50") endif() #----------------------------------------------------------------------------- # Generator if(PythonQt_Qt5) add_subdirectory(generator_50 EXCLUDE_FROM_ALL) add_custom_target(generator) add_dependencies(generator pythonqt_generator) endif() # TODO #----------------------------------------------------------------------------- # Build options #option(PythonQt_Wrap_QtAll "Make all Qt components available in python" OFF) # #set(qtlibs core gui network opengl sql svg uitools webkit xml xmlpatterns) #foreach(qtlib ${qtlibs}) # OPTION(PythonQt_Wrap_Qt${qtlib} "Make all of Qt${qtlib} available in python" OFF) #endforeach() # Force option if it applies #if(PythonQt_Wrap_QtAll) # list(REMOVE_ITEM qtlibs xmlpatterns) # xmlpatterns wrapper does *NOT* build at all :( # foreach(qtlib ${qtlibs}) # if(NOT ${PythonQt_Wrap_Qt${qtlib}}) # set(PythonQt_Wrap_Qt${qtlib} ON CACHE BOOL "Make all of Qt${qtlib} available in python" FORCE) # message(STATUS "Enabling [PythonQt_Wrap_Qt${qtlib}] because of [PythonQt_Wrap_QtAll] evaluates to True") # endif() # endforeach() #endif() #----------------------------------------------------------------------------- # Add extra sources #foreach(qtlib core gui network opengl sql svg uitools webkit xml xmlpatterns) # # if (${PythonQt_Wrap_Qt${qtlib}}) # # ADD_DEFINITIONS(-DPYTHONQT_WRAP_Qt${qtlib}) # # set(file_prefix generated_cpp${generated_cpp_suffix}/com_trolltech_qt_${qtlib}/com_trolltech_qt_${qtlib}) # # foreach(index RANGE 0 11) # # # Source files # if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${file_prefix}${index}.cpp) # list(APPEND sources ${file_prefix}${index}.cpp) # endif() # # # Headers that should run through moc # if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${file_prefix}${index}.h) # list(APPEND moc_sources ${file_prefix}${index}.h) # endif() # # endforeach() # # list(APPEND sources ${file_prefix}_init.cpp) # # endif() #endforeach() #----------------------------------------------------------------------------- # Find Python option(PythonQt_Python3 "Use Python 3.x (3.3+)" OFF) option(PythonQt_Python "Use specific Python Version" OFF) if(PythonQt_Python) find_package(Python ${PythonQt_Python} REQUIRED EXACT) elseif(PythonQt_Python3) find_package(Python 3.3 REQUIRED) else() find_package(Python 2.6 REQUIRED) endif() if(NOT ${PYTHON_VERSION} VERSION_LESS 3) set(PythonQt_Python3 ON) else() set(PythonQt_Python3 OFF) endif() include_directories(${PYTHON_INCLUDE_DIRS}) add_definitions(-DPYTHONQT_USE_RELEASE_PYTHON_FALLBACK) #----------------------------------------------------------------------------- # Library Name # The variable PythonQt contains the PythonQt core library name # It incorporates library mayor versions set(PythonQt PythonQt) if(PythonQt_Qt5) set(PythonQt ${PythonQt}5) endif() if(PythonQt_Python3) set(PythonQt ${PythonQt}_3) endif() set(CMAKE_DEBUG_POSTFIX "_d") message(STATUS "Building ${PythonQt} (Qt ${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}.${QT_VERSION_PATCH} + Python ${PYTHON_VERSION} | ${CMAKE_BUILD_TYPE})") #----------------------------------------------------------------------------- # Core add_subdirectory(src) #----------------------------------------------------------------------------- # Tests add_subdirectory(tests EXCLUDE_FROM_ALL) # test alias add_custom_target(test COMMAND tests/PythonQtTest WORKING_DIRECTORY ${CURRENT_BINARY_DIR}) add_dependencies(test PythonQtTest) #----------------------------------------------------------------------------- # Extenseions (QtAll) add_subdirectory(extensions) # QtAll alias add_custom_target(QtAll) add_dependencies(QtAll ${PythonQt_QtAll}) #----------------------------------------------------------------------------- # Examples include_directories(src) include_directories(extensions/PythonQt_QtAll) add_subdirectory(examples EXCLUDE_FROM_ALL) #----------------------------------------------------------------------------- # uninstall target configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)