diff options
-rw-r--r-- | CMakeLists.txt | 37 | ||||
-rw-r--r-- | PySide2/CMakeLists.txt | 251 | ||||
-rw-r--r-- | PySide2/global.h.in | 82 | ||||
-rw-r--r-- | tests/CMakeLists.txt | 44 |
4 files changed, 92 insertions, 322 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 4e9a8919..89d4dc7c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -104,7 +104,7 @@ if (UNIX AND NOT APPLE) endif () find_package(Shiboken2 2.0.0 REQUIRED) -find_package(Qt5 5.3.0 REQUIRED COMPONENTS Core) +find_package(Qt5 5.6.0 REQUIRED COMPONENTS Core) add_definitions(${Qt5Core_DEFINITIONS}) find_file(GL_H "gl.h" PATH_SUFFIXES "GL") @@ -188,38 +188,6 @@ else() CACHE STRING "PySide version [full]" FORCE) endif() -find_package(Qt5Core) -find_package(Qt5Concurrent) # new in Qt5, from QtCore -find_package(Qt5Gui) # reduced, small version without widgets -find_package(Qt5Widgets) # widgets in their separate module -find_package(Qt5PrintSupport) -find_package(Qt5Xml) -find_package(Qt5XmlPatterns) -find_package(Qt5Svg) -find_package(Qt5Sql) -find_package(Qt5Designer) -find_package(Qt5UiTools) -find_package(Qt5Test) -find_package(Qt5Network) -find_package(Qt5WebKit) -find_package(Qt5WebKitWidgets) -find_package(Qt5OpenGL) -find_package(Qt5Script) -find_package(Qt5ScriptTools) -find_package(Qt5Help) -find_package(Qt5Multimedia) -find_package(Qt5Quick) -find_package(Qt5Qml) -find_package(Qt5QuickWidgets) -find_package(Qt5WebChannel) -find_package(Qt5WebEngine) -find_package(Qt5WebEngineWidgets) -find_package(Qt5WebSockets) - -if(UNIX AND NOT APPLE) - find_package(Qt5X11Extras) # new in Qt5, from QtGui -endif() - string(REGEX MATCHALL "[0-9]+" qt_version_helper "${Qt5Core_VERSION}") list(GET qt_version_helper 0 QT_VERSION_MAJOR) @@ -316,9 +284,12 @@ else() endif() add_subdirectory(libpyside) +find_package(Qt5UiTools) +find_package(Qt5Designer) if(Qt5UiTools_FOUND AND Qt5Designer_FOUND) add_subdirectory(plugins) endif() + # project directories add_subdirectory(PySide2) if (BUILD_TESTS) diff --git a/PySide2/CMakeLists.txt b/PySide2/CMakeLists.txt index 0fe42ce6..d016bc3a 100644 --- a/PySide2/CMakeLists.txt +++ b/PySide2/CMakeLists.txt @@ -2,64 +2,21 @@ project(pyside2) include(PySideModules) -find_package(Qt5Core) -find_package(Qt5Concurrent) -find_package(Qt5Gui) -find_package(Qt5Widgets) -find_package(Qt5PrintSupport) -find_package(Qt5Network) -find_package(Qt5WebKit) -find_package(Qt5WebKitWidgets) -find_package(Qt5Xml) -find_package(Qt5XmlPatterns) -find_package(Qt5Svg) -find_package(Qt5Test) -find_package(Qt5Sql) -find_package(Qt5Designer) -find_package(Qt5OpenGL) -find_package(Qt5UiTools) -find_package(Qt5Help) -find_package(Qt5Script) -find_package(Qt5ScriptTools) -find_package(Qt5Multimedia) -find_package(Qt5MultimediaWidgets) -find_package(Qt5Qml) -find_package(Qt5Quick) -find_package(Qt5QuickWidgets) -find_package(Qt5WebChannel) -find_package(Qt5WebEngine) -find_package(Qt5WebEngineWidgets) -find_package(Qt5WebSockets) - -if(UNIX AND NOT APPLE) - find_package(Qt5X11Extras) -endif() - -if(WIN32) - find_package(Qt5WinExtras) -endif() - -if(APPLE) - find_package(Qt5MacExtras) -endif() - -# Configure include based on platform -configure_file("${CMAKE_CURRENT_SOURCE_DIR}/global.h.in" - "${CMAKE_CURRENT_BINARY_DIR}/pyside2_global.h" @ONLY) - -configure_file("${CMAKE_CURRENT_SOURCE_DIR}/__init__.py.in" - "${CMAKE_CURRENT_BINARY_DIR}/__init__.py" @ONLY) - -configure_file("${CMAKE_CURRENT_SOURCE_DIR}/_utils.py.in" - "${CMAKE_CURRENT_BINARY_DIR}/_utils.py" @ONLY) - -macro(CHECK_PACKAGE_FOUND name) +macro(COLLECT_MODULE_IF_FOUND shortname) + set(name "Qt5${shortname}") + find_package(${name}) set(_name_found "${name}_FOUND") if(${_name_found}) - message("module ${name} found") + message(STATUS "module ${name} found (${ARGN})") # Hoist this to the parent scope to make sure all tests get built set("${name}_FOUND" 1 PARENT_SCOPE) + # also put the module at the end of pyside2_global.h + file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/pyside2_global.h.add" + "#include \"Qt${shortname}/Qt${shortname}\"\n") + # record the shortnames for the tests + list(APPEND all_module_shortnames ${shortname}) + set(all_module_shortnames ${all_module_shortnames} PARENT_SCOPE) else() if("${ARGN}" STREQUAL "opt") message(STATUS "optional module ${name} skipped") @@ -72,98 +29,18 @@ macro(CHECK_PACKAGE_FOUND name) endif() endmacro() -##### -# This macro was needed to skip classes which did not build, yet. -# It replaces shiboken by a script that filters the missing classes -# away of the xxx_module_wrapper.cpp file. -# You can use it like so: -# -# skip_missing_classes(QtWidgets_SRC) -# create_pyside_module(QtWidgets -# ... -# - -macro(skip_missing_classes sources) - # this line signals postprocessing to macro "create_pyside_module". - set(${sources}_skipped_files 1) - # you just need to pass exactly the same sources variable. - string(REPLACE ";" "\n" _escaped_sources "${${sources}}") - file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/filter_init.py" - "if True: # allow the indentation - files = '''\n${_escaped_sources}\n'''.strip().split('\\n') - import sys, os, re, pprint - pprint.pprint(files) - nset = set() - for fname in files: - name = os.path.splitext(os.path.basename(fname))[0] - print(name) - if name.endswith('module_wrapper'): - fn = fname - else: - name = name.split('_wrapper') - assert name[1] == '' - nset.add(name[0]) - print(fn) - with open(fn) as f: - lines = f.readlines() - removals = set() - for idx, line in enumerate(lines): - res = re.search(' init_(\\w+)', line) - if res and res.group(1).lower() not in nset: - removals.add(res.group(1)) - lines[idx] = '//' + line - with open(fn, 'w') as f: - f.writelines(lines) - removals = sorted(list(removals)) - print('Removals:', removals) - ") -endmacro() - -CHECK_PACKAGE_FOUND(Qt5Core) -CHECK_PACKAGE_FOUND(Qt5Concurrent essential) -CHECK_PACKAGE_FOUND(Qt5Gui essential) -CHECK_PACKAGE_FOUND(Qt5Widgets essential) -CHECK_PACKAGE_FOUND(Qt5PrintSupport essential) -CHECK_PACKAGE_FOUND(Qt5Xml) -CHECK_PACKAGE_FOUND(Qt5XmlPatterns opt) -CHECK_PACKAGE_FOUND(Qt5Svg opt) -CHECK_PACKAGE_FOUND(Qt5Sql essential) -CHECK_PACKAGE_FOUND(Qt5Designer opt) -CHECK_PACKAGE_FOUND(Qt5UiTools opt) -CHECK_PACKAGE_FOUND(Qt5Test essential) -CHECK_PACKAGE_FOUND(Qt5Network essential) -CHECK_PACKAGE_FOUND(Qt5WebKit opt) -CHECK_PACKAGE_FOUND(Qt5WebKitWidgets opt) -CHECK_PACKAGE_FOUND(Qt5Script opt) -CHECK_PACKAGE_FOUND(Qt5ScriptTools opt) -CHECK_PACKAGE_FOUND(Qt5Help opt) -CHECK_PACKAGE_FOUND(Qt5Multimedia opt) -CHECK_PACKAGE_FOUND(Qt5MultimediaWidgets opt) -CHECK_PACKAGE_FOUND(Qt5Qml opt) -CHECK_PACKAGE_FOUND(Qt5Quick opt) -CHECK_PACKAGE_FOUND(Qt5QuickWidgets opt) -CHECK_PACKAGE_FOUND(Qt5WebChannel opt) -CHECK_PACKAGE_FOUND(Qt5WebEngineWidgets opt) -CHECK_PACKAGE_FOUND(Qt5WebSockets opt) - -if(UNIX AND NOT APPLE) - CHECK_PACKAGE_FOUND(Qt5X11Extras opt) -endif() - -if(WIN32) - CHECK_PACKAGE_FOUND(Qt5WinExtras opt) -endif() - -if(APPLE) - CHECK_PACKAGE_FOUND(Qt5MacExtras opt) -endif() - # note: the order of this list is relevant for dependencies. -# For instance: Qt5Printsupport must come before Qt5WebKitWidgets -HAS_QT_MODULE(Qt5Core_FOUND QtCore) +# For instance: Qt5Printsupport must come before Qt5WebKitWidgets. +COLLECT_MODULE_IF_FOUND(Core) +COLLECT_MODULE_IF_FOUND(Gui essential) +COLLECT_MODULE_IF_FOUND(Widgets essential) +COLLECT_MODULE_IF_FOUND(PrintSupport essential) +COLLECT_MODULE_IF_FOUND(Sql essential) +COLLECT_MODULE_IF_FOUND(Network essential) +COLLECT_MODULE_IF_FOUND(Test essential) if(NOT MSVC) # right now this does not build on windows - HAS_QT_MODULE(Qt5Concurrent_FOUND QtConcurrent) + COLLECT_MODULE_IF_FOUND(Concurrent essential) else() # Note: in order to use this variable in a sibling project (tests), # we need to either make the value persistent like so: @@ -172,61 +49,71 @@ else() # This is preferable, because there are no sticky side effects. set(DISABLE_QtConcurrent 1 PARENT_SCOPE) ENDIF() -HAS_QT_MODULE(Qt5Gui_FOUND QtGui) -HAS_QT_MODULE(Qt5Widgets_FOUND QtWidgets) -# This module is deprecated and should be replaces by QtGui. -# See http://doc.qt.io/qt-5/qtgui-index.html -# Update: We support QtOpenGL now! -# Note: The dependency is wrong: QtWidgets is needed! -HAS_QT_MODULE(Qt5OpenGL_FOUND QtOpenGL) -HAS_QT_MODULE(Qt5PrintSupport_FOUND QtPrintSupport) -HAS_QT_MODULE(Qt5Svg_FOUND QtSvg) -HAS_QT_MODULE(Qt5Sql_FOUND QtSql) -HAS_QT_MODULE(Qt5Network_FOUND QtNetwork) -HAS_QT_MODULE(Qt5Xml_FOUND QtXml) -HAS_QT_MODULE(Qt5XmlPatterns_FOUND QtXmlPatterns) -HAS_QT_MODULE(Qt5Test_FOUND QtTest) -HAS_QT_MODULE(Qt5WebKit_FOUND QtWebKit) +if(UNIX AND NOT APPLE) + COLLECT_MODULE_IF_FOUND(X11Extras essential) +endif() +if(WIN32) + COLLECT_MODULE_IF_FOUND(WinExtras essential) +endif() +if(APPLE) + COLLECT_MODULE_IF_FOUND(MacExtras essential) +endif() +COLLECT_MODULE_IF_FOUND(Xml) +COLLECT_MODULE_IF_FOUND(XmlPatterns opt) +COLLECT_MODULE_IF_FOUND(Help opt) +COLLECT_MODULE_IF_FOUND(Multimedia opt) +COLLECT_MODULE_IF_FOUND(MultimediaWidgets opt) +COLLECT_MODULE_IF_FOUND(OpenGL opt) +COLLECT_MODULE_IF_FOUND(Qml opt) +COLLECT_MODULE_IF_FOUND(Quick opt) +COLLECT_MODULE_IF_FOUND(QuickWidgets opt) +COLLECT_MODULE_IF_FOUND(Script opt) if(NOT MSVC) # right now this does not build on windows - HAS_QT_MODULE(Qt5WebKitWidgets_FOUND QtWebKitWidgets) + COLLECT_MODULE_IF_FOUND(ScriptTools opt) else() - set(DISABLE_QtWebKitWidgets 1 PARENT_SCOPE) + set(DISABLE_QtScriptTools 1 PARENT_SCOPE) ENDIF() - +COLLECT_MODULE_IF_FOUND(Svg opt) if(Qt5Designer_FOUND) - HAS_QT_MODULE(Qt5UiTools_FOUND QtUiTools) + COLLECT_MODULE_IF_FOUND(UiTools opt) else() set(DISABLE_QtUiTools 1 PARENT_SCOPE) endif() -HAS_QT_MODULE(Qt5Script_FOUND QtScript) +COLLECT_MODULE_IF_FOUND(WebChannel opt) +# still forgotten: +#COLLECT_MODULE_IF_FOUND(WebEngineCore opt) +#COLLECT_MODULE_IF_FOUND(WebEngine opt) +COLLECT_MODULE_IF_FOUND(WebEngineWidgets opt) +COLLECT_MODULE_IF_FOUND(WebKit opt) if(NOT MSVC) # right now this does not build on windows - HAS_QT_MODULE(Qt5ScriptTools_FOUND QtScriptTools) + COLLECT_MODULE_IF_FOUND(WebKitWidgets opt) else() - set(DISABLE_QtScriptTools 1 PARENT_SCOPE) + set(DISABLE_QtWebKitWidgets 1 PARENT_SCOPE) ENDIF() -HAS_QT_MODULE(Qt5Help_FOUND QtHelp) -HAS_QT_MODULE(Qt5Multimedia_FOUND QtMultimedia) -HAS_QT_MODULE(Qt5MultimediaWidgets_FOUND QtMultimediaWidgets) -HAS_QT_MODULE(Qt5Qml_FOUND QtQml) -HAS_QT_MODULE(Qt5Quick_FOUND QtQuick) -HAS_QT_MODULE(Qt5QuickWidgets_FOUND QtQuickWidgets) -HAS_QT_MODULE(Qt5WebChannel_FOUND QtWebChannel) -HAS_QT_MODULE(Qt5WebEngineWidgets_FOUND QtWebEngineWidgets) -HAS_QT_MODULE(Qt5WebSockets_FOUND QtWebSockets) +COLLECT_MODULE_IF_FOUND(WebSockets opt) -if(UNIX AND NOT APPLE) - has_qt_module(Qt5X11Extras_FOUND QtX11Extras) -endif() +# Configure include based on platform +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/global.h.in" + "${CMAKE_CURRENT_BINARY_DIR}/pyside2_global.h" @ONLY) -if(WIN32) - has_qt_module(Qt5WinExtras_FOUND QtWinExtras) -endif() +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/__init__.py.in" + "${CMAKE_CURRENT_BINARY_DIR}/__init__.py" @ONLY) -if(APPLE) - has_qt_module(Qt5MacExtras_FOUND QtMacExtras) -endif() +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/_utils.py.in" + "${CMAKE_CURRENT_BINARY_DIR}/_utils.py" @ONLY) + +# Add the collected includes to the global include +file(READ "${CMAKE_CURRENT_BINARY_DIR}/pyside2_global.h.add" GLOBAL_APPEND) +file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/pyside2_global.h" "${GLOBAL_APPEND}") +file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/pyside2_global.h.add") + +# now compile all modules. +foreach(shortname IN LISTS all_module_shortnames) + set(name "Qt5${shortname}") + HAS_QT_MODULE(${name}_FOUND Qt${shortname}) +endforeach() # install install(FILES "${CMAKE_CURRENT_BINARY_DIR}/__init__.py" diff --git a/PySide2/global.h.in b/PySide2/global.h.in index 020c9c19..6bddcfcc 100644 --- a/PySide2/global.h.in +++ b/PySide2/global.h.in @@ -384,97 +384,45 @@ QT_END_NAMESPACE #define QT_NO_DEBUG #include <QtCore/QtCore> -#include <QtConcurrent/QtConcurrent> #if @ENABLE_MAC@ || @ENABLE_WIN@ || @ENABLE_X11@ // Workaround to parse the QApplication header #define Q_INTERNAL_QAPP_SRC #undef Q_QDOC #endif -#include <QtGui/QtGui> -#include <QtWidgets/QtWidgets> +#if @Qt5Gui_FOUND@ +# include <QtGui/QtGui> +#endif +#if @Qt5Widgets_FOUND@ +# include <QtWidgets/QtWidgets> +#endif #ifndef Q_QDOC // Make sure that Q_QDOC is defined for as much modules as possible. // This creates more wrappers without extra work. // Will disappear when we have a really good parser! # define Q_QDOC #endif -#include <QtOpenGL/QtOpenGL> + #include "qpytextobject.h" // PySide class + #if @ENABLE_X11@ -#if @Qt5X11Extras_FOUND@ -#include <QtX11Extras/QX11Info> -#endif +# if @Qt5X11Extras_FOUND@ +# include <QtX11Extras/QX11Info> +# endif #elif @ENABLE_MAC@ - #include <QtGui/qmacstyle_mac.h> +# include <QtGui/qmacstyle_mac.h> #endif -#include <QtXml/QtXml> -#include <QtXmlPatterns/QtXmlPatterns> -#include <QtUiTools/QtUiTools> -#include <QtNetwork/QtNetwork> -#include <QtScript/QtScript> -#include <QtScriptTools/QtScriptTools> -#include <QtMultimedia/QtMultimedia> -#include <QtPrintSupport/QtPrintSupport> // QT_WIDGETS_LIB must be defined to QSqlRelationalDelegate become visible. // It also changes code generation in pysideqtesttouch.h #define QT_WIDGETS_LIB #undef Q_DECLARE_INTERFACE -#include <QtSql/QtSql> -#include <QtSvg/QtSvg> -#if @Qt5WebKit_FOUND@ -# include <QtWebKit/QtWebKit> -#endif - -#if @Qt5WebKitWidgets_FOUND@ -# include <QtWebKitWidgets/QtWebKitWidgets> -#endif #if @Qt5Test_FOUND@ -# include <QtTest/qtest_gui.h> # include "pysideqtesttouch.h" #endif -#if @Qt5Quick_FOUND@ -# include <QtQuick/QtQuick> -#endif - -#if @Qt5Qml_FOUND@ -# include <QtQml/QtQml> -#endif - -#if @Qt5QuickWidgets_FOUND@ -# include <QtQuickWidgets/QtQuickWidgets> -#endif - -#if @Qt5WebEngineWidgets_FOUND@ -# include <QtWebEngineWidgets/QtWebEngineWidgets> -#endif - -#if @Qt5MultimediaWidgets_FOUND@ -# include <QtMultimediaWidgets/QtMultimediaWidgets> -#endif - -#if @Qt5WebChannel_FOUND@ -# include <QtWebChannel/QtWebChannel> -#endif - -#if @Qt5WebSockets_FOUND@ -# include <QtWebSockets/QtWebSockets> -#endif - -#if @Qt5WinExtras_FOUND@ -# include <QtWinExtras/QtWinExtras> -#endif - -#if @Qt5MacExtras_FOUND@ -# include <QtMacExtras/QtMacExtras> -#endif - -//QtHelp needs to be included after QtSql. Why? -#include <QtHelp/QtHelp> - #ifndef QT_NO_OPENGL -#include <@GL_H@> -#include <QtOpenGL/QtOpenGL> +# include <@GL_H@> #endif // QT_NO_OPENGL + +// Here are now all configured modules appended: diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 5fe2d7db..2b7e3b0e 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -49,46 +49,10 @@ else() add_subdirectory(pysidetest) add_subdirectory(signals) - TEST_QT_MODULE(Qt5Core_FOUND QtCore) - TEST_QT_MODULE(Qt5Concurrent_FOUND QtConcurrent) - TEST_QT_MODULE(Qt5Gui_FOUND QtGui) - TEST_QT_MODULE(Qt5Widgets_FOUND QtWidgets) - TEST_QT_MODULE(Qt5PrintSupport_FOUND QtPrintSupport) - TEST_QT_MODULE(Qt5Network_FOUND QtNetwork) - TEST_QT_MODULE(Qt5WebKit_FOUND QtWebKit) - TEST_QT_MODULE(Qt5WebKitWidgets_FOUND QtWebKitWidgets) - TEST_QT_MODULE(Qt5Xml_FOUND QtXml) - TEST_QT_MODULE(Qt5XmlPatterns_FOUND QtXmlPatterns) - TEST_QT_MODULE(Qt5Svg_FOUND QtSvg) - TEST_QT_MODULE(Qt5Test_FOUND QtTest) - TEST_QT_MODULE(Qt5Sql_FOUND QtSql) - #TEST_QT_MODULE(Qt5Designer_FOUND QtDesigner) - TEST_QT_MODULE(Qt5OpenGL_FOUND QtOpenGL) - TEST_QT_MODULE(Qt5UiTools_FOUND QtUiTools) - TEST_QT_MODULE(Qt5Help_FOUND QtHelp) - TEST_QT_MODULE(Qt5Script_FOUND QtScript) - TEST_QT_MODULE(Qt5ScriptTools_FOUND QtScriptTools) - TEST_QT_MODULE(Qt5Multimedia_FOUND QtMultimedia) - TEST_QT_MODULE(Qt5MultimediaWidgets_FOUND QtMultimediaWidgets) - TEST_QT_MODULE(Qt5Qml_FOUND QtQml) - TEST_QT_MODULE(Qt5Quick_FOUND QtQuick) - TEST_QT_MODULE(Qt5QuickWidgets_FOUND QtQuickWidgets) - TEST_QT_MODULE(Qt5WebChannel_FOUND QtWebChannel) - #TEST_QT_MODULE(Qt5WebEngine_FOUND QtWebEngine) - TEST_QT_MODULE(Qt5WebEngineWidgets_FOUND QtWebEngineWidgets) - TEST_QT_MODULE(Qt5WebSockets_FOUND QtWebSockets) - - if(UNIX AND NOT APPLE) - TEST_QT_MODULE(Qt5X11Extras_FOUND QtX11Extras) - endif() - - if(WIN32) - TEST_QT_MODULE(Qt5WinExtras_FOUND QtWinExtras) - endif() - - if(APPLE) - TEST_QT_MODULE(Qt5MacExtras_FOUND QtMacExtras) - endif() + foreach(shortname IN LISTS all_module_shortnames) + message(STATUS "preparing tests for module 'Qt${shortname}'") + TEST_QT_MODULE(Qt5${shortname}_FOUND Qt${shortname}) + endforeach() #platform specific if (ENABLE_MAC) |