diff options
Diffstat (limited to 'PySide2/CMakeLists.txt')
-rw-r--r-- | PySide2/CMakeLists.txt | 239 |
1 files changed, 71 insertions, 168 deletions
diff --git a/PySide2/CMakeLists.txt b/PySide2/CMakeLists.txt index 72ce3501..d016bc3a 100644 --- a/PySide2/CMakeLists.txt +++ b/PySide2/CMakeLists.txt @@ -2,56 +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() - -# 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") @@ -64,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) - fix_header_fname = '${CMAKE_CURRENT_SOURCE_DIR}/fixup_headers.py' - if sys.platform == 'win32' and os.path.exists(fix_header_fname): - global target_dir - target_dir = '${${PROJECT_NAME}_GEN_DIR}' - - with open(fix_header_fname) as f: - code = compile(f.read(), 'nebbich', 'exec') - exec(code, globals(), locals()) - ") -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() - # 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: @@ -164,53 +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) + +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) + +# 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" |