CMakeLists.txt
234 lines
| 7.7 KiB
| text/plain
|
CMakeLexer
florianlink
|
r166 | cmake_minimum_required(VERSION 2.8) | ||
#----------------------------------------------------------------------------- | ||||
project(PythonQt) | ||||
#----------------------------------------------------------------------------- | ||||
florianlink
|
r202 | include(CTestUseLaunchers OPTIONAL) | ||
florianlink
|
r166 | #----------------------------------------------------------------------------- | ||
# Python libraries | ||||
find_package(PythonLibs REQUIRED) | ||||
include_directories("${PYTHON_INCLUDE_DIR}") | ||||
add_definitions(-DPYTHONQT_USE_RELEASE_PYTHON_FALLBACK) | ||||
#----------------------------------------------------------------------------- | ||||
# Build options | ||||
florianlink
|
r202 | 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}) | ||||
florianlink
|
r166 | OPTION(PythonQt_Wrap_Qt${qtlib} "Make all of Qt${qtlib} available in python" OFF) | ||
endforeach() | ||||
florianlink
|
r202 | # 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() | ||||
florianlink
|
r166 | option(PythonQt_DEBUG "Enable/Disable PythonQt debug output" OFF) | ||
if(PythonQt_DEBUG) | ||||
add_definitions(-DPYTHONQT_DEBUG) | ||||
else() | ||||
remove_definitions(-DPYTHONQT_DEBUG) | ||||
endif() | ||||
#----------------------------------------------------------------------------- | ||||
# Setup Qt | ||||
set(minimum_required_qt_version "4.6.2") | ||||
find_package(Qt4) | ||||
if(QT4_FOUND) | ||||
set(found_qt_version ${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}.${QT_VERSION_PATCH}) | ||||
if(${found_qt_version} VERSION_LESS ${minimum_required_qt_version}) | ||||
message(FATAL_ERROR "error: PythonQt requires Qt >= ${minimum_required_qt_version} -- you cannot use Qt ${found_qt_version}.") | ||||
endif() | ||||
# Enable required qt module | ||||
foreach(qtlib network opengl sql svg uitools webkit xml xmlpatterns) | ||||
string(TOUPPER ${qtlib} qtlib_uppercase) | ||||
if (NOT ${QT_QT${qtlib_uppercase}_FOUND}) | ||||
message(FATAL_ERROR "QT_QT${${qtlib_uppercase} *not* FOUND - Try to disable PythonQt_Wrap_Qt${qtlib}") | ||||
endif() | ||||
set(QT_USE_QT${qtlib_uppercase} ${PythonQt_Wrap_Qt${qtlib}}) | ||||
endforeach() | ||||
include(${QT_USE_FILE}) | ||||
else() | ||||
message(FATAL_ERROR "error: Qt4 was not found on your system. You probably need to set the QT_QMAKE_EXECUTABLE variable") | ||||
endif() | ||||
florianlink
|
r202 | #----------------------------------------------------------------------------- | ||
# 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() | ||||
florianlink
|
r166 | #----------------------------------------------------------------------------- | ||
# Sources | ||||
set(sources | ||||
src/PythonQtClassInfo.cpp | ||||
src/PythonQtClassWrapper.cpp | ||||
src/PythonQtConversion.cpp | ||||
src/PythonQt.cpp | ||||
src/PythonQtImporter.cpp | ||||
src/PythonQtInstanceWrapper.cpp | ||||
src/PythonQtMethodInfo.cpp | ||||
src/PythonQtMisc.cpp | ||||
src/PythonQtObjectPtr.cpp | ||||
src/PythonQtQFileImporter.cpp | ||||
src/PythonQtSignalReceiver.cpp | ||||
src/PythonQtSlot.cpp | ||||
florianlink
|
r181 | src/PythonQtSignal.cpp | ||
florianlink
|
r166 | src/PythonQtStdDecorators.cpp | ||
src/PythonQtStdIn.cpp | ||||
src/PythonQtStdOut.cpp | ||||
src/gui/PythonQtScriptingConsole.cpp | ||||
florianlink
|
r202 | generated_cpp${generated_cpp_suffix}/PythonQt_QtBindings.cpp | ||
florianlink
|
r166 | |||
florianlink
|
r202 | generated_cpp${generated_cpp_suffix}/com_trolltech_qt_core_builtin/com_trolltech_qt_core_builtin0.cpp | ||
generated_cpp${generated_cpp_suffix}/com_trolltech_qt_core_builtin/com_trolltech_qt_core_builtin_init.cpp | ||||
generated_cpp${generated_cpp_suffix}/com_trolltech_qt_gui_builtin/com_trolltech_qt_gui_builtin0.cpp | ||||
generated_cpp${generated_cpp_suffix}/com_trolltech_qt_gui_builtin/com_trolltech_qt_gui_builtin_init.cpp | ||||
florianlink
|
r166 | ) | ||
#----------------------------------------------------------------------------- | ||||
# List headers. This is list is used for the install command. | ||||
set(headers | ||||
src/PythonQtClassInfo.h | ||||
src/PythonQtClassWrapper.h | ||||
src/PythonQtConversion.h | ||||
src/PythonQtCppWrapperFactory.h | ||||
src/PythonQtDoc.h | ||||
src/PythonQt.h | ||||
src/PythonQtImporter.h | ||||
src/PythonQtImportFileInterface.h | ||||
src/PythonQtInstanceWrapper.h | ||||
src/PythonQtMethodInfo.h | ||||
src/PythonQtMisc.h | ||||
src/PythonQtObjectPtr.h | ||||
src/PythonQtQFileImporter.h | ||||
src/PythonQtSignalReceiver.h | ||||
src/PythonQtSlot.h | ||||
florianlink
|
r182 | src/PythonQtSignal.h | ||
florianlink
|
r166 | src/PythonQtStdDecorators.h | ||
src/PythonQtStdIn.h | ||||
src/PythonQtStdOut.h | ||||
src/PythonQtSystem.h | ||||
src/PythonQtVariants.h | ||||
src/PythonQtPythonInclude.h | ||||
florianlink
|
r202 | generated_cpp${generated_cpp_suffix}/PythonQt_QtBindings.h | ||
florianlink
|
r166 | ) | ||
#----------------------------------------------------------------------------- | ||||
# Headers that should run through moc | ||||
set(moc_sources | ||||
src/PythonQt.h | ||||
src/PythonQtSignalReceiver.h | ||||
src/PythonQtStdDecorators.h | ||||
src/gui/PythonQtScriptingConsole.h | ||||
florianlink
|
r202 | generated_cpp${generated_cpp_suffix}/com_trolltech_qt_core_builtin/com_trolltech_qt_core_builtin0.h | ||
generated_cpp${generated_cpp_suffix}/com_trolltech_qt_gui_builtin/com_trolltech_qt_gui_builtin0.h | ||||
florianlink
|
r166 | ) | ||
#----------------------------------------------------------------------------- | ||||
# 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}) | ||||
florianlink
|
r202 | set(file_prefix generated_cpp${generated_cpp_suffix}/com_trolltech_qt_${qtlib}/com_trolltech_qt_${qtlib}) | ||
florianlink
|
r166 | |||
florianlink
|
r202 | foreach(index RANGE 0 11) | ||
florianlink
|
r166 | |||
# 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() | ||||
#----------------------------------------------------------------------------- | ||||
# UI files | ||||
set(ui_sources ) | ||||
#----------------------------------------------------------------------------- | ||||
# Resources | ||||
set(qrc_sources ) | ||||
#----------------------------------------------------------------------------- | ||||
# Do wrapping | ||||
qt4_wrap_cpp(gen_moc_sources ${moc_sources}) | ||||
qt4_wrap_ui(gen_ui_sources ${ui_sources}) | ||||
qt4_add_resources(gen_qrc_sources ${qrc_sources}) | ||||
#----------------------------------------------------------------------------- | ||||
# Build the library | ||||
include_directories( | ||||
${CMAKE_CURRENT_SOURCE_DIR}/src | ||||
) | ||||
add_library(PythonQt SHARED | ||||
${sources} | ||||
${gen_moc_sources} | ||||
${gen_ui_sources} | ||||
${gen_qrc_sources} | ||||
) | ||||
set_target_properties(PythonQt PROPERTIES DEFINE_SYMBOL PYTHONQT_EXPORTS) | ||||
# | ||||
# That should solve linkage error on Mac when the project is used in a superbuild setup | ||||
# See http://blog.onesadcookie.com/2008/01/installname-magic.html | ||||
# | ||||
set_target_properties(PythonQt PROPERTIES | ||||
INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib" | ||||
) | ||||
target_link_libraries(PythonQt | ||||
${PYTHON_LIBRARY} | ||||
${QT_LIBRARIES} | ||||
) | ||||
#----------------------------------------------------------------------------- | ||||
# Install library (on windows, put the dll in 'bin' and the archive in 'lib') | ||||
install(TARGETS PythonQt | ||||
RUNTIME DESTINATION bin | ||||
LIBRARY DESTINATION lib | ||||
ARCHIVE DESTINATION lib) | ||||
install(FILES ${headers} DESTINATION include/PythonQt) | ||||