diff --git a/.github/actions/build-qt5-for-arm64/action.yml b/.github/actions/build-qt5-for-arm64/action.yml index 66335745..b07e840f 100644 --- a/.github/actions/build-qt5-for-arm64/action.yml +++ b/.github/actions/build-qt5-for-arm64/action.yml @@ -4,6 +4,12 @@ inputs: qt-version: description: 'Qt version to build' required: true + qt-version-short: + description: 'Qt version to build major.minor' + required: true + vfx-platform: + description: 'VFX Platform' + required: true python3-version: description: 'Python 3 version' required: true @@ -93,9 +99,17 @@ runs: shell: bash - name: Download Qt ${{ inputs.qt-version }} source - if: steps.arm64-qt.outputs.cache-hit != 'true' + if: steps.arm64-qt.outputs.cache-hit != 'true' && matrix.vfx-platform == 'CY2023' + run: | + curl https://www.nic.funet.fi/pub/mirrors/download.qt-project.org/official_releases/qt/${{ inputs.qt-version-short }}/${{ inputs.qt-version }}/single/qt-everywhere-opensource-src-${{ inputs.qt-version }}.tar.xz -o qt.tar.xz + tar xf qt.tar.xz + mv qt-everywhere-src-${{ inputs.qt-version }} qt-src + shell: bash + + - name: Download Qt ${{ inputs.qt-version }} source + if: steps.arm64-qt.outputs.cache-hit != 'true' && matrix.vfx-platform == 'CY2024' run: | - curl https://www.nic.funet.fi/pub/mirrors/download.qt-project.org/official_releases/qt/5.15/${{ inputs.qt-version }}/single/qt-everywhere-opensource-src-${{ inputs.qt-version }}.tar.xz -o qt.tar.xz + curl https://www.nic.funet.fi/pub/mirrors/download.qt-project.org/official_releases/qt/${{ inputs.qt-version-short }}/${{ inputs.qt-version }}/single/qt-everywhere-src-${{ inputs.qt-version }}.tar.xz -o qt.tar.xz tar xf qt.tar.xz mv qt-everywhere-src-${{ inputs.qt-version }} qt-src shell: bash @@ -115,7 +129,7 @@ runs: -no-rpath \ -opensource \ -plugin-sql-sqlite \ - -openssl \ + -openssl-linked \ -verbose \ -opengl desktop \ -no-warnings-are-errors \ diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b19bf4a5..33b2540e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,6 +31,17 @@ on: env: SKIP_DEPS_CACHE: 'false' + QT5_MODULES: 'debug_info qtcharts qtdatavis3d qtlottie qtnetworkauth qtquick3d qtquicktimeline qtscript qtwebengine qtwebglplugin' + ROCKY_QT5_ARCHIVES: 'icu qt3d qtbase qtconnectivity qtdeclarative qtgraphicaleffects qtimageformats qtlocation qtmultimedia qtquickcontrols qtquickcontrols2 qtremoteobjects qtscxml qtsensors qtsvg qttools qttranslations qtwayland qtwebchannel qtwebsockets qtwebview qtx11extras qtxmlpatterns' + MACOX_X86_64_QT5_ARCHIVES: 'd3dcompiler_47 opengl32sw qt3d qtactiveqt qtbase qtconnectivity qtdeclarative qtgraphicaleffects qtimageformats qtlocation qtmultimedia qtquickcontrols qtquickcontrols2 qtremoteobjects qtscxml qtsensors qtsvg qttools qttranslations qtwebchannel qtwebsockets qtwebview qtwinextras qtxmlpatterns' + WINDOWS_QT5_ARCHIVES: 'd3dcompiler_47 opengl32sw qt3d qtactiveqt qtbase qtconnectivity qtdeclarative qtgraphicaleffects qtimageformats qtlocation qtmultimedia qtquickcontrols qtquickcontrols2 qtremoteobjects qtscxml qtsensors qtsvg qttools qttranslations qtwebchannel qtwebsockets qtwebview qtwinextras qtxmlpatterns' + + ROCKY_QT6_MODULES: 'debug_info qt3d qt5compat qtcharts qtconnectivity qtdatavis3d qtgrpc qthttpserver qtimageformats qtlanguageserver qtlocation qtlottie qtmultimedia qtnetworkauth qtpdf qtpositioning qtquick3d qtquick3dphysics qtquickeffectmaker qtquicktimeline qtremoteobjects qtscxml qtsensors qtserialbus qtserialport qtshadertools qtspeech qtvirtualkeyboard qtwaylandcompositor qtwebchannel qtwebengine qtwebsockets qtwebview' + ROCKY_QT6_ARCHIVES: 'icu qtbase qtdeclarative qtsvg qttools qttranslations qtwayland' + MACOX_X86_64_QT6_MODULES: 'debug_info qt3d qt5compat qtcharts qtconnectivity qtdatavis3d qtgrpc qthttpserver qtimageformats qtlanguageserver qtlocation qtlottie qtmultimedia qtnetworkauth qtpdf qtpositioning qtquick3d qtquick3dphysics qtquickeffectmaker qtquicktimeline qtremoteobjects qtscxml qtsensors qtserialbus qtserialport qtshadertools qtspeech qtvirtualkeyboard qtwebchannel qtwebengine qtwebsockets qtwebview' + MACOX_X86_64_QT6_ARCHIVES: 'qtbase qtdeclarative qtsvg qttools qttranslations' + WINDOWS_QT6_MODULES: 'debug_info qt3d qt5compat qtactiveqt qtcharts qtconnectivity qtdatavis3d qtgrpc qthttpserver qtimageformats qtlanguageserver qtlocation qtlottie qtmultimedia qtnetworkauth qtpdf qtpositioning qtquick3d qtquick3dphysics qtquickeffectmaker qtquicktimeline qtremoteobjects qtscxml qtsensors qtserialbus qtserialport qtshadertools qtspeech qtvirtualkeyboard qtwebchannel qtwebengine qtwebsockets qtwebview' + WINDOWS_QT6_ARCHIVES: 'd3dcompiler_47 opengl32sw qtbase qtdeclarative qtsvg qttools qttranslations' jobs: rocky-linux: @@ -50,6 +61,10 @@ jobs: - /usr/share/dotnet:/github/home/dotnet - /opt/ghc:/github/home/ghc - /usr/local/.ghcup:/github/home/.ghcup + - /usr/local/graalvm:/github/home/graalvm + - /usr/local/share/powershell:/github/home/powershell + - /usr/local/share/chromium:/github/home/chromium + - /usr/local/lib/node_modules:/github/home/node_modules strategy: fail-fast: false matrix: @@ -94,6 +109,48 @@ jobs: python-version: "3.11.8" vfx-platform: "CY2023" extra_repo: "crb" + + # CY2024 + - os: "ubuntu-latest" + rocky-version: "8" + image: "amd64/rockylinux:8" + arch-type: "x86_64" + build-type: "Release" + qt-version: "6.5.3" + cmake-version: "3.29.8" + python-version: "3.11.8" + vfx-platform: "CY2024" + extra_repo: "powertools" + - os: "ubuntu-latest" + rocky-version: "9" + image: "amd64/rockylinux:9" + arch-type: "x86_64" + build-type: "Release" + qt-version: "6.5.3" + cmake-version: "3.29.8" + python-version: "3.11.8" + vfx-platform: "CY2024" + extra_repo: "crb" + - os: "ubuntu-latest" + rocky-version: "8" + image: "amd64/rockylinux:8" + arch-type: "x86_64" + build-type: "Debug" + qt-version: "6.5.3" + cmake-version: "3.29.8" + python-version: "3.11.8" + vfx-platform: "CY2024" + extra_repo: "powertools" + - os: "ubuntu-latest" + rocky-version: "9" + image: "amd64/rockylinux:9" + arch-type: "x86_64" + build-type: "Debug" + qt-version: "6.5.3" + cmake-version: "3.29.8" + python-version: "3.11.8" + vfx-platform: "CY2024" + extra_repo: "crb" steps: - name: Display disk space run: | @@ -107,6 +164,10 @@ jobs: rm -rf /github/home/dotnet || true rm -rf /github/home/ghc || true rm -rf /github/home/.ghcup || true + rm -rf /github/home/graalvm || true + rm -rf /github/home/powershell || true + rm -rf /github/home/chromium || true + rm -rf /github/home/node_modules || true - name: Display disk space run: | @@ -117,7 +178,8 @@ jobs: dnf install -y epel-release dnf config-manager --set-enabled ${{ matrix.extra_repo }} devel dnf groupinstall "Development Tools" -y - dnf install -y alsa-lib-devel autoconf automake avahi-compat-libdns_sd-devel bison bzip2-devel cmake-gui curl-devel flex gcc gcc-c++ git libXcomposite libXi-devel libaio-devel libffi-devel nasm ncurses-devel nss libtool libxkbcommon libXcomposite libXdamage libXrandr libXtst libXcursor mesa-libOSMesa mesa-libOSMesa-devel meson openssl-devel patch pulseaudio-libs pulseaudio-libs-glib2 ocl-icd ocl-icd-devel opencl-headers python3 python3-devel qt5-qtbase-devel readline-devel sqlite-devel tcl-devel tcsh tk-devel yasm zip zlib-devel wget + dnf install -y alsa-lib-devel autoconf automake avahi-compat-libdns_sd-devel bison bzip2-devel cmake-gui curl-devel flex gcc gcc-c++ git libXcomposite libXi-devel libaio-devel libffi-devel nasm ncurses-devel nss libtool libxkbcommon libXcomposite libXdamage libXrandr libXtst libXcursor mesa-libOSMesa mesa-libOSMesa-devel meson openssl-devel patch pulseaudio-libs pulseaudio-libs-glib2 ocl-icd ocl-icd-devel opencl-headers python3 python3-devel qt5-qtbase-devel readline-devel sqlite-devel tcl-devel tcsh tk-devel yasm zip zlib-devel wget patchelf pcsc-lite libxkbfile + dnf install -y libX11-devel libXext-devel libXrender-devel libXrandr-devel libXcursor-devel libXi-devel libXxf86vm-devel libxkbcommon-devel dnf install -y xz-devel mesa-libGLU mesa-libGLU-devel - name: Install other system dependencies @@ -173,6 +235,7 @@ jobs: mkdir -p "${{ github.workspace }}/deps" - name: Install Qt ${{ matrix.qt-version }} + if: ${{ matrix.vfx-platform == 'CY2023' }} uses: jurplel/install-qt-action@v4 with: version: '${{ matrix.qt-version }}' @@ -181,8 +244,28 @@ jobs: arch: 'gcc_64' dir: "${{ github.workspace }}/deps" install-deps: 'false' - modules: 'debug_info qtcharts qtdatavis3d qtlottie qtnetworkauth qtquick3d qtquicktimeline qtscript qtwebengine qtwebglplugin' - archives: 'icu qt3d qtbase qtconnectivity qtdeclarative qtgraphicaleffects qtimageformats qtlocation qtmultimedia qtquickcontrols qtquickcontrols2 qtremoteobjects qtscxml qtsensors qtsvg qttools qttranslations qtwayland qtwebchannel qtwebsockets qtwebview qtx11extras qtxmlpatterns' + modules: ${{ env.QT5_MODULES }} + archives: ${{ env.ROCKY_QT5_ARCHIVES }} + # Caching only save 2 minutes. Keep the cache for longer operations. + cache: false + setup-python: 'false' + tools: 'tools_qtcreator' + set-env: 'true' + tools-only: 'false' + aqtversion: '==3.1.*' + + - name: Install Qt ${{ matrix.qt-version }} + if: ${{ matrix.vfx-platform == 'CY2024' }} + uses: jurplel/install-qt-action@v4 + with: + version: '${{ matrix.qt-version }}' + host: 'linux' + target: 'desktop' + arch: 'gcc_64' + dir: "${{ github.workspace }}/deps" + install-deps: 'false' + modules: ${{ env.ROCKY_QT6_MODULES }} + archives: ${{ env.ROCKY_QT6_ARCHIVES }} # Caching only save 2 minutes. Keep the cache for longer operations. cache: false setup-python: 'false' @@ -199,9 +282,16 @@ jobs: # because there is not enough room in the cache (10GB limit) for all platforms. - name: Configure OpenRV + if: ${{ matrix.vfx-platform == 'CY2023' }} run: | export QT_HOME=/__w/OpenRV/OpenRV/deps/Qt/${{ matrix.qt-version}}/gcc_64 cmake -B _build -G "Ninja" -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -DRV_DEPS_QT5_LOCATION=$QT_HOME -DRV_VFX_PLATFORM=${{ matrix.vfx-platform }} + + - name: Configure OpenRV + if: ${{ matrix.vfx-platform == 'CY2024' }} + run: | + export QT_HOME=/__w/OpenRV/OpenRV/deps/Qt/${{ matrix.qt-version}}/gcc_64 + cmake -B _build -G "Ninja" -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -DRV_DEPS_QT6_LOCATION=$QT_HOME -DRV_VFX_PLATFORM=${{ matrix.vfx-platform }} - name: Build OpenRV dependencies run: | @@ -236,26 +326,60 @@ jobs: arch-type: "x86_64" build-type: "Release" qt-version: "5.15.2" + qt-version-short: "5.15" python-version: "3.11" vfx-platform: "CY2023" - os: "macos-14" arch-type: "arm64" build-type: "Release" qt-version: "5.15.15" + qt-version-short: "5.15" python-version: "3.11" vfx-platform: "CY2023" - os: "macos-13" arch-type: "x86_64" build-type: "Debug" qt-version: "5.15.2" + qt-version-short: "5.15" python-version: "3.11" vfx-platform: "CY2023" - os: "macos-14" arch-type: "arm64" build-type: "Debug" qt-version: "5.15.15" + qt-version-short: "5.15" python-version: "3.11" vfx-platform: "CY2023" + + # VFX2024 + - os: "macos-13" + arch-type: "x86_64" + build-type: "Release" + qt-version: "6.5.3" + qt-version-short: "6.5" + python-version: "3.11" + vfx-platform: "CY2024" + - os: "macos-14" + arch-type: "arm64" + build-type: "Release" + qt-version: "6.5.3" + qt-version-short: "6.5" + python-version: "3.11" + vfx-platform: "CY2024" + - os: "macos-13" + arch-type: "x86_64" + build-type: "Debug" + qt-version: "6.5.3" + qt-version-short: "6.5" + python-version: "3.11" + vfx-platform: "CY2024" + - os: "macos-14" + arch-type: "arm64" + build-type: "Debug" + qt-version: "6.5.3" + qt-version-short: "6.5" + python-version: "3.11" + vfx-platform: "CY2024" steps: - name: Check if it is a schedule job if: github.event_name == 'schedule' @@ -293,7 +417,7 @@ jobs: mkdir -p "${{ github.workspace }}/deps" - name: Install Qt ${{ matrix.qt-version }} - if: matrix.arch-type == 'x86_64' + if: matrix.arch-type == 'x86_64' && matrix.vfx-platform == 'CY2023' uses: jurplel/install-qt-action@v4 with: version: '${{ matrix.qt-version }}' @@ -302,8 +426,28 @@ jobs: arch: 'clang_64' dir: "${{ github.workspace }}/deps" install-deps: 'false' - modules: 'debug_info qtcharts qtdatavis3d qtlottie qtnetworkauth qtquick3d qtquicktimeline qtscript qtwebengine qtwebglplugin' - archives: 'd3dcompiler_47 opengl32sw qt3d qtactiveqt qtbase qtconnectivity qtdeclarative qtgraphicaleffects qtimageformats qtlocation qtmultimedia qtquickcontrols qtquickcontrols2 qtremoteobjects qtscxml qtsensors qtsvg qttools qttranslations qtwebchannel qtwebsockets qtwebview qtwinextras qtxmlpatterns' + modules: ${{ env.QT5_MODULES }} + archives: ${{ env.MACOX_X86_64_QT5_ARCHIVES }} + # Caching only save 2 minutes. Keep the cache for longer operations. + cache: false + setup-python: 'false' + tools: 'tools_qtcreator' + set-env: 'true' + tools-only: 'false' + aqtversion: '==3.1.*' + + - name: Install Qt ${{ matrix.qt-version }} + if: matrix.arch-type == 'x86_64' && matrix.vfx-platform == 'CY2024' + uses: jurplel/install-qt-action@v4 + with: + version: '${{ matrix.qt-version }}' + host: 'mac' + target: 'desktop' + arch: 'clang_64' + dir: "${{ github.workspace }}/deps" + install-deps: 'false' + modules: ${{ env.MACOX_X86_64_QT6_MODULES }} + archives: ${{ env.MACOX_X86_64_QT6_ARCHIVES }} # Caching only save 2 minutes. Keep the cache for longer operations. cache: false setup-python: 'false' @@ -313,7 +457,7 @@ jobs: aqtversion: '==3.1.*' - name: Patch Qt ${{ matrix.qt-version }} - if: matrix.arch-type == 'x86_64' + if: matrix.arch-type == 'x86_64' && matrix.vfx-platform == 'CY2023' # There is an issue with Clang15 and Qt < 5.15.15. run: | curl -o file.zip https://codereview.qt-project.org/changes/qt%2Fqtbase~503172/revisions/3/files/mkspecs%2Ffeatures%2Ftoolchain.prf/download @@ -325,7 +469,9 @@ jobs: id: build-qt5-for-arm64 uses: ./.github/actions/build-qt5-for-arm64 with: - qt-version: "5.15.15" + qt-version: "${{ matrix.qt-version }}" + qt-version-short: "${{ matrix.qt-version-short }}" + vfx-platform: "${{ matrix.vfx-platform }}" python3-version: "3.11.9" python2-version: "2.7.18" xcode-version: "14.3.1" @@ -346,9 +492,14 @@ jobs: brew install --quiet --formula cmake ninja readline sqlite3 xz zlib tcl-tk autoconf automake libtool python yasm clang-format black meson nasm pkg-config glew icu4c - name: Set QT_HOME - if: matrix.arch-type == 'x86_64' + if: matrix.arch-type == 'x86_64' && matrix.vfx-platform == 'CY2023' run: | echo "QT_HOME=${{ github.workspace }}/deps/Qt/${{ matrix.qt-version }}/clang_64" >> $GITHUB_ENV + + - name: Set QT_HOME + if: matrix.arch-type == 'x86_64' && matrix.vfx-platform == 'CY2024' + run: | + echo "QT_HOME=${{ github.workspace }}/deps/Qt/${{ matrix.qt-version }}/macos" >> $GITHUB_ENV - name: Set QT_HOME if: matrix.arch-type == 'arm64' @@ -377,9 +528,15 @@ jobs: key: macos-${{ matrix.arch-type }}-dependencies - name: Configure OpenRV + if: ${{ matrix.vfx-platform == 'CY2023' }} run: | cmake -B _build -G "Ninja" -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -DRV_DEPS_QT5_LOCATION=$QT_HOME -DRV_VFX_PLATFORM=${{ matrix.vfx-platform }} - + + - name: Configure OpenRV + if: ${{ matrix.vfx-platform == 'CY2024' }} + run: | + cmake -B _build -G "Ninja" -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -DRV_DEPS_QT6_LOCATION=$QT_HOME -DRV_VFX_PLATFORM=${{ matrix.vfx-platform }} + - name: Build OpenRV dependencies if: steps.cmake-dependencies.outputs.cache-hit != 'true' run: | @@ -432,6 +589,26 @@ jobs: msvc-component: "14.40.17.10.x86.x64" msvc-compiler: "14.40.33807" + # VFX2024 + - os: "windows-2022" + arch-type: "x86_64" + build-type: "Release" + qt-version: "6.5.3" + python-version: "3.10" + cmake-version: "3.29.8" + vfx-platform: "CY2024" + msvc-component: "14.40.17.10.x86.x64" + msvc-compiler: "14.40.33807" + - os: "windows-2022" + arch-type: "x86_64" + build-type: "Debug" + qt-version: "6.5.3" + python-version: "3.10" + cmake-version: "3.29.8" + vfx-platform: "CY2024" + msvc-component: "14.40.17.10.x86.x64" + msvc-compiler: "14.40.33807" + runs-on: ${{ matrix.os }} steps: - name: Check if it is a schedule job @@ -515,7 +692,7 @@ jobs: - name: Set PATH environment variable run: | - echo "export PATH=\"/c/Program Files/CMake/bin:/c/hostedtoolcache/windows/Python/3.11.9/x64:/c/msys64/mingw64/bin:$PATH:/c/Strawberry/c/bin:/c/Strawberry/perl/site/bin:/c/Strawberry/perl/bin\"" >> ~/.bash_profile + echo "export PATH=\"/c/Program Files/CMake/bin:/c/hostedtoolcache/windows/Python/3.10.11/x64:/c/msys64/mingw64/bin:$PATH:/c/Strawberry/c/bin:/c/Strawberry/perl/site/bin:/c/Strawberry/perl/bin\"" >> ~/.bash_profile shell: msys2 {0} - name: Set ACLOCAL_PATH environment variable @@ -538,6 +715,27 @@ jobs: shell: msys2 {0} - name: Install Qt ${{ matrix.qt-version }} + if: ${{ matrix.vfx-platform == 'CY2023' }} + uses: jurplel/install-qt-action@v4 + with: + version: '${{ matrix.qt-version }}' + host: 'windows' + target: 'desktop' + arch: 'win64_msvc2019_64' + dir: "c:/" + install-deps: 'false' + modules: ${{ env.qt5_modules }} + archives: ${{ env.WINDOWS_QT5_ARCHIVES }} + # Caching only save 2 minutes. Keep the cache for longer operations. + cache: false + setup-python: 'false' + tools: 'tools_qtcreator' + set-env: 'true' + tools-only: 'false' + aqtversion: '==3.1.*' + + - name: Install Qt ${{ matrix.qt-version }} + if: ${{ matrix.vfx-platform == 'CY2024' }} uses: jurplel/install-qt-action@v4 with: version: '${{ matrix.qt-version }}' @@ -546,8 +744,8 @@ jobs: arch: 'win64_msvc2019_64' dir: "c:/" install-deps: 'false' - modules: 'debug_info qtcharts qtdatavis3d qtlottie qtnetworkauth qtquick3d qtquicktimeline qtscript qtwebengine qtwebglplugin' - archives: 'd3dcompiler_47 opengl32sw qt3d qtactiveqt qtbase qtconnectivity qtdeclarative qtgraphicaleffects qtimageformats qtlocation qtmultimedia qtquickcontrols qtquickcontrols2 qtremoteobjects qtscxml qtsensors qtsvg qttools qttranslations qtwebchannel qtwebsockets qtwebview qtwinextras qtxmlpatterns' + modules: ${{ env.WINDOWS_QT6_MODULES }} + archives: ${{ env.WINDOWS_QT6_ARCHIVES }} # Caching only save 2 minutes. Keep the cache for longer operations. cache: false setup-python: 'false' @@ -583,10 +781,18 @@ jobs: key: windows-dependencies - name: Configure OpenRV + if: ${{ matrix.vfx-platform == 'CY2023' }} run: | export QT_HOME=c:/Qt/${{ matrix.qt-version }}/msvc2019_64 cmake -B _build -G "Visual Studio 17 2022" -A x64 -DRV_DEPS_WIN_PERL_ROOT=c:/Strawberry/perl/bin -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -DRV_DEPS_QT5_LOCATION=$QT_HOME -DRV_VFX_PLATFORM=${{ matrix.vfx-platform }} shell: msys2 {0} + + - name: Configure OpenRV + if: ${{ matrix.vfx-platform == 'CY2024' }} + run: | + export QT_HOME=c:/Qt/${{ matrix.qt-version }}/msvc2019_64 + cmake -B _build -G "Visual Studio 17 2022" -A x64 -DRV_DEPS_WIN_PERL_ROOT=c:/Strawberry/perl/bin -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -DRV_DEPS_QT6_LOCATION=$QT_HOME -DRV_VFX_PLATFORM=${{ matrix.vfx-platform }} + shell: msys2 {0} - name: Build OpenRV dependencies if: steps.cmake-dependencies.outputs.cache-hit != 'true' diff --git a/cmake/dependencies/patch/python.3.11.get_externals.bat.patch b/cmake/dependencies/patch/python.3.11.get_externals.bat.patch index a6973938..2154043a 100644 --- a/cmake/dependencies/patch/python.3.11.get_externals.bat.patch +++ b/cmake/dependencies/patch/python.3.11.get_externals.bat.patch @@ -1,22 +1,22 @@ diff --git a/PCbuild/get_externals.bat b/PCbuild/get_externals.bat -index b4362a5a25..5deb59828f 100644 +index dfacd1d1e78..a6699138548 100644 --- a/PCbuild/get_externals.bat +++ b/PCbuild/get_externals.bat @@ -53,7 +53,7 @@ echo.Fetching external libraries... set libraries= set libraries=%libraries% bzip2-1.0.8 if NOT "%IncludeLibffiSrc%"=="false" set libraries=%libraries% libffi-3.4.4 --if NOT "%IncludeSSLSrc%"=="false" set libraries=%libraries% openssl-3.0.13 -+if NOT "%IncludeSSLSrc%"=="false" set libraries=%libraries% openssl-1.1.1u - set libraries=%libraries% sqlite-3.45.1.0 - if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tcl-core-8.6.12.1 - if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tk-8.6.12.1 +-if NOT "%IncludeSSLSrc%"=="false" set libraries=%libraries% openssl-3.0.15 ++if NOT "%IncludeSSLSrc%"=="false" set libraries=%libraries% openssl-3.4.0 + set libraries=%libraries% mpdecimal-4.0.0 + set libraries=%libraries% sqlite-3.45.3.0 + if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tcl-core-8.6.15.0 @@ -77,7 +77,7 @@ echo.Fetching external binaries... set binaries= if NOT "%IncludeLibffi%"=="false" set binaries=%binaries% libffi-3.4.4 --if NOT "%IncludeSSL%"=="false" set binaries=%binaries% openssl-bin-3.0.13 -+if NOT "%IncludeSSL%"=="false" set binaries=%binaries% openssl-bin-1.1.1u - if NOT "%IncludeTkinter%"=="false" set binaries=%binaries% tcltk-8.6.12.1 +-if NOT "%IncludeSSL%"=="false" set binaries=%binaries% openssl-bin-3.0.15 ++if NOT "%IncludeSSL%"=="false" set binaries=%binaries% openssl-bin-3.4.0 + if NOT "%IncludeTkinter%"=="false" set binaries=%binaries% tcltk-8.6.15.0 if NOT "%IncludeSSLSrc%"=="false" set binaries=%binaries% nasm-2.11.06 diff --git a/cmake/dependencies/patch/python.3.11.python.props.patch b/cmake/dependencies/patch/python.3.11.python.props.patch index 01a3b804..e0335e2b 100644 --- a/cmake/dependencies/patch/python.3.11.python.props.patch +++ b/cmake/dependencies/patch/python.3.11.python.props.patch @@ -1,15 +1,15 @@ diff --git a/PCbuild/python.props b/PCbuild/python.props -index d85fe4ab2a..ff2224251f 100644 +index 6e90178f4ea..7e8072d4b0b 100644 --- a/PCbuild/python.props +++ b/PCbuild/python.props -@@ -74,8 +74,8 @@ - $(ExternalsDir)libffi-3.4.4\ +@@ -71,8 +71,8 @@ $(libffiDir)$(ArchName)\ $(libffiOutDir)include -- $(ExternalsDir)openssl-3.0.13\ -- $(ExternalsDir)openssl-bin-3.0.13\$(ArchName)\ -+ $(ExternalsDir)openssl-1.1.1u\ -+ $(ExternalsDir)openssl-bin-1.1.1u\$(ArchName)\ + $(ExternalsDir)\mpdecimal-4.0.0\ +- $(ExternalsDir)openssl-3.0.15\ +- $(ExternalsDir)openssl-bin-3.0.15\$(ArchName)\ ++ $(ExternalsDir)openssl-3.4.0\ ++ $(ExternalsDir)openssl-bin-3.4.0\$(ArchName)\ $(opensslOutDir)include $(ExternalsDir)\nasm-2.11.06\ $(ExternalsDir)\zlib-1.3.1\ diff --git a/cmake/dependencies/python3.cmake b/cmake/dependencies/python3.cmake index 2268cd57..d7552f60 100644 --- a/cmake/dependencies/python3.cmake +++ b/cmake/dependencies/python3.cmake @@ -4,7 +4,6 @@ # SPDX-License-Identifier: Apache-2.0 # - SET(_python3_target "RV_DEPS_PYTHON3" ) @@ -13,27 +12,15 @@ SET(_opentimelineio_target "RV_DEPS_OPENTIMELINEIO" ) -RV_VFX_SET_VARIABLE( - _pyside_target - CY2023 "RV_DEPS_PYSIDE2" - CY2024 "RV_DEPS_PYSIDE6" -) +RV_VFX_SET_VARIABLE(_pyside_target CY2023 "RV_DEPS_PYSIDE2" CY2024 "RV_DEPS_PYSIDE6") SET(PYTHON_VERSION_MAJOR 3 ) -RV_VFX_SET_VARIABLE( - PYTHON_VERSION_MINOR - CY2023 "10" - CY2024 "11" -) +RV_VFX_SET_VARIABLE(PYTHON_VERSION_MINOR CY2023 "10" CY2024 "11") -RV_VFX_SET_VARIABLE( - PYTHON_VERSION_PATCH - CY2023 "13" - CY2024 "9" -) +RV_VFX_SET_VARIABLE(PYTHON_VERSION_PATCH CY2023 "13" CY2024 "9") SET(_python3_version "${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}.${PYTHON_VERSION_PATCH}" @@ -50,20 +37,12 @@ SET(_opentimelineio_version "0.15" ) -RV_VFX_SET_VARIABLE( - _pyside_version - CY2023 "5.15.10" - CY2024 "6.5.3" -) +RV_VFX_SET_VARIABLE(_pyside_version CY2023 "5.15.10" CY2024 "6.5.3") SET(_python3_download_url "https://github.com/python/cpython/archive/refs/tags/v${_python3_version}.zip" ) -RV_VFX_SET_VARIABLE( - _python3_download_hash - CY2023 "21b32503f31386b37f0c42172dfe5637" - CY2024 "392eccd4386936ffcc46ed08057db3e7" -) +RV_VFX_SET_VARIABLE(_python3_download_hash CY2023 "21b32503f31386b37f0c42172dfe5637" CY2024 "392eccd4386936ffcc46ed08057db3e7") SET(_opentimelineio_download_url "https://github.com/AcademySoftwareFoundation/OpenTimelineIO" @@ -74,15 +53,13 @@ SET(_opentimelineio_git_tag RV_VFX_SET_VARIABLE( _pyside_archive_url - CY2023 "https://mirrors.ocf.berkeley.edu/qt/official_releases/QtForPython/pyside2/PySide2-${_pyside_version}-src/pyside-setup-opensource-src-${_pyside_version}.zip" - CY2024 "https://mirrors.ocf.berkeley.edu/qt/official_releases/QtForPython/pyside6/PySide6-${_pyside_version}-src/pyside-setup-everywhere-src-${_pyside_version}.zip" + CY2023 + "https://mirrors.ocf.berkeley.edu/qt/official_releases/QtForPython/pyside2/PySide2-${_pyside_version}-src/pyside-setup-opensource-src-${_pyside_version}.zip" + CY2024 + "https://mirrors.ocf.berkeley.edu/qt/official_releases/QtForPython/pyside6/PySide6-${_pyside_version}-src/pyside-setup-everywhere-src-${_pyside_version}.zip" ) -RV_VFX_SET_VARIABLE( - _pyside_download_hash - CY2023 "87841aaced763b6b52e9b549e31a493f" - CY2024 "515d3249c6e743219ff0d7dd25b8c8d8" -) +RV_VFX_SET_VARIABLE(_pyside_download_hash CY2023 "87841aaced763b6b52e9b549e31a493f" CY2024 "515d3249c6e743219ff0d7dd25b8c8d8") SET(_install_dir ${RV_DEPS_BASE_DIR}/${_python3_target}/install @@ -141,10 +118,7 @@ IF(RV_TARGET_WINDOWS) LIST(APPEND _python3_make_command "${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR}") ENDIF() - -# TODO_QT: Maybe we could use something like NOT CY2023 -# since after 2023, it is Qt6 -# TODO_QT: Below code could be simplified, but for now it is faster to test. +# TODO_QT: Maybe we could use something like NOT CY2023 since after 2023, it is Qt6 TODO_QT: Below code could be simplified, but for now it is faster to test. IF(RV_VFX_PLATFORM STREQUAL CY2023) SET(_pyside_make_command_script "${PROJECT_SOURCE_DIR}/src/build/make_pyside.py" @@ -175,10 +149,10 @@ IF(RV_VFX_PLATFORM STREQUAL CY2023) LIST(APPEND _pyside_make_command "${RV_DEPS_PYTHON_VERSION_SHORT}") ELSEIF(RV_VFX_PLATFORM STREQUAL CY2024) SET(_pyside_make_command_script - "${PROJECT_SOURCE_DIR}/src/build/make_pyside6.py" + "${PROJECT_SOURCE_DIR}/src/build/make_pyside6.py" ) SET(_pyside_make_command - python3 "${_pyside_make_command_script}" + python3 "${_pyside_make_command_script}" ) LIST(APPEND _pyside_make_command "--variant") @@ -278,20 +252,18 @@ SET(_requirements_install_command ) IF(RV_TARGET_WINDOWS) - SET(_patch_python3_11_command - "patch -p1 < ${CMAKE_CURRENT_SOURCE_DIR}/patch/python.3.11.openssl.props.patch &&\ - patch -p1 < ${CMAKE_CURRENT_SOURCE_DIR}/patch/python.3.11.python.props.patch &&\ + SET(_patch_python3_11_command + "patch -p1 < ${CMAKE_CURRENT_SOURCE_DIR}/patch/python.3.11.python.props.patch &&\ patch -p1 < ${CMAKE_CURRENT_SOURCE_DIR}/patch/python.3.11.get_externals.bat.patch" ) - RV_VFX_SET_VARIABLE( - _patch_command - CY2023 "" - CY2024 "${_patch_python3_11_command}" - ) + RV_VFX_SET_VARIABLE(_patch_command CY2023 "" CY2024 "${_patch_python3_11_command}") # Split the command into a semi-colon separated list. - separate_arguments(_patch_command) - STRING(REGEX REPLACE ";+" ";" _patch_command "${_patch_command}") + SEPARATE_ARGUMENTS(_patch_command) + STRING( + REGEX + REPLACE ";+" ";" _patch_command "${_patch_command}" + ) ENDIF() EXTERNALPROJECT_ADD( @@ -343,10 +315,7 @@ SET(${_pyside_target}-build-flag ${_install_dir}/${_pyside_target}-build-flag ) - -# TODO_QT: Maybe we could use something like NOT CY2023 -# since after 2023, it is Qt6 -# TODO_QT: Below code could be simplified, but for now it is faster to test. +# TODO_QT: Maybe we could use something like NOT CY2023 since after 2023, it is Qt6 TODO_QT: Below code could be simplified, but for now it is faster to test. IF(RV_VFX_PLATFORM STREQUAL CY2023) ADD_CUSTOM_COMMAND( COMMENT "Building PySide2 using ${_pyside_make_command_script}" @@ -360,7 +329,9 @@ IF(RV_VFX_PLATFORM STREQUAL CY2023) USES_TERMINAL ) - SET(_build_flag_depends ${${_pyside_target}-build-flag}) + SET(_build_flag_depends + ${${_pyside_target}-build-flag} + ) ELSEIF(RV_VFX_PLATFORM STREQUAL CY2024) ADD_CUSTOM_COMMAND( COMMENT "Building PySide6 using ${_pyside_make_command_script}" @@ -371,7 +342,9 @@ ELSEIF(RV_VFX_PLATFORM STREQUAL CY2024) USES_TERMINAL ) - SET(_build_flag_depends ${${_pyside_target}-build-flag}) + SET(_build_flag_depends + ${${_pyside_target}-build-flag} + ) ENDIF() IF(RV_TARGET_WINDOWS) diff --git a/requirements.txt b/requirements.txt index f998e0b6..2d7931dd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,9 +1,11 @@ # This file contains all of RV's python build requirements. They are NOT packaged with the app. -pyyaml # License: MIT License (MIT) -requests # License: Apache Software License (Apache 2.0) -wheel # License: MIT License (MIT) -pyzstd==0.15.9 # License: BSD License (BSD-3-Clause) -py7zr==0.22.0 # License: GNU Lesser General Public License v2 or later (LGPLv2+) (LGPL-2.1-or-later) -dohq-artifactory # License: MIT License (MIT License) -pre-commit # License: MIT License (MIT) +pyyaml # License: MIT License (MIT) +requests # License: Apache Software License (Apache 2.0) +wheel # License: MIT License (MIT) +pyzstd==0.15.9; python_version <= '3.8' # License: BSD License (BSD-3-Clause) +pyzstd; python_version > '3.8' # License: BSD License (BSD-3-Clause) +py7zr==0.22.0; python_version <= '3.8' # License: GNU Lesser General Public License v2 or later (LGPLv2+) (LGPL-2.1-or-later) +py7zr; python_version > '3.8' # License: GNU Lesser General Public License v2 or later (LGPLv2+) (LGPL-2.1-or-later) +dohq-artifactory # License: MIT License (MIT License) +pre-commit \ No newline at end of file diff --git a/src/bin/apps/rv/main.cpp b/src/bin/apps/rv/main.cpp index 05dd2763..ffd70b15 100644 --- a/src/bin/apps/rv/main.cpp +++ b/src/bin/apps/rv/main.cpp @@ -92,7 +92,6 @@ #else #include #include - #include #endif #include diff --git a/src/bin/python/py-interp/main.cpp b/src/bin/python/py-interp/main.cpp index 3af13e81..16b0c4b1 100644 --- a/src/bin/python/py-interp/main.cpp +++ b/src/bin/python/py-interp/main.cpp @@ -72,7 +72,8 @@ main(int argc, char **argv) // // On windows: force -i // - wchar_t* w_nargv[] = {Py_DecodeLocale(argv[0], nullptr), L"-i", L'\0'}; + wchar_t arg2[] = L"-i"; + wchar_t* w_nargv[] = {Py_DecodeLocale(argv[0], nullptr), arg2, nullptr}; if (argc == 1) return Py_Main(2, w_nargv); diff --git a/src/build/make_pyside6.py b/src/build/make_pyside6.py index 4346bffd..bba7411c 100755 --- a/src/build/make_pyside6.py +++ b/src/build/make_pyside6.py @@ -116,7 +116,7 @@ def prepare() -> None: shutil.move(libclang_tmp, libclang_extracted) libclang_install_dir = os.path.join(libclang_extracted, "libclang") - + if OPENSSL_OUTPUT_DIR: os.environ["PATH"] = os.path.pathsep.join( [ @@ -208,9 +208,10 @@ def build() -> None: f"--qtpaths={os.path.join(QT_OUTPUT_DIR, 'bin', 'qtpaths' + ('.exe' if platform.system() == 'Windows' else ''))}", "--ignore-git", "--standalone", + "--verbose", "--verbose-build", + "--log-level=verbose", f"--parallel={os.cpu_count() or 1}", - "--skip-docs", ] if OPENSSL_OUTPUT_DIR: @@ -279,9 +280,10 @@ def build() -> None: parser.add_argument("--variant", dest="variant", type=str, required=True) - # Major and minor version with dots. - parser.add_argument("--python-version", dest="python_version", type=str, required=True, default="") + parser.add_argument( + "--python-version", dest="python_version", type=str, required=True, default="" + ) parser.set_defaults(prepare=False, build=False) @@ -295,7 +297,7 @@ def build() -> None: QT_OUTPUT_DIR = args.qt VARIANT = args.variant PYTHON_VERSION = args.python_version - + print(args) if args.prepare: diff --git a/src/build/make_python.py b/src/build/make_python.py index ae43359d..f58f2c64 100755 --- a/src/build/make_python.py +++ b/src/build/make_python.py @@ -124,7 +124,9 @@ def get_python_interpreter_args(python_home: str) -> List[str]: python_interpreters = glob.glob( os.path.join(python_home, python_name_pattern), recursive=True ) - python_interpreters += glob.glob(os.path.join(python_home, "bin", python_name_pattern)) + python_interpreters += glob.glob( + os.path.join(python_home, "bin", python_name_pattern) + ) # sort put python# before python#-config python_interpreters = sorted( @@ -164,7 +166,9 @@ def patch_python_distribution(python_home: str) -> None: shutil.move(failed_lib, failed_lib.replace("_failed.so", ".so")) if OPENSSL_OUTPUT_DIR: if platform.system() == "Darwin": - openssl_libs = glob.glob(os.path.join(OPENSSL_OUTPUT_DIR, "lib", "lib*.dylib*")) + openssl_libs = glob.glob( + os.path.join(OPENSSL_OUTPUT_DIR, "lib", "lib*.dylib*") + ) openssl_libs = [l for l in openssl_libs if os.path.islink(l) is False] python_openssl_libs = [] @@ -196,7 +200,9 @@ def patch_python_distribution(python_home: str) -> None: subprocess.run(install_name_tool_change_args).check_returncode() elif platform.system() == "Linux": - openssl_libs = glob.glob(os.path.join(OPENSSL_OUTPUT_DIR, "lib", "lib*.so*")) + openssl_libs = glob.glob( + os.path.join(OPENSSL_OUTPUT_DIR, "lib", "lib*.so*") + ) for lib_path in openssl_libs: print(f"Copying {lib_path} to the python home") @@ -297,8 +303,12 @@ def test_python_distribution(python_home: str) -> None: # Specify the location of the debug python import lib (eg. python39_d.lib) python_include_dirs = os.path.join(tmp_python_home, "include") - python_lib = os.path.join(tmp_python_home, "libs", f"python{PYTHON_VERSION}_d.lib") - my_env["CMAKE_ARGS"] = f"-DPython_LIBRARY={python_lib} -DCMAKE_INCLUDE_PATH={python_include_dirs}" + python_lib = os.path.join( + tmp_python_home, "libs", f"python{PYTHON_VERSION}_d.lib" + ) + my_env["CMAKE_ARGS"] = ( + f"-DPython_LIBRARY={python_lib} -DCMAKE_INCLUDE_PATH={python_include_dirs}" + ) opentimelineio_install_arg = python_interpreter_args + [ "-m", @@ -441,7 +451,6 @@ def configure() -> None: if OPENSSL_OUTPUT_DIR: configure_args.append(f"--with-openssl={OPENSSL_OUTPUT_DIR}") - if VARIANT == "Release": configure_args.append("--enable-optimizations") @@ -565,7 +574,6 @@ def build() -> None: if OPENSSL_OUTPUT_DIR: subprocess_env["LC_RPATH"] = os.path.join(OPENSSL_OUTPUT_DIR, "lib") - subprocess.run( build_args, cwd=SOURCE_DIR, @@ -623,18 +631,16 @@ def install() -> None: "--include-tcltk", "--include-tests", "--include-venv", - "--flat-dlls" + "--flat-dlls", ] if VARIANT == "Debug": install_args.append("--debug") - subprocess.run( - install_args, - cwd=SOURCE_DIR - ).check_returncode() + subprocess.run(install_args, cwd=SOURCE_DIR).check_returncode() dst_dir = os.path.join(OUTPUT_DIR, "bin") + libs_dir = os.path.join(OUTPUT_DIR, "libs") os.makedirs(dst_dir, exist_ok=True) # bin @@ -651,7 +657,7 @@ def install() -> None: # Move files under root directory into the bin folder. for filename in os.listdir(os.path.join(OUTPUT_DIR)): - file_path = os.path.join(OUTPUT_DIR, filename) + file_path = os.path.join(OUTPUT_DIR, filename) if os.path.isfile(file_path): shutil.move(file_path, os.path.join(dst_dir, filename)) @@ -663,8 +669,18 @@ def install() -> None: python3_lib = "python3_d.lib" python3xx_lib = f"python{PYTHON_VERSION}_d.lib" - shutil.copy(os.path.join(build_path, python3_lib), os.path.join(dst_dir, python3_lib)) - shutil.copy(os.path.join(build_path, python3xx_lib), os.path.join(dst_dir, python3xx_lib)) + shutil.copy( + os.path.join(build_path, python3_lib), os.path.join(dst_dir, python3_lib) + ) + shutil.copy( + os.path.join(build_path, python3_lib), os.path.join(libs_dir, python3_lib) + ) + shutil.copy( + os.path.join(build_path, python3xx_lib), + os.path.join(dst_dir, python3xx_lib), + ) + + print(os.listdir(libs_dir)) # Tcl and Tk DLL are not copied by the main.py script in Debug. # Assuming that Tcl and Tk are not built in debug. @@ -726,7 +742,13 @@ def install() -> None: if platform.system() == "Windows": # Major and minor version of Python without dots. E.g. 3.10.3 -> 310 - parser.add_argument("--python-version", dest="python_version", type=str, required=True, default="") + parser.add_argument( + "--python-version", + dest="python_version", + type=str, + required=True, + default="", + ) parser.set_defaults(clean=False, configure=False, build=False, install=False) diff --git a/src/lib/app/QTBundle/QTBundle.cpp b/src/lib/app/QTBundle/QTBundle.cpp index efbcf9c3..423fb5b8 100644 --- a/src/lib/app/QTBundle/QTBundle.cpp +++ b/src/lib/app/QTBundle/QTBundle.cpp @@ -79,11 +79,11 @@ QTBundle::init() #endif #ifdef PLATFORM_WINDOWS - m_homeSupport = getenv("APPDATA"); + m_homeSupport = QString(getenv("APPDATA")); if (!m_homeSupport.cd("RV")) { - m_homeSupport = getenv("APPDATA"); + m_homeSupport = QString(getenv("APPDATA")); m_homeSupport.mkpath("RV"); m_homeSupport.cd("RV"); } diff --git a/src/lib/app/RvCommon/CMakeLists.txt b/src/lib/app/RvCommon/CMakeLists.txt index a86e7905..5742bcd8 100644 --- a/src/lib/app/RvCommon/CMakeLists.txt +++ b/src/lib/app/RvCommon/CMakeLists.txt @@ -22,10 +22,13 @@ SET(CMAKE_AUTORCC ) IF(RV_VFX_PLATFORM STREQUAL CY2024) - # TODO_QT: Core5Compat is temporary to fix issue with QTextCodec. - # https://doc.qt.io/qt-6.5/qtcore5compat-module.html - SET(_rvcommon_core5compat_component Core5Compat) - SET(_rvcommon_core5compat_link_libraries Qt6::Core5Compat) + # TODO_QT: Core5Compat is temporary to fix issue with QTextCodec. https://doc.qt.io/qt-6.5/qtcore5compat-module.html + SET(_rvcommon_core5compat_component + Core5Compat + ) + SET(_rvcommon_core5compat_link_libraries + Qt6::Core5Compat + ) ENDIF() # @@ -87,11 +90,12 @@ ENDIF() FILE(GLOB _ui_sources ui/*.ui) - IF(RV_VFX_PLATFORM STREQUAL CY2024) - # Use Qt6 connections syntax because it generates the wrong QObject::connect for RvConsoleWindow.ui. - # TODO_QT: Could remove the connections from the UI XML and add them to RvConsoleWindow.cpp - SET(ui_options --connections string) + # Use Qt6 connections syntax because it generates the wrong QObject::connect for RvConsoleWindow.ui. TODO_QT: Could remove the connections from the UI XML and + # add them to RvConsoleWindow.cpp + SET(ui_options + --connections string + ) ENDIF() FOREACH( @@ -170,6 +174,13 @@ ADD_LIBRARY( ${_sources} qrc/RvCommon.qrc ) +# Need that with Qt6 since the code for this target does not support unicode correctly. +IF(RV_TARGET_WINDOWS + AND RV_VFX_PLATFORM STREQUAL CY2024 +) + QT_DISABLE_UNICODE_DEFINES(${_target}) +ENDIF() + TARGET_INCLUDE_DIRECTORIES( ${_target} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} @@ -230,26 +241,31 @@ IF(RV_TARGET_DARWIN) ) ENDIF() - # https://doc.qt.io/qt-6/extras-changes-qt6.html # # The Qt X11 Extras module was removed in Qt 6. -# For QX11Info::connection(), use QNativeInterface::QX11Application::connection() instead. -# For QX11Info::display(), use QNativeInterface::QX11Application::display() instead. -# For QX11Info::isPlatformX11(), check QNativeInterface::QX11Application existence instead. +# For QX11Info::connection(), use QNativeInterface::QX11Application::connection() instead. For QX11Info::display(), use +# QNativeInterface::QX11Application::display() instead. For QX11Info::isPlatformX11(), check QNativeInterface::QX11Application existence instead. # -# Clients that still rely on the functionality in QX11Info class can include the private header -# as a stopgap solution. -# To enable private headers use QT += gui-private with qmake, or add a project dependency to Qt::GuiPrivate with CMake. +# Clients that still rely on the functionality in QX11Info class can include the private header as a stopgap solution. To enable +# private headers use QT += gui-private with qmake, or add a project dependency to Qt::GuiPrivate with CMake. IF(RV_TARGET_LINUX) IF(RV_VFX_PLATFORM STREQUAL CY2023) - SET(_rvcommon_qt_components X11Extras) - SET(_rvcommon_link_libraries Qt::X11Extras) + SET(_rvcommon_qt_components + X11Extras + ) + SET(_rvcommon_link_libraries + Qt::X11Extras + ) ELSEIF(RV_VFX_PLATFORM STREQUAL CY2024) - SET(_rvcommon_qt_components Gui) - SET(_rvcommon_link_libraries Qt::GuiPrivate) + SET(_rvcommon_qt_components + Gui + ) + SET(_rvcommon_link_libraries + Qt::GuiPrivate + ) ENDIF() FIND_PACKAGE( @@ -270,10 +286,16 @@ IF(RV_TARGET_WINDOWS) ) ENDIF() -IF(RV_TARGET_LINUX OR RV_TARGET_WINDOWS) - SET(_rv_icon_path_suffix_ "/../resources/RV.ico") +IF(RV_TARGET_LINUX + OR RV_TARGET_WINDOWS +) + SET(_rv_icon_path_suffix_ + "/../resources/RV.ico" + ) ELSEIF(RV_TARGET_DARWIN) - SET(_rv_icon_path_suffix_ "/../Resources/RV.ico") + SET(_rv_icon_path_suffix_ + "/../Resources/RV.ico" + ) ENDIF() SET(RV_ICON_PATH_SUFFIX diff --git a/src/lib/audio/QTAudioRenderer/QTAudioRenderer.cpp b/src/lib/audio/QTAudioRenderer/QTAudioRenderer.cpp index 8d833d6c..5b469e9b 100644 --- a/src/lib/audio/QTAudioRenderer/QTAudioRenderer.cpp +++ b/src/lib/audio/QTAudioRenderer/QTAudioRenderer.cpp @@ -996,7 +996,18 @@ QTAudioOutput::setAudioOutputBufferSize() // This is a temporary mechanism that will unblock our clients // without introducing an RV preference that would have polluted the RV // preferences unnecessarily. + +#if defined( RV_VFX_CY2023 ) const bool audioDeviceIsWASAPI = m_device.realm() == "wasapi"; +#else + // Device id may contain backend information (e.g. wasapi or waveout for WinMM). + const QString deviceId = QString::fromUtf8(m_device.id()); + // Description may contain useful information. + const QString deviceName = m_device.description(); + const bool audioDeviceIsWASAPI = deviceId.contains("wasapi", Qt::CaseInsensitive) || + deviceName.contains("wasapi", Qt::CaseInsensitive); +#endif + if (audioDeviceIsWASAPI && evApplyWasapiFix.getValue()) { setBufferSize(calcAudioBufferSize(m_format.channelCount(), diff --git a/src/lib/graphics/TwkGLFFBO/CMakeLists.txt b/src/lib/graphics/TwkGLFFBO/CMakeLists.txt index fecb9203..6bfe7418 100644 --- a/src/lib/graphics/TwkGLFFBO/CMakeLists.txt +++ b/src/lib/graphics/TwkGLFFBO/CMakeLists.txt @@ -22,6 +22,13 @@ TARGET_INCLUDE_DIRECTORIES( PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ) +# Need that with Qt6 since the code for this target does not support unicode correctly. +IF(RV_TARGET_WINDOWS + AND RV_VFX_PLATFORM STREQUAL CY2024 +) + ADD_DEFINITIONS(-UUNICODE -U_UNICODE) +ENDIF() + TARGET_LINK_LIBRARIES( ${_target} PUBLIC TwkGLF diff --git a/src/lib/ip/IPCore/CMakeLists.txt b/src/lib/ip/IPCore/CMakeLists.txt index d998dfd2..1d672ac9 100644 --- a/src/lib/ip/IPCore/CMakeLists.txt +++ b/src/lib/ip/IPCore/CMakeLists.txt @@ -213,6 +213,13 @@ ADD_LIBRARY( ${_sources} ) +# Need that with Qt6 since the code for this target does not support unicode correctly. +IF(RV_TARGET_WINDOWS + AND RV_VFX_PLATFORM STREQUAL CY2024 +) + QT_DISABLE_UNICODE_DEFINES(${_target}) +ENDIF() + TARGET_INCLUDE_DIRECTORIES( ${_target} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} @@ -259,9 +266,7 @@ ELSEIF(RV_TARGET_DARWIN) PUBLIC OpenCL::OpenCL ) ELSE() - TARGET_LINK_LIBRARIES( - ${_target} - ) + TARGET_LINK_LIBRARIES(${_target}) ENDIF() RV_STAGE(TYPE "LIBRARY" TARGET ${_target}) diff --git a/src/lib/mu/MuQt6/QUrlType.cpp b/src/lib/mu/MuQt6/QUrlType.cpp index 02fcb963..81d50c6e 100644 --- a/src/lib/mu/MuQt6/QUrlType.cpp +++ b/src/lib/mu/MuQt6/QUrlType.cpp @@ -450,14 +450,6 @@ bool qt_QUrl_operatorEQ_EQ__bool_QUrl_QUrl(Mu::Thread& NODE_THREAD, Pointer para return arg0.operator==(arg1); } -Pointer qt_QUrl_fromAce_string_QByteArray_int(Mu::Thread& NODE_THREAD, Pointer param_domain, int param_options) -{ - MuLangContext* c = static_cast(NODE_THREAD.context()); - const QByteArray arg0 = getqtype(param_domain); - QUrl::AceProcessingOptions arg1 = (QUrl::AceProcessingOptions)(param_options); - return makestring(c,QUrl::fromAce(arg0, arg1)); -} - Pointer qt_QUrl_fromEncoded_QUrl_QByteArray_int(Mu::Thread& NODE_THREAD, Pointer param_input, int param_parsingMode) { MuLangContext* c = static_cast(NODE_THREAD.context()); @@ -510,14 +502,6 @@ void qt_QUrl_setIdnWhitelist_void_stringBSB_ESB_(Mu::Thread& NODE_THREAD, Pointe QUrl::setIdnWhitelist(arg0); } -Pointer qt_QUrl_toAce_QByteArray_string_int(Mu::Thread& NODE_THREAD, Pointer param_domain, int param_options) -{ - MuLangContext* c = static_cast(NODE_THREAD.context()); - const QString arg0 = qstring(param_domain); - QUrl::AceProcessingOptions arg1 = (QUrl::AceProcessingOptions)(param_options); - return makeqtype(c,QUrl::toAce(arg0, arg1),"qt.QByteArray"); -} - Pointer qt_QUrl_toPercentEncoding_QByteArray_string_QByteArray_QByteArray(Mu::Thread& NODE_THREAD, Pointer param_input, Pointer param_exclude, Pointer param_include) { MuLangContext* c = static_cast(NODE_THREAD.context()); @@ -761,11 +745,6 @@ static NODE_IMPLEMENTATION(_n_operatorEQ_EQ_0, bool) NODE_RETURN(qt_QUrl_operatorEQ_EQ__bool_QUrl_QUrl(NODE_THREAD, NONNIL_NODE_ARG(0, Pointer), NODE_ARG(1, Pointer))); } -static NODE_IMPLEMENTATION(_n_fromAce0, Pointer) -{ - NODE_RETURN(qt_QUrl_fromAce_string_QByteArray_int(NODE_THREAD, NODE_ARG(0, Pointer), NODE_ARG(1, int))); -} - static NODE_IMPLEMENTATION(_n_fromEncoded0, Pointer) { NODE_RETURN(qt_QUrl_fromEncoded_QUrl_QByteArray_int(NODE_THREAD, NODE_ARG(0, Pointer), NODE_ARG(1, int))); @@ -801,11 +780,6 @@ static NODE_IMPLEMENTATION(_n_setIdnWhitelist0, void) qt_QUrl_setIdnWhitelist_void_stringBSB_ESB_(NODE_THREAD, NODE_ARG(0, Pointer)); } -static NODE_IMPLEMENTATION(_n_toAce0, Pointer) -{ - NODE_RETURN(qt_QUrl_toAce_QByteArray_string_int(NODE_THREAD, NODE_ARG(0, Pointer), NODE_ARG(1, int))); -} - static NODE_IMPLEMENTATION(_n_toPercentEncoding0, Pointer) { NODE_RETURN(qt_QUrl_toPercentEncoding_QByteArray_string_QByteArray_QByteArray(NODE_THREAD, NODE_ARG(0, Pointer), NODE_ARG(1, Pointer), NODE_ARG(2, Pointer))); @@ -939,7 +913,6 @@ addSymbols( new Function(c, "userInfo", _n_userInfo0, None, Compiled, qt_QUrl_userInfo_string_QUrl_int, Return, "string", Parameters, new Param(c, "this", "qt.QUrl"), new Param(c, "options", "int", Value((int)QUrl::PrettyDecoded)), End), new Function(c, "userName", _n_userName0, None, Compiled, qt_QUrl_userName_string_QUrl_int, Return, "string", Parameters, new Param(c, "this", "qt.QUrl"), new Param(c, "options", "int", Value((int)QUrl::FullyDecoded)), End), // static functions - new Function(c, "fromAce", _n_fromAce0, None, Compiled, qt_QUrl_fromAce_string_QByteArray_int, Return, "string", Parameters, new Param(c, "domain", "qt.QByteArray"), new Param(c, "options", "int", Value((int){})), End), // MISSING: fromCFURL (QUrl; "CFURLRef" url) new Function(c, "fromEncoded", _n_fromEncoded0, None, Compiled, qt_QUrl_fromEncoded_QUrl_QByteArray_int, Return, "qt.QUrl", Parameters, new Param(c, "input", "qt.QByteArray"), new Param(c, "parsingMode", "int", Value((int)QUrl::TolerantMode)), End), new Function(c, "fromLocalFile", _n_fromLocalFile0, None, Compiled, qt_QUrl_fromLocalFile_QUrl_string, Return, "qt.QUrl", Parameters, new Param(c, "localFile", "string"), End), @@ -949,7 +922,6 @@ addSymbols( new Function(c, "fromUserInput", _n_fromUserInput0, None, Compiled, qt_QUrl_fromUserInput_QUrl_string_string_int, Return, "qt.QUrl", Parameters, new Param(c, "userInput", "string"), new Param(c, "workingDirectory", "string"), new Param(c, "options", "int", Value((int)QUrl::DefaultResolution)), End), new Function(c, "idnWhitelist", _n_idnWhitelist0, None, Compiled, qt_QUrl_idnWhitelist_stringBSB_ESB_, Return, "string[]", End), new Function(c, "setIdnWhitelist", _n_setIdnWhitelist0, None, Compiled, qt_QUrl_setIdnWhitelist_void_stringBSB_ESB_, Return, "void", Parameters, new Param(c, "list", "string[]"), End), - new Function(c, "toAce", _n_toAce0, None, Compiled, qt_QUrl_toAce_QByteArray_string_int, Return, "qt.QByteArray", Parameters, new Param(c, "domain", "string"), new Param(c, "options", "int", Value((int){})), End), new Function(c, "toPercentEncoding", _n_toPercentEncoding0, None, Compiled, qt_QUrl_toPercentEncoding_QByteArray_string_QByteArray_QByteArray, Return, "qt.QByteArray", Parameters, new Param(c, "input", "string"), new Param(c, "exclude", "qt.QByteArray"), new Param(c, "include", "qt.QByteArray"), End), new Function(c, "toStringList", _n_toStringList0, None, Compiled, qt_QUrl_toStringList_stringBSB_ESB__qt__QUrlBSB_ESB__int, Return, "string[]", Parameters, new Param(c, "urls", "qt.QUrl[]"), new Param(c, "options", "int", Value((int)QUrl::FormattingOptions(QUrl::PrettyDecoded))), End), EndArguments); diff --git a/src/lib/mu/MuQt6/qt6_to_mu.py b/src/lib/mu/MuQt6/qt6_to_mu.py index 1a3effb0..c4051b3b 100755 --- a/src/lib/mu/MuQt6/qt6_to_mu.py +++ b/src/lib/mu/MuQt6/qt6_to_mu.py @@ -1,8 +1,8 @@ #!/usr/bin/env python # -# Copyright (C) 2023 Autodesk, Inc. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 +# Copyright (C) 2023 Autodesk, Inc. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 # from sgmllib import SGMLParser import urllib @@ -264,7 +264,7 @@ "qwheelevent", "qtextbrowser", "qsinglepointevent", - "qpointerevent" + "qpointerevent", ] # @@ -423,7 +423,7 @@ # "QWebEngineHistory", "QWindowStateChangeEvent", "QSinglePointEvent", - "QPointerEvent" + "QPointerEvent", ] ) # "QTouchEvent", @@ -530,7 +530,7 @@ def sansElaborations(x): def repMapFind(x): - for (rexp, val) in repMap: + for rexp, val in repMap: if rexp.match(x): return val return None @@ -768,7 +768,7 @@ def repMapFind(x): re.compile("QAbstract.*"), re.compile("QLayout"), re.compile("QIODevice"), - re.compile("QIODeviceBase") + re.compile("QIODeviceBase"), ] @@ -848,10 +848,7 @@ def indexOf(element, sequence): # doProps = ["QInputDialog"] -doPropsIfFuncToo = [ - "primaryScreen", - "availableGeometry" -] +doPropsIfFuncToo = ["primaryScreen", "availableGeometry"] noHFileOutput = [] # ["QObject"] @@ -914,7 +911,7 @@ def indexOf(element, sequence): "QProcess::createProcessArgumentsModifier": None, "QProcess::setCreateProcessArgumentsModifier": None, "QProcess::setChildProcessModifier": None, - "QProcess::startDetached": None, # handrolled + "QProcess::startDetached": None, # handrolled "QMenuBar::defaultAction": None, "QMenuBar::setDefaultAction": None, "QPlainTextEdit::extraSelections": None, @@ -1096,52 +1093,133 @@ def indexOf(element, sequence): ], # Issue with std::variant and Types: "const std::variant" "QVariant::fromStdVariant": None, - "QFile::QFile":[ - ('QFile', '', [('name', 'const std::filesystem::path &', None)], '', False), - ('QFile', '', [('name', 'const std::filesystem::path &', None), ('parent', 'QObject *', None)], '', False) + "QFile::QFile": [ + ("QFile", "", [("name", "const std::filesystem::path &", None)], "", False), + ( + "QFile", + "", + [ + ("name", "const std::filesystem::path &", None), + ("parent", "QObject *", None), + ], + "", + False, + ), ], "QFile::filesystemFileName": None, "QFile::filesystemSymLinkTarget": None, - "QFile::link":[ - ('link', '', [('newName', 'const std::filesystem::path &', None)], 'bool', False) + "QFile::link": [ + ( + "link", + "", + [("newName", "const std::filesystem::path &", None)], + "bool", + False, + ) ], - "QFile::rename":[ - ('rename', '', [('newName', 'const std::filesystem::path &', None)], 'bool', False) + "QFile::rename": [ + ( + "rename", + "", + [("newName", "const std::filesystem::path &", None)], + "bool", + False, + ) ], - "QFile::setFileName":[ - ('setFileName', '', [('name', 'const std::filesystem::path &', None)], 'void', False) + "QFile::setFileName": [ + ( + "setFileName", + "", + [("name", "const std::filesystem::path &", None)], + "void", + False, + ) ], - "QFile::permissions":[ - ('permissions', '', [('filename', 'const std::filesystem::path &', None)], 'QFileDevice::Permissions', False) + "QFile::permissions": [ + ( + "permissions", + "", + [("filename", "const std::filesystem::path &", None)], + "QFileDevice::Permissions", + False, + ) ], - "QFile::copy":[ - ('copy', '', [('newName', 'const std::filesystem::path &', None)], 'bool', False) + "QFile::copy": [ + ( + "copy", + "", + [("newName", "const std::filesystem::path &", None)], + "bool", + False, + ) ], - "QFile::setPermissions":[ - ('setPermissions', '', [('permissions', 'QFileDevice::Permissions', None)], 'virtual bool', False), - ('setPermissions', '', [('fileName', 'const QString &', None), ('permissions', 'QFileDevice::Permissions', None)], 'bool', False), - ('setPermissions', '', [('filename', 'const std::filesystem::path &', None), ('permissionSpec', 'QFileDevice::Permissions', None)], 'bool', False) + "QFile::setPermissions": [ + ( + "setPermissions", + "", + [("permissions", "QFileDevice::Permissions", None)], + "virtual bool", + False, + ), + ( + "setPermissions", + "", + [ + ("fileName", "const QString &", None), + ("permissions", "QFileDevice::Permissions", None), + ], + "bool", + False, + ), + ( + "setPermissions", + "", + [ + ("filename", "const std::filesystem::path &", None), + ("permissionSpec", "QFileDevice::Permissions", None), + ], + "bool", + False, + ), ], # Issue with conversion QString to QString * "QFile::moveToTrash": [ ( - "moveToTrash", - "", - [("fileName", "const QString &", None), ("pathInTrash", "QString *", "nullptr")], - "bool", - False + "moveToTrash", + "", + [ + ("fileName", "const QString &", None), + ("pathInTrash", "QString *", "nullptr"), + ], + "bool", + False, ) ], # QFile has funky semantics which screw things up in QFileInfo # so these have to be done manually "QFileInfo::QFileInfo": [ - ('QFileInfo', '', [('file', 'const QFileDevice &', None)], '', False), - ('QFileInfo', '', [('dir', 'const QDir &', None), ('file', 'const std::filesystem::path &', None)], '', False), - ('QFileInfo', '', [('file', 'const std::filesystem::path &', None)], '', False) + ("QFileInfo", "", [("file", "const QFileDevice &", None)], "", False), + ( + "QFileInfo", + "", + [ + ("dir", "const QDir &", None), + ("file", "const std::filesystem::path &", None), + ], + "", + False, + ), + ("QFileInfo", "", [("file", "const std::filesystem::path &", None)], "", False), ], "QFileInfo::setFile": [ - ('setFile', '', [('file', 'const std::filesystem::path &', None)], 'void', False), - ('setFile', '', [('file', 'const QFileDevice &', None)], 'void', False) + ( + "setFile", + "", + [("file", "const std::filesystem::path &", None)], + "void", + False, + ), + ("setFile", "", [("file", "const QFileDevice &", None)], "void", False), ], "QFileInfo::operator!=": [ ( @@ -1233,7 +1311,7 @@ def indexOf(element, sequence): "QTextOption::tabs": None, # Syntax error with "const QList arg1 = (&)(param_selections);" "QTextEdit::setExtraSelections": None, - "QTextStream::QTextStream": None, # handrolled + "QTextStream::QTextStream": None, # handrolled "QTextStream::setString": None, "QTextStream::string": None, "QTextStream::readLineInto": None, @@ -1241,7 +1319,7 @@ def indexOf(element, sequence): "QTextStream::operator>>": None, # cannot convert from 'std::chrono::milliseconds' to 'int' "QTimer::intervalAsDuration": None, - # cannot convert from 'std::chrono::milliseconds' to 'int' + # cannot convert from 'std::chrono::milliseconds' to 'int' "QTimer::remainingTimeAsDuration": None, "QCursor::bitmap": None, "QCursor::mask": None, @@ -1262,7 +1340,7 @@ def indexOf(element, sequence): "QWebEngineView::findText": None, "QMenu::setAsDockMenu": None, # Trouble with std::initializer_list - # syntax error: std::initializer_list > arg1 = (>)(param_list); + # syntax error: std::initializer_list > arg1 = (>)(param_list); "QUrlQuery::QUrlQuery": [ ( "QUrlQuery", @@ -1274,13 +1352,16 @@ def indexOf(element, sequence): False, ) ], - "QQuickItem::itemChange":[ + "QQuickItem::itemChange": [ ( - "itemChange", - "", - [("change", "QQuickItem::ItemChange", None), ("value", "const QQuickItem::ItemChangeData &", None)], - "virtual void", - False + "itemChange", + "", + [ + ("change", "QQuickItem::ItemChange", None), + ("value", "const QQuickItem::ItemChangeData &", None), + ], + "virtual void", + False, ) ], # Syntax issue with 'const QVector arg1 = (&)(param_properties);' @@ -1337,17 +1418,43 @@ def indexOf(element, sequence): ), ], "QDir::QDir": [ - ('QDir', '', [('path', 'const std::filesystem::path &', None), ('nameFilter', 'const QString &', None), ('sort', 'QDir::SortFlags', 'SortFlags(Name | IgnoreCase)'), ('filters', 'QDir::Filters', 'AllEntries')], '', False), - ('QDir', '', [('path', 'const std::filesystem::path &', None)], '', False) + ( + "QDir", + "", + [ + ("path", "const std::filesystem::path &", None), + ("nameFilter", "const QString &", None), + ("sort", "QDir::SortFlags", "SortFlags(Name | IgnoreCase)"), + ("filters", "QDir::Filters", "AllEntries"), + ], + "", + False, + ), + ("QDir", "", [("path", "const std::filesystem::path &", None)], "", False), ], "QDir::filesystemAbsolutePath": None, "QDir::filesystemCanonicalPath": None, "QDir::filesystemPath": None, "QDir::setPath": [ - ('setPath', '', [('path', 'const std::filesystem::path &', None)], 'void', False) + ( + "setPath", + "", + [("path", "const std::filesystem::path &", None)], + "void", + False, + ) ], "QDir::addSearchPath": [ - ('addSearchPath', '', [('prefix', 'const QString &', None), ('path', 'const std::filesystem::path &', None)], 'void', False) + ( + "addSearchPath", + "", + [ + ("prefix", "const QString &", None), + ("path", "const std::filesystem::path &", None), + ], + "void", + False, + ) ], "QFileInfo::filesystemAbsoluteFilePath": None, "QFileInfo::filesystemAbsolutePath": None, @@ -1358,6 +1465,8 @@ def indexOf(element, sequence): "QFileInfo::filesystemPath": None, "QFileInfo::filesystemReadSymLink": None, "QFileInfo::filesystemSymLinkTarget": None, + "QUrl::fromAce": None, + "QUrl::toAce": None, } customNativeFuncsHeader = { @@ -1720,33 +1829,34 @@ def parseParameter(param, n): def parse_cpp_function(function_signature): # Updated regular expression to handle operator overloading - pattern = r'^((?:template\s+)?(?:virtual\s+)?(?:explicit\s+)?(?:[\w:]+(?:<.*?>)?(?:\s*[\*&])?\s+)+)?\s*(\~?\w+(?:::\w+)*|\w+\s*(?:<.*?>)?::(?:~?\w+|operator\s*\S+)|operator\s*\S+)\s*(\(.*?\))(?:\s*((?:const)?\s*(?:noexcept)?\s*(?:override)?\s*(?:final)?\s*(?:&)?\s*(?:->.*?)?(?:=\s*\w+)?))?$' - + pattern = r"^((?:template\s+)?(?:virtual\s+)?(?:explicit\s+)?(?:[\w:]+(?:<.*?>)?(?:\s*[\*&])?\s+)+)?\s*(\~?\w+(?:::\w+)*|\w+\s*(?:<.*?>)?::(?:~?\w+|operator\s*\S+)|operator\s*\S+)\s*(\(.*?\))(?:\s*((?:const)?\s*(?:noexcept)?\s*(?:override)?\s*(?:final)?\s*(?:&)?\s*(?:->.*?)?(?:=\s*\w+)?))?$" + match = re.match(pattern, function_signature.strip()) - + if not match: return None, None, None, None - + return_type, function_name, parameters, after_parameters = match.groups() - + # Clean up the matches if return_type: return_type = return_type.strip() else: return_type = "" - + function_name = function_name.strip() - + # Fix this as this remove () for thing like Qt::WindowsFlag() parameters = parameters[1:-1] - + if after_parameters: after_parameters = after_parameters.strip() else: after_parameters = "" - + return return_type, function_name, parameters, after_parameters + def parseFunction(func, qtnamespace): orig_func = func # parts = func.split("(") @@ -1769,7 +1879,7 @@ def parseFunction(func, qtnamespace): demoted = False if len(func) == 0: return None - + message("Processing function " + func) if func[-1] == "@": # demote virtual props to not props otherwise we can't create @@ -1853,18 +1963,24 @@ def parseFunction(func, qtnamespace): params[i] = (p[0] + "_", p[1], p[2]) if nameproto: - v = (nameproto[-1], thistype, params, string.join(nameproto[0:-1]), prop) + v = ( + nameproto[-1], + thistype, + params, + string.join(nameproto[0:-1]), + prop, + ) if demoted: qtnamespace.demotedProps.append(v) # message("PROP demoted " + str(func)) return v else: - message("WARNING: Nameproto empty for " + func) + message("WARNING: Nameproto empty for " + func) except: # Skip any function that has issue with the simple parsing above. print("Error parsing function.. skipping: {0}".format(orig_func)) return None - + return None @@ -2087,8 +2203,8 @@ def __init__(self, enumeration, muclass): if e.name != "\n": # TODO: Might not be the right place to do it, but it works. # Remove anything parenthesis and spacing in the name. - pattern = r'\([^)]*\)' - e.name = re.sub(pattern, '', e.name).strip() + pattern = r"\([^)]*\)" + e.name = re.sub(pattern, "", e.name).strip() name_without_class_name = e.name.split(muclass.name, 1)[1] # Could use e.name for val, but let's keep the logic similar. val = muclass.name + name_without_class_name @@ -2160,7 +2276,11 @@ def __init__(self, api, muclass, qtfunc, isMember, isProtected, isCastOp): self.purevirtual = "= 0" in qtfunc[1] print("Processing function {0}".format(qtfunc)) - print("failed: {0}, isprop: {1}, isprotected: {2}".format(str(self.failed), str(self.isprop), str(self.isprotected))) + print( + "failed: {0}, isprop: {1}, isprotected: {2}".format( + str(self.failed), str(self.isprop), str(self.isprotected) + ) + ) if self.operator: self.name = name[8 : len(name)] @@ -2185,12 +2305,15 @@ def __init__(self, api, muclass, qtfunc, isMember, isProtected, isCastOp): else: self.args.append(("this", muclass.name, None)) - for (aname, atype, aval) in args: + for aname, atype, aval in args: message("Trying to translate (%s, %s) for %s" % (atype, c, name)) mutype = api.translate(atype, c) if mutype == None: self.failed = True - message("%s failed because api.translate(%s,%s) return None" % (name, atype, c)) + message( + "%s failed because api.translate(%s,%s) return None" + % (name, atype, c) + ) mutype = '"%s"' % atype self.args.append((aname, mutype, aval)) @@ -2290,7 +2413,7 @@ def symbolDeclaration(self): ) if self.args: out += "Parameters, " - for (aname, atype, aval) in self.args: + for aname, atype, aval in self.args: atype = conditionType(atype) if self.muclass.muapi.classes.has_key(atype): atype = "qt." + atype @@ -2328,7 +2451,7 @@ def nodeImplementation(self): out += "%s(NODE_THREAD" % self.compiled if self.args: count = 0 - for (aname, atype, aval) in self.args: + for aname, atype, aval in self.args: rep = repMapFind(atype) (repType, instType) = rep if count == 0 and self.ismember: @@ -2423,7 +2546,7 @@ def compiledFunction(self): return "// NO FUNC: CONSTRUCTOR IS PROTECTED: %s" % self.muDeclaration() rep = repMapFind(self.rtype) out = "%s %s(Mu::Thread& NODE_THREAD" % (rep[0], self.compiled) - for (aname, atype, aval) in self.args: + for aname, atype, aval in self.args: rep = repMapFind(atype) out += ", %s param_%s" % (rep[0], aname) out += ")\n{\n" @@ -2672,7 +2795,7 @@ def compiledFunction(self): def muDeclaration(self): out = "%s (%s; " % (self.name, self.rtype) comma = False - for (aname, mutype, aval) in self.args: + for aname, mutype, aval in self.args: if comma: out += ", " out += "%s %s" % (mutype, aname) @@ -2714,7 +2837,10 @@ def __init__(self, api, qtnamespace, muapi): fname = f[0] rtype = f[3] cppname = qtnamespace.name + "::" + fname - message("functions fname = %s, rtype = %s, cppname = %s" % (fname, rtype, cppname)) + message( + "functions fname = %s, rtype = %s, cppname = %s" + % (fname, rtype, cppname) + ) exclude = isFunctionExcluded(qtnamespace, f) if exclude and verbose: print("EXCLUDED:", str(f)) @@ -2765,7 +2891,10 @@ def __init__(self, api, qtnamespace, muapi): cppname = qtnamespace.name + "::" + fname exclude = isFunctionExcluded(qtnamespace, f) print(qtnamespace) - message("staticfuncs fname = %s, cppname = %s, exclude = %s" % (fname, cppname, str(exclude))) + message( + "staticfuncs fname = %s, cppname = %s, exclude = %s" + % (fname, cppname, str(exclude)) + ) if not exclude: self.statics.append( MuFunction( @@ -3425,7 +3554,7 @@ def outputSourceFiles(self): cppout = open("qtGlobals.cpp", "w") else: cppout = open(name + "Type.cpp", "w") - + cppout.writelines(cpplines) cppout.close() @@ -3674,7 +3803,7 @@ def end_title(self): self.qtnamespace.isclass = isclass def start_span(self, attrs): - for (attr, value) in attrs: + for attr, value in attrs: if value == "small-subtitle": self.modulespan = True @@ -3701,11 +3830,11 @@ def end_p(self): def start_a(self, attrs): if self.ininheritedby: - for (attr, value) in attrs: + for attr, value in attrs: if attr == "href": self.addChildURL(value) elif self.infunc: - for (attr, value) in attrs: + for attr, value in attrs: if attr == "href": self.funcIsProp = value.rfind("-prop") != -1 self.acount += 1 @@ -3996,7 +4125,7 @@ def recursiveParse(url): # if "qwidget.html" in u: absPath = os.path.join(os.path.dirname(url), u) recursiveParse(absPath) - except (IOError): + except IOError: print("FAILED: (IOError)", url) except: sys.stdout.flush() @@ -4198,4 +4327,4 @@ def findHTMLinDocTree(rootname): typelist.append(t) typelist.sort() - pp.pprint(typelist) \ No newline at end of file + pp.pprint(typelist) diff --git a/src/lib/mu/MuQt6/qtTypeDefinitions.cpp b/src/lib/mu/MuQt6/qtTypeDefinitions.cpp index da76489d..7620f099 100644 --- a/src/lib/mu/MuQt6/qtTypeDefinitions.cpp +++ b/src/lib/mu/MuQt6/qtTypeDefinitions.cpp @@ -48,134 +48,134 @@ QWidgetType* addAllQTSymbols(MuLangContext* c, Module* qt) QCursorType* t_QCursor = new QCursorType(c, "QCursor"); qt->addSymbol(t_QCursor); QWebEngineSettingsType* t_QWebEngineSettings = new QWebEngineSettingsType(c, "QWebEngineSettings"); qt->addSymbol(t_QWebEngineSettings); QIODeviceBaseType* t_QIODeviceBase = new QIODeviceBaseType(c, "QIODeviceBase"); qt->addSymbol(t_QIODeviceBase); - QMoveEventType* t_QMoveEvent = new QMoveEventType(c, "QMoveEvent", t_QEvent); qt->addSymbol(t_QMoveEvent); + QDropEventType* t_QDropEvent = new QDropEventType(c, "QDropEvent", t_QEvent); qt->addSymbol(t_QDropEvent); + QDragLeaveEventType* t_QDragLeaveEvent = new QDragLeaveEventType(c, "QDragLeaveEvent", t_QEvent); qt->addSymbol(t_QDragLeaveEvent); + QWidgetType* t_QWidget = new QWidgetType(c, "QWidget", t_QObject, t_QPaintDevice); qt->addSymbol(t_QWidget); QPaintEventType* t_QPaintEvent = new QPaintEventType(c, "QPaintEvent", t_QEvent); qt->addSymbol(t_QPaintEvent); - QTcpServerType* t_QTcpServer = new QTcpServerType(c, "QTcpServer", t_QObject); qt->addSymbol(t_QTcpServer); - QImageType* t_QImage = new QImageType(c, "QImage", t_QPaintDevice); qt->addSymbol(t_QImage); - QFocusEventType* t_QFocusEvent = new QFocusEventType(c, "QFocusEvent", t_QEvent); qt->addSymbol(t_QFocusEvent); - QTimerEventType* t_QTimerEvent = new QTimerEventType(c, "QTimerEvent", t_QEvent); qt->addSymbol(t_QTimerEvent); - QClipboardType* t_QClipboard = new QClipboardType(c, "QClipboard", t_QObject); qt->addSymbol(t_QClipboard); - QWebEngineProfileType* t_QWebEngineProfile = new QWebEngineProfileType(c, "QWebEngineProfile", t_QObject); qt->addSymbol(t_QWebEngineProfile); - QWebEnginePageType* t_QWebEnginePage = new QWebEnginePageType(c, "QWebEnginePage", t_QObject); qt->addSymbol(t_QWebEnginePage); QButtonGroupType* t_QButtonGroup = new QButtonGroupType(c, "QButtonGroup", t_QObject); qt->addSymbol(t_QButtonGroup); - QWidgetType* t_QWidget = new QWidgetType(c, "QWidget", t_QObject, t_QPaintDevice); qt->addSymbol(t_QWidget); - QConicalGradientType* t_QConicalGradient = new QConicalGradientType(c, "QConicalGradient", t_QGradient); qt->addSymbol(t_QConicalGradient); - QCoreApplicationType* t_QCoreApplication = new QCoreApplicationType(c, "QCoreApplication", t_QObject); qt->addSymbol(t_QCoreApplication); - QGestureEventType* t_QGestureEvent = new QGestureEventType(c, "QGestureEvent", t_QEvent); qt->addSymbol(t_QGestureEvent); - QHelpEventType* t_QHelpEvent = new QHelpEventType(c, "QHelpEvent", t_QEvent); qt->addSymbol(t_QHelpEvent); - QLinearGradientType* t_QLinearGradient = new QLinearGradientType(c, "QLinearGradient", t_QGradient); qt->addSymbol(t_QLinearGradient); - QLayoutType* t_QLayout = new QLayoutType(c, "QLayout", t_QObject, t_QLayoutItem); qt->addSymbol(t_QLayout); - QQmlContextType* t_QQmlContext = new QQmlContextType(c, "QQmlContext", t_QObject); qt->addSymbol(t_QQmlContext); QAbstractItemModelType* t_QAbstractItemModel = new QAbstractItemModelType(c, "QAbstractItemModel", t_QObject); qt->addSymbol(t_QAbstractItemModel); - QFileOpenEventType* t_QFileOpenEvent = new QFileOpenEventType(c, "QFileOpenEvent", t_QEvent); qt->addSymbol(t_QFileOpenEvent); - QScreenType* t_QScreen = new QScreenType(c, "QScreen", t_QObject); qt->addSymbol(t_QScreen); - QActionType* t_QAction = new QActionType(c, "QAction", t_QObject); qt->addSymbol(t_QAction); + QCompleterType* t_QCompleter = new QCompleterType(c, "QCompleter", t_QObject); qt->addSymbol(t_QCompleter); + QTimerEventType* t_QTimerEvent = new QTimerEventType(c, "QTimerEvent", t_QEvent); qt->addSymbol(t_QTimerEvent); + QConicalGradientType* t_QConicalGradient = new QConicalGradientType(c, "QConicalGradient", t_QGradient); qt->addSymbol(t_QConicalGradient); + QResizeEventType* t_QResizeEvent = new QResizeEventType(c, "QResizeEvent", t_QEvent); qt->addSymbol(t_QResizeEvent); QEventLoopType* t_QEventLoop = new QEventLoopType(c, "QEventLoop", t_QObject); qt->addSymbol(t_QEventLoop); - QMimeDataType* t_QMimeData = new QMimeDataType(c, "QMimeData", t_QObject); qt->addSymbol(t_QMimeData); - QHideEventType* t_QHideEvent = new QHideEventType(c, "QHideEvent", t_QEvent); qt->addSymbol(t_QHideEvent); - QDropEventType* t_QDropEvent = new QDropEventType(c, "QDropEvent", t_QEvent); qt->addSymbol(t_QDropEvent); - QCloseEventType* t_QCloseEvent = new QCloseEventType(c, "QCloseEvent", t_QEvent); qt->addSymbol(t_QCloseEvent); QTextDocumentType* t_QTextDocument = new QTextDocumentType(c, "QTextDocument", t_QObject); qt->addSymbol(t_QTextDocument); - QPixmapType* t_QPixmap = new QPixmapType(c, "QPixmap", t_QPaintDevice); qt->addSymbol(t_QPixmap); + QHideEventType* t_QHideEvent = new QHideEventType(c, "QHideEvent", t_QEvent); qt->addSymbol(t_QHideEvent); + QItemSelectionModelType* t_QItemSelectionModel = new QItemSelectionModelType(c, "QItemSelectionModel", t_QObject); qt->addSymbol(t_QItemSelectionModel); + QActionType* t_QAction = new QActionType(c, "QAction", t_QObject); qt->addSymbol(t_QAction); + QHelpEventType* t_QHelpEvent = new QHelpEventType(c, "QHelpEvent", t_QEvent); qt->addSymbol(t_QHelpEvent); + QLayoutType* t_QLayout = new QLayoutType(c, "QLayout", t_QObject, t_QLayoutItem); qt->addSymbol(t_QLayout); + QTcpServerType* t_QTcpServer = new QTcpServerType(c, "QTcpServer", t_QObject); qt->addSymbol(t_QTcpServer); + QMoveEventType* t_QMoveEvent = new QMoveEventType(c, "QMoveEvent", t_QEvent); qt->addSymbol(t_QMoveEvent); QRadialGradientType* t_QRadialGradient = new QRadialGradientType(c, "QRadialGradient", t_QGradient); qt->addSymbol(t_QRadialGradient); + QFileOpenEventType* t_QFileOpenEvent = new QFileOpenEventType(c, "QFileOpenEvent", t_QEvent); qt->addSymbol(t_QFileOpenEvent); + QGestureEventType* t_QGestureEvent = new QGestureEventType(c, "QGestureEvent", t_QEvent); qt->addSymbol(t_QGestureEvent); + QWebEngineHistoryType* t_QWebEngineHistory = new QWebEngineHistoryType(c, "QWebEngineHistory", t_QObject); qt->addSymbol(t_QWebEngineHistory); + QQmlContextType* t_QQmlContext = new QQmlContextType(c, "QQmlContext", t_QObject); qt->addSymbol(t_QQmlContext); QShowEventType* t_QShowEvent = new QShowEventType(c, "QShowEvent", t_QEvent); qt->addSymbol(t_QShowEvent); - QTextStreamType* t_QTextStream = new QTextStreamType(c, "QTextStream", t_QIODeviceBase); qt->addSymbol(t_QTextStream); - QTimerType* t_QTimer = new QTimerType(c, "QTimer", t_QObject); qt->addSymbol(t_QTimer); - QCompleterType* t_QCompleter = new QCompleterType(c, "QCompleter", t_QObject); qt->addSymbol(t_QCompleter); - QInputEventType* t_QInputEvent = new QInputEventType(c, "QInputEvent", t_QEvent); qt->addSymbol(t_QInputEvent); - QWebChannelType* t_QWebChannel = new QWebChannelType(c, "QWebChannel", t_QObject); qt->addSymbol(t_QWebChannel); - QResizeEventType* t_QResizeEvent = new QResizeEventType(c, "QResizeEvent", t_QEvent); qt->addSymbol(t_QResizeEvent); QWebEngineCookieStoreType* t_QWebEngineCookieStore = new QWebEngineCookieStoreType(c, "QWebEngineCookieStore", t_QObject); qt->addSymbol(t_QWebEngineCookieStore); + QWebChannelType* t_QWebChannel = new QWebChannelType(c, "QWebChannel", t_QObject); qt->addSymbol(t_QWebChannel); + QClipboardType* t_QClipboard = new QClipboardType(c, "QClipboard", t_QObject); qt->addSymbol(t_QClipboard); + QTextStreamType* t_QTextStream = new QTextStreamType(c, "QTextStream", t_QIODeviceBase); qt->addSymbol(t_QTextStream); QNetworkCookieJarType* t_QNetworkCookieJar = new QNetworkCookieJarType(c, "QNetworkCookieJar", t_QObject); qt->addSymbol(t_QNetworkCookieJar); QWindowStateChangeEventType* t_QWindowStateChangeEvent = new QWindowStateChangeEventType(c, "QWindowStateChangeEvent", t_QEvent); qt->addSymbol(t_QWindowStateChangeEvent); - QNetworkAccessManagerType* t_QNetworkAccessManager = new QNetworkAccessManagerType(c, "QNetworkAccessManager", t_QObject); qt->addSymbol(t_QNetworkAccessManager); - QJSEngineType* t_QJSEngine = new QJSEngineType(c, "QJSEngine", t_QObject); qt->addSymbol(t_QJSEngine); - QDragLeaveEventType* t_QDragLeaveEvent = new QDragLeaveEventType(c, "QDragLeaveEvent", t_QEvent); qt->addSymbol(t_QDragLeaveEvent); + QPixmapType* t_QPixmap = new QPixmapType(c, "QPixmap", t_QPaintDevice); qt->addSymbol(t_QPixmap); QShortcutEventType* t_QShortcutEvent = new QShortcutEventType(c, "QShortcutEvent", t_QEvent); qt->addSymbol(t_QShortcutEvent); - QWebEngineHistoryType* t_QWebEngineHistory = new QWebEngineHistoryType(c, "QWebEngineHistory", t_QObject); qt->addSymbol(t_QWebEngineHistory); QQuickItemType* t_QQuickItem = new QQuickItemType(c, "QQuickItem", t_QObject); qt->addSymbol(t_QQuickItem); - QItemSelectionModelType* t_QItemSelectionModel = new QItemSelectionModelType(c, "QItemSelectionModel", t_QObject); qt->addSymbol(t_QItemSelectionModel); + QCoreApplicationType* t_QCoreApplication = new QCoreApplicationType(c, "QCoreApplication", t_QObject); qt->addSymbol(t_QCoreApplication); + QCloseEventType* t_QCloseEvent = new QCloseEventType(c, "QCloseEvent", t_QEvent); qt->addSymbol(t_QCloseEvent); + QWebEnginePageType* t_QWebEnginePage = new QWebEnginePageType(c, "QWebEnginePage", t_QObject); qt->addSymbol(t_QWebEnginePage); QActionGroupType* t_QActionGroup = new QActionGroupType(c, "QActionGroup", t_QObject); qt->addSymbol(t_QActionGroup); QIODeviceType* t_QIODevice = new QIODeviceType(c, "QIODevice", t_QObject, t_QIODeviceBase); qt->addSymbol(t_QIODevice); - QDialogType* t_QDialog = new QDialogType(c, "QDialog", t_QWidget); qt->addSymbol(t_QDialog); - QMainWindowType* t_QMainWindow = new QMainWindowType(c, "QMainWindow", t_QWidget); qt->addSymbol(t_QMainWindow); + QLinearGradientType* t_QLinearGradient = new QLinearGradientType(c, "QLinearGradient", t_QGradient); qt->addSymbol(t_QLinearGradient); + QScreenType* t_QScreen = new QScreenType(c, "QScreen", t_QObject); qt->addSymbol(t_QScreen); + QJSEngineType* t_QJSEngine = new QJSEngineType(c, "QJSEngine", t_QObject); qt->addSymbol(t_QJSEngine); + QMimeDataType* t_QMimeData = new QMimeDataType(c, "QMimeData", t_QObject); qt->addSymbol(t_QMimeData); + QInputEventType* t_QInputEvent = new QInputEventType(c, "QInputEvent", t_QEvent); qt->addSymbol(t_QInputEvent); + QFocusEventType* t_QFocusEvent = new QFocusEventType(c, "QFocusEvent", t_QEvent); qt->addSymbol(t_QFocusEvent); + QNetworkAccessManagerType* t_QNetworkAccessManager = new QNetworkAccessManagerType(c, "QNetworkAccessManager", t_QObject); qt->addSymbol(t_QNetworkAccessManager); + QTimerType* t_QTimer = new QTimerType(c, "QTimer", t_QObject); qt->addSymbol(t_QTimer); + QWebEngineProfileType* t_QWebEngineProfile = new QWebEngineProfileType(c, "QWebEngineProfile", t_QObject); qt->addSymbol(t_QWebEngineProfile); + QImageType* t_QImage = new QImageType(c, "QImage", t_QPaintDevice); qt->addSymbol(t_QImage); + QLocalSocketType* t_QLocalSocket = new QLocalSocketType(c, "QLocalSocket", t_QIODevice); qt->addSymbol(t_QLocalSocket); + QAbstractSpinBoxType* t_QAbstractSpinBox = new QAbstractSpinBoxType(c, "QAbstractSpinBox", t_QWidget); qt->addSymbol(t_QAbstractSpinBox); + QProgressBarType* t_QProgressBar = new QProgressBarType(c, "QProgressBar", t_QWidget); qt->addSymbol(t_QProgressBar); + QWebEngineViewType* t_QWebEngineView = new QWebEngineViewType(c, "QWebEngineView", t_QWidget); qt->addSymbol(t_QWebEngineView); + QTabWidgetType* t_QTabWidget = new QTabWidgetType(c, "QTabWidget", t_QWidget); qt->addSymbol(t_QTabWidget); + QAbstractListModelType* t_QAbstractListModel = new QAbstractListModelType(c, "QAbstractListModel", t_QAbstractItemModel); qt->addSymbol(t_QAbstractListModel); + QMenuBarType* t_QMenuBar = new QMenuBarType(c, "QMenuBar", t_QWidget); qt->addSymbol(t_QMenuBar); + QAbstractSliderType* t_QAbstractSlider = new QAbstractSliderType(c, "QAbstractSlider", t_QWidget); qt->addSymbol(t_QAbstractSlider); + QGridLayoutType* t_QGridLayout = new QGridLayoutType(c, "QGridLayout", t_QLayout); qt->addSymbol(t_QGridLayout); QMenuType* t_QMenu = new QMenuType(c, "QMenu", t_QWidget); qt->addSymbol(t_QMenu); - QQuickWidgetType* t_QQuickWidget = new QQuickWidgetType(c, "QQuickWidget", t_QWidget); qt->addSymbol(t_QQuickWidget); - QAbstractButtonType* t_QAbstractButton = new QAbstractButtonType(c, "QAbstractButton", t_QWidget); qt->addSymbol(t_QAbstractButton); - QBoxLayoutType* t_QBoxLayout = new QBoxLayoutType(c, "QBoxLayout", t_QLayout); qt->addSymbol(t_QBoxLayout); + QDockWidgetType* t_QDockWidget = new QDockWidgetType(c, "QDockWidget", t_QWidget); qt->addSymbol(t_QDockWidget); + QDialogType* t_QDialog = new QDialogType(c, "QDialog", t_QWidget); qt->addSymbol(t_QDialog); + QFormLayoutType* t_QFormLayout = new QFormLayoutType(c, "QFormLayout", t_QLayout); qt->addSymbol(t_QFormLayout); + QStatusBarType* t_QStatusBar = new QStatusBarType(c, "QStatusBar", t_QWidget); qt->addSymbol(t_QStatusBar); + QKeyEventType* t_QKeyEvent = new QKeyEventType(c, "QKeyEvent", t_QInputEvent); qt->addSymbol(t_QKeyEvent); + QTabBarType* t_QTabBar = new QTabBarType(c, "QTabBar", t_QWidget); qt->addSymbol(t_QTabBar); QWidgetActionType* t_QWidgetAction = new QWidgetActionType(c, "QWidgetAction", t_QAction); qt->addSymbol(t_QWidgetAction); - QSvgWidgetType* t_QSvgWidget = new QSvgWidgetType(c, "QSvgWidget", t_QWidget); qt->addSymbol(t_QSvgWidget); - QLocalSocketType* t_QLocalSocket = new QLocalSocketType(c, "QLocalSocket", t_QIODevice); qt->addSymbol(t_QLocalSocket); QLineEditType* t_QLineEdit = new QLineEditType(c, "QLineEdit", t_QWidget); qt->addSymbol(t_QLineEdit); - QGuiApplicationType* t_QGuiApplication = new QGuiApplicationType(c, "QGuiApplication", t_QCoreApplication); qt->addSymbol(t_QGuiApplication); + QQmlEngineType* t_QQmlEngine = new QQmlEngineType(c, "QQmlEngine", t_QJSEngine); qt->addSymbol(t_QQmlEngine); QPointerEventType* t_QPointerEvent = new QPointerEventType(c, "QPointerEvent", t_QInputEvent); qt->addSymbol(t_QPointerEvent); - QGridLayoutType* t_QGridLayout = new QGridLayoutType(c, "QGridLayout", t_QLayout); qt->addSymbol(t_QGridLayout); - QMenuBarType* t_QMenuBar = new QMenuBarType(c, "QMenuBar", t_QWidget); qt->addSymbol(t_QMenuBar); - QStatusBarType* t_QStatusBar = new QStatusBarType(c, "QStatusBar", t_QWidget); qt->addSymbol(t_QStatusBar); + QToolBarType* t_QToolBar = new QToolBarType(c, "QToolBar", t_QWidget); qt->addSymbol(t_QToolBar); + QAbstractButtonType* t_QAbstractButton = new QAbstractButtonType(c, "QAbstractButton", t_QWidget); qt->addSymbol(t_QAbstractButton); + QGuiApplicationType* t_QGuiApplication = new QGuiApplicationType(c, "QGuiApplication", t_QCoreApplication); qt->addSymbol(t_QGuiApplication); QBitmapType* t_QBitmap = new QBitmapType(c, "QBitmap", t_QPixmap); qt->addSymbol(t_QBitmap); - QProgressBarType* t_QProgressBar = new QProgressBarType(c, "QProgressBar", t_QWidget); qt->addSymbol(t_QProgressBar); - QGroupBoxType* t_QGroupBox = new QGroupBoxType(c, "QGroupBox", t_QWidget); qt->addSymbol(t_QGroupBox); - QComboBoxType* t_QComboBox = new QComboBoxType(c, "QComboBox", t_QWidget); qt->addSymbol(t_QComboBox); - QFormLayoutType* t_QFormLayout = new QFormLayoutType(c, "QFormLayout", t_QLayout); qt->addSymbol(t_QFormLayout); - QKeyEventType* t_QKeyEvent = new QKeyEventType(c, "QKeyEvent", t_QInputEvent); qt->addSymbol(t_QKeyEvent); + QFileDeviceType* t_QFileDevice = new QFileDeviceType(c, "QFileDevice", t_QIODevice); qt->addSymbol(t_QFileDevice); QProcessType* t_QProcess = new QProcessType(c, "QProcess", t_QIODevice); qt->addSymbol(t_QProcess); - QAbstractTableModelType* t_QAbstractTableModel = new QAbstractTableModelType(c, "QAbstractTableModel", t_QAbstractItemModel); qt->addSymbol(t_QAbstractTableModel); - QQmlEngineType* t_QQmlEngine = new QQmlEngineType(c, "QQmlEngine", t_QJSEngine); qt->addSymbol(t_QQmlEngine); - QNetworkReplyType* t_QNetworkReply = new QNetworkReplyType(c, "QNetworkReply", t_QIODevice); qt->addSymbol(t_QNetworkReply); + QGroupBoxType* t_QGroupBox = new QGroupBoxType(c, "QGroupBox", t_QWidget); qt->addSymbol(t_QGroupBox); + QBoxLayoutType* t_QBoxLayout = new QBoxLayoutType(c, "QBoxLayout", t_QLayout); qt->addSymbol(t_QBoxLayout); + QFrameType* t_QFrame = new QFrameType(c, "QFrame", t_QWidget); qt->addSymbol(t_QFrame); QContextMenuEventType* t_QContextMenuEvent = new QContextMenuEventType(c, "QContextMenuEvent", t_QInputEvent); qt->addSymbol(t_QContextMenuEvent); - QAbstractSliderType* t_QAbstractSlider = new QAbstractSliderType(c, "QAbstractSlider", t_QWidget); qt->addSymbol(t_QAbstractSlider); + QSvgWidgetType* t_QSvgWidget = new QSvgWidgetType(c, "QSvgWidget", t_QWidget); qt->addSymbol(t_QSvgWidget); QStandardItemModelType* t_QStandardItemModel = new QStandardItemModelType(c, "QStandardItemModel", t_QAbstractItemModel); qt->addSymbol(t_QStandardItemModel); - QToolBarType* t_QToolBar = new QToolBarType(c, "QToolBar", t_QWidget); qt->addSymbol(t_QToolBar); + QComboBoxType* t_QComboBox = new QComboBoxType(c, "QComboBox", t_QWidget); qt->addSymbol(t_QComboBox); + QMainWindowType* t_QMainWindow = new QMainWindowType(c, "QMainWindow", t_QWidget); qt->addSymbol(t_QMainWindow); QAbstractSocketType* t_QAbstractSocket = new QAbstractSocketType(c, "QAbstractSocket", t_QIODevice); qt->addSymbol(t_QAbstractSocket); - QWebEngineViewType* t_QWebEngineView = new QWebEngineViewType(c, "QWebEngineView", t_QWidget); qt->addSymbol(t_QWebEngineView); - QAbstractListModelType* t_QAbstractListModel = new QAbstractListModelType(c, "QAbstractListModel", t_QAbstractItemModel); qt->addSymbol(t_QAbstractListModel); - QAbstractSpinBoxType* t_QAbstractSpinBox = new QAbstractSpinBoxType(c, "QAbstractSpinBox", t_QWidget); qt->addSymbol(t_QAbstractSpinBox); - QFrameType* t_QFrame = new QFrameType(c, "QFrame", t_QWidget); qt->addSymbol(t_QFrame); - QTabWidgetType* t_QTabWidget = new QTabWidgetType(c, "QTabWidget", t_QWidget); qt->addSymbol(t_QTabWidget); + QAbstractTableModelType* t_QAbstractTableModel = new QAbstractTableModelType(c, "QAbstractTableModel", t_QAbstractItemModel); qt->addSymbol(t_QAbstractTableModel); QDragMoveEventType* t_QDragMoveEvent = new QDragMoveEventType(c, "QDragMoveEvent", t_QDropEvent); qt->addSymbol(t_QDragMoveEvent); - QTabBarType* t_QTabBar = new QTabBarType(c, "QTabBar", t_QWidget); qt->addSymbol(t_QTabBar); - QDockWidgetType* t_QDockWidget = new QDockWidgetType(c, "QDockWidget", t_QWidget); qt->addSymbol(t_QDockWidget); - QFileDeviceType* t_QFileDevice = new QFileDeviceType(c, "QFileDevice", t_QIODevice); qt->addSymbol(t_QFileDevice); - QVBoxLayoutType* t_QVBoxLayout = new QVBoxLayoutType(c, "QVBoxLayout", t_QBoxLayout); qt->addSymbol(t_QVBoxLayout); - QToolButtonType* t_QToolButton = new QToolButtonType(c, "QToolButton", t_QAbstractButton); qt->addSymbol(t_QToolButton); - QLabelType* t_QLabel = new QLabelType(c, "QLabel", t_QFrame); qt->addSymbol(t_QLabel); - QCheckBoxType* t_QCheckBox = new QCheckBoxType(c, "QCheckBox", t_QAbstractButton); qt->addSymbol(t_QCheckBox); - QFileDialogType* t_QFileDialog = new QFileDialogType(c, "QFileDialog", t_QDialog); qt->addSymbol(t_QFileDialog); + QQuickWidgetType* t_QQuickWidget = new QQuickWidgetType(c, "QQuickWidget", t_QWidget); qt->addSymbol(t_QQuickWidget); + QNetworkReplyType* t_QNetworkReply = new QNetworkReplyType(c, "QNetworkReply", t_QIODevice); qt->addSymbol(t_QNetworkReply); + QInputDialogType* t_QInputDialog = new QInputDialogType(c, "QInputDialog", t_QDialog); qt->addSymbol(t_QInputDialog); QTcpSocketType* t_QTcpSocket = new QTcpSocketType(c, "QTcpSocket", t_QAbstractSocket); qt->addSymbol(t_QTcpSocket); - QDialType* t_QDial = new QDialType(c, "QDial", t_QAbstractSlider); qt->addSymbol(t_QDial); QDragEnterEventType* t_QDragEnterEvent = new QDragEnterEventType(c, "QDragEnterEvent", t_QDragMoveEvent); qt->addSymbol(t_QDragEnterEvent); - QSinglePointEventType* t_QSinglePointEvent = new QSinglePointEventType(c, "QSinglePointEvent", t_QPointerEvent); qt->addSymbol(t_QSinglePointEvent); + QPushButtonType* t_QPushButton = new QPushButtonType(c, "QPushButton", t_QAbstractButton); qt->addSymbol(t_QPushButton); + QSliderType* t_QSlider = new QSliderType(c, "QSlider", t_QAbstractSlider); qt->addSymbol(t_QSlider); QStackedWidgetType* t_QStackedWidget = new QStackedWidgetType(c, "QStackedWidget", t_QFrame); qt->addSymbol(t_QStackedWidget); - QUdpSocketType* t_QUdpSocket = new QUdpSocketType(c, "QUdpSocket", t_QAbstractSocket); qt->addSymbol(t_QUdpSocket); - QToolBoxType* t_QToolBox = new QToolBoxType(c, "QToolBox", t_QFrame); qt->addSymbol(t_QToolBox); QQmlApplicationEngineType* t_QQmlApplicationEngine = new QQmlApplicationEngineType(c, "QQmlApplicationEngine", t_QQmlEngine); qt->addSymbol(t_QQmlApplicationEngine); QColorDialogType* t_QColorDialog = new QColorDialogType(c, "QColorDialog", t_QDialog); qt->addSymbol(t_QColorDialog); - QRadioButtonType* t_QRadioButton = new QRadioButtonType(c, "QRadioButton", t_QAbstractButton); qt->addSymbol(t_QRadioButton); - QSpinBoxType* t_QSpinBox = new QSpinBoxType(c, "QSpinBox", t_QAbstractSpinBox); qt->addSymbol(t_QSpinBox); - QInputDialogType* t_QInputDialog = new QInputDialogType(c, "QInputDialog", t_QDialog); qt->addSymbol(t_QInputDialog); - QSliderType* t_QSlider = new QSliderType(c, "QSlider", t_QAbstractSlider); qt->addSymbol(t_QSlider); - QFileType* t_QFile = new QFileType(c, "QFile", t_QFileDevice); qt->addSymbol(t_QFile); - QApplicationType* t_QApplication = new QApplicationType(c, "QApplication", t_QGuiApplication); qt->addSymbol(t_QApplication); - QPushButtonType* t_QPushButton = new QPushButtonType(c, "QPushButton", t_QAbstractButton); qt->addSymbol(t_QPushButton); - QSplitterType* t_QSplitter = new QSplitterType(c, "QSplitter", t_QFrame); qt->addSymbol(t_QSplitter); QAbstractScrollAreaType* t_QAbstractScrollArea = new QAbstractScrollAreaType(c, "QAbstractScrollArea", t_QFrame); qt->addSymbol(t_QAbstractScrollArea); + QUdpSocketType* t_QUdpSocket = new QUdpSocketType(c, "QUdpSocket", t_QAbstractSocket); qt->addSymbol(t_QUdpSocket); + QDialType* t_QDial = new QDialType(c, "QDial", t_QAbstractSlider); qt->addSymbol(t_QDial); + QLabelType* t_QLabel = new QLabelType(c, "QLabel", t_QFrame); qt->addSymbol(t_QLabel); QHBoxLayoutType* t_QHBoxLayout = new QHBoxLayoutType(c, "QHBoxLayout", t_QBoxLayout); qt->addSymbol(t_QHBoxLayout); - QScrollAreaType* t_QScrollArea = new QScrollAreaType(c, "QScrollArea", t_QAbstractScrollArea); qt->addSymbol(t_QScrollArea); - QMouseEventType* t_QMouseEvent = new QMouseEventType(c, "QMouseEvent", t_QSinglePointEvent); qt->addSymbol(t_QMouseEvent); + QApplicationType* t_QApplication = new QApplicationType(c, "QApplication", t_QGuiApplication); qt->addSymbol(t_QApplication); + QVBoxLayoutType* t_QVBoxLayout = new QVBoxLayoutType(c, "QVBoxLayout", t_QBoxLayout); qt->addSymbol(t_QVBoxLayout); + QToolBoxType* t_QToolBox = new QToolBoxType(c, "QToolBox", t_QFrame); qt->addSymbol(t_QToolBox); + QRadioButtonType* t_QRadioButton = new QRadioButtonType(c, "QRadioButton", t_QAbstractButton); qt->addSymbol(t_QRadioButton); + QSplitterType* t_QSplitter = new QSplitterType(c, "QSplitter", t_QFrame); qt->addSymbol(t_QSplitter); + QFileDialogType* t_QFileDialog = new QFileDialogType(c, "QFileDialog", t_QDialog); qt->addSymbol(t_QFileDialog); + QCheckBoxType* t_QCheckBox = new QCheckBoxType(c, "QCheckBox", t_QAbstractButton); qt->addSymbol(t_QCheckBox); + QSinglePointEventType* t_QSinglePointEvent = new QSinglePointEventType(c, "QSinglePointEvent", t_QPointerEvent); qt->addSymbol(t_QSinglePointEvent); + QToolButtonType* t_QToolButton = new QToolButtonType(c, "QToolButton", t_QAbstractButton); qt->addSymbol(t_QToolButton); + QFileType* t_QFile = new QFileType(c, "QFile", t_QFileDevice); qt->addSymbol(t_QFile); + QSpinBoxType* t_QSpinBox = new QSpinBoxType(c, "QSpinBox", t_QAbstractSpinBox); qt->addSymbol(t_QSpinBox); + QWheelEventType* t_QWheelEvent = new QWheelEventType(c, "QWheelEvent", t_QSinglePointEvent); qt->addSymbol(t_QWheelEvent); + QTabletEventType* t_QTabletEvent = new QTabletEventType(c, "QTabletEvent", t_QSinglePointEvent); qt->addSymbol(t_QTabletEvent); + QTextEditType* t_QTextEdit = new QTextEditType(c, "QTextEdit", t_QAbstractScrollArea); qt->addSymbol(t_QTextEdit); QAbstractItemViewType* t_QAbstractItemView = new QAbstractItemViewType(c, "QAbstractItemView", t_QAbstractScrollArea); qt->addSymbol(t_QAbstractItemView); QPlainTextEditType* t_QPlainTextEdit = new QPlainTextEditType(c, "QPlainTextEdit", t_QAbstractScrollArea); qt->addSymbol(t_QPlainTextEdit); QHoverEventType* t_QHoverEvent = new QHoverEventType(c, "QHoverEvent", t_QSinglePointEvent); qt->addSymbol(t_QHoverEvent); - QTextEditType* t_QTextEdit = new QTextEditType(c, "QTextEdit", t_QAbstractScrollArea); qt->addSymbol(t_QTextEdit); - QTabletEventType* t_QTabletEvent = new QTabletEventType(c, "QTabletEvent", t_QSinglePointEvent); qt->addSymbol(t_QTabletEvent); - QWheelEventType* t_QWheelEvent = new QWheelEventType(c, "QWheelEvent", t_QSinglePointEvent); qt->addSymbol(t_QWheelEvent); - QTableViewType* t_QTableView = new QTableViewType(c, "QTableView", t_QAbstractItemView); qt->addSymbol(t_QTableView); - QHeaderViewType* t_QHeaderView = new QHeaderViewType(c, "QHeaderView", t_QAbstractItemView); qt->addSymbol(t_QHeaderView); - QColumnViewType* t_QColumnView = new QColumnViewType(c, "QColumnView", t_QAbstractItemView); qt->addSymbol(t_QColumnView); - QTreeViewType* t_QTreeView = new QTreeViewType(c, "QTreeView", t_QAbstractItemView); qt->addSymbol(t_QTreeView); + QScrollAreaType* t_QScrollArea = new QScrollAreaType(c, "QScrollArea", t_QAbstractScrollArea); qt->addSymbol(t_QScrollArea); + QMouseEventType* t_QMouseEvent = new QMouseEventType(c, "QMouseEvent", t_QSinglePointEvent); qt->addSymbol(t_QMouseEvent); QTextBrowserType* t_QTextBrowser = new QTextBrowserType(c, "QTextBrowser", t_QTextEdit); qt->addSymbol(t_QTextBrowser); + QTreeViewType* t_QTreeView = new QTreeViewType(c, "QTreeView", t_QAbstractItemView); qt->addSymbol(t_QTreeView); QListViewType* t_QListView = new QListViewType(c, "QListView", t_QAbstractItemView); qt->addSymbol(t_QListView); + QHeaderViewType* t_QHeaderView = new QHeaderViewType(c, "QHeaderView", t_QAbstractItemView); qt->addSymbol(t_QHeaderView); + QColumnViewType* t_QColumnView = new QColumnViewType(c, "QColumnView", t_QAbstractItemView); qt->addSymbol(t_QColumnView); + QTableViewType* t_QTableView = new QTableViewType(c, "QTableView", t_QAbstractItemView); qt->addSymbol(t_QTableView); + QListWidgetType* t_QListWidget = new QListWidgetType(c, "QListWidget", t_QListView); qt->addSymbol(t_QListWidget); QTableWidgetType* t_QTableWidget = new QTableWidgetType(c, "QTableWidget", t_QTableView); qt->addSymbol(t_QTableWidget); QTreeWidgetType* t_QTreeWidget = new QTreeWidgetType(c, "QTreeWidget", t_QTreeView); qt->addSymbol(t_QTreeWidget); - QListWidgetType* t_QListWidget = new QListWidgetType(c, "QListWidget", t_QListView); qt->addSymbol(t_QListWidget); return t_QWidget; }