miurahr / aqtinstall

aqt: Another (unofficial) Qt CLI Installer on multi-platforms
https://aqtinstall.readthedocs.io/en/latest/
MIT License
913 stars 84 forks source link

On Linux, wasm installs Windows or macOs packages #768

Closed bterrier closed 6 months ago

bterrier commented 6 months ago

Describe the bug On Ubuntu 22,04, when I try to install Qt 6.5 or 6.6 for wasm, Windows or macOs packages are downloaded depending if I select wasm_singlethread or wasm_multithread.

To Reproduce Steps to reproduce the behavior:

FROM ubuntu:22.04

RUN apt-get -y update && DEBIAN_FRONTEND=noninteractive apt-get -y install \
    python3 \
    python3-pip 

RUN pip3 install aqtinstall

ARG QT=6.6.2
ARG QT_MODULES="qt5compat qtshadertools"
ARG QT_HOST=linux
ARG QT_TARGET=desktop
ARG QT_ARCH=wasm_singlethread
RUN aqt install-qt -O /opt/qt ${QT_HOST} ${QT_TARGET} ${QT} gcc_64 -m ${QT_MODULES}
RUN aqt install-qt -O /opt/qt ${QT_HOST} ${QT_TARGET} ${QT} ${QT_ARCH} -m ${QT_MODULES}

Expected behavior Linux WASM packages are actually installed

aqt output


STEP 4/11: ARG QT=6.6.2
STEP 5/11: ARG QT_MODULES="qt5compat qtshadertools"
STEP 6/11: ARG QT_HOST=linux
STEP 7/11: ARG QT_TARGET=desktop
STEP 8/11: ARG QT_ARCH=wasm_singlethread
STEP 9/11: RUN aqt install-qt -O /opt/qt ${QT_HOST} ${QT_TARGET} ${QT} gcc_64 -m ${QT_MODULES}
INFO    : aqtinstall(aqt) v3.1.12 on Python 3.10.12 [CPython GCC 11.4.0]
[...]
STEP 10/11: RUN aqt install-qt -O /opt/qt ${QT_HOST} ${QT_TARGET} ${QT} ${QT_ARCH} -m ${QT_MODULES}
INFO    : aqtinstall(aqt) v3.1.12 on Python 3.10.12 [CPython GCC 11.4.0]
INFO    : Found installed linux-desktop Qt at /opt/qt/6.6.2/gcc_64
INFO    : Downloading qt5compat...
INFO    : Downloading qtshadertools...
INFO    : Downloading qtsvg...
INFO    : Downloading qtbase...
INFO    : Redirected: mirrors.20i.com
INFO    : Redirected: mirrors.20i.com
INFO    : Redirected: mirrors.20i.com
INFO    : Redirected: mirrors.20i.com
INFO    : Finished installation of qtsvg-Windows-Windows_10_22H2-Clang-Windows-WebAssembly-X86_64.7z in 0.81887676
INFO    : Finished installation of qt5compat-Windows-Windows_10_22H2-Clang-Windows-WebAssembly-X86_64.7z in 0.98377750
INFO    : Finished installation of qtshadertools-Windows-Windows_10_22H2-Clang-Windows-WebAssembly-X86_64.7z in 1.11044075
INFO    : Downloading qtdeclarative...
INFO    : Downloading qttools...
INFO    : Downloading qttranslations...
INFO    : Redirected: mirrors.20i.com
INFO    : Redirected: mirrors.20i.com
INFO    : Finished installation of qttools-Windows-Windows_10_22H2-Clang-Windows-WebAssembly-X86_64.7z in 1.23237809
INFO    : Redirected: mirrors.20i.com
INFO    : Finished installation of qttranslations-Windows-Windows_10_22H2-Clang-Windows-WebAssembly-X86_64.7z in 2.19468522
INFO    : Finished installation of qtbase-Windows-Windows_10_22H2-Clang-Windows-WebAssembly-X86_64.7z in 4.05688835
INFO    : Finished installation of qtdeclarative-Windows-Windows_10_22H2-Clang-Windows-WebAssembly-X86_64.7z in 3.49421900
INFO    : Patching /opt/qt/6.6.2/wasm_singlethread/bin/qmake
INFO    : Finished installation
INFO    : Time elapsed: 8.37731508 second```

**Desktop (please complete the following information):**
 - OS: Ubuntu
 - aqtinstall(aqt) v3.1.12 on Python 3.10.12 [CPython GCC 11.4.0]
bterrier commented 6 months ago

After looking into it it seems, it is how the Qt official installer handle things. Wasm on linux is using windows or macOs archives.

Since, the official installer works fine, but aqt produce a non viable install, I guess aqt install is missing some of the patching done in installscript.qs

bterrier commented 6 months ago

After further testing it seems that adt does a good enough job. But for some reason, the produced install requires the user to set QT_HOST_PREFIX for cmake to work properly, otherwise it tries to access paths under C:\ or run macdeployqt...

Qt Creator does not need to set QT_HOST_PREFIX in the initial cmake config

pzhlkj6612 commented 6 months ago

Hi.

But for some reason, the produced install requires the user to set QT_HOST_PREFIX for cmake to work properly, otherwise it tries to access paths under C:\ or run macdeployqt...

May I ask what QT_HOST_PREFIX did you set?

bterrier commented 6 months ago

I set it to th root folder of the gcc_64 install directory of Qt, so in my case: -DQT_HOST_PATH=/opt/qt/6.6.2/gcc_64

For reference here is the full working dockerfile (it assumes your project is under /home/qt/sources/):


FROM ubuntu:22.04

RUN apt-get -y update && apt-get -q -y upgrade && DEBIAN_FRONTEND=noninteractive apt-get -y install \
    git \
    cmake \
    python3 \
    python3-pip \
    build-essential \
    libdbus-1-3 \
    libpulse-mainloop-glib0

RUN cd /opt && \
    git clone https://github.com/emscripten-core/emsdk.git && \
    cd emsdk && \
    ./emsdk install 3.1.37 && \
    ./emsdk activate 3.1.37
ENV PATH="${PATH}:/opt/emsdk:/opt/emsdk/upstream/emscripten"

RUN pip3 install aqtinstall

ARG QT=6.6.2
ARG QT_MODULES="qt5compat qtshadertools"
ARG QT_HOST=linux
ARG QT_TARGET=desktop
ARG QT_ARCH=wasm_multithread
ARG QT_DIR=/opt/qt
ARG QT_INSTALL_PREFIX=${QT_DIR}/${QT}/${QT_ARCH}
RUN aqt install-qt -O ${QT_DIR} ${QT_HOST} ${QT_TARGET} ${QT} gcc_64 -m ${QT_MODULES}
RUN aqt install-qt -O ${QT_DIR} ${QT_HOST} ${QT_TARGET} ${QT} ${QT_ARCH} -m ${QT_MODULES}
ENV EMSDK=/opt/emsdk
RUN apt-get install -q -y ninja-build
RUN  mkdir -p  /home/qt/sources/build && cd /home/qt/sources/build && \
    cmake .. \
    -DCMAKE_BUILD_TYPE=Release \
    -GNinja \
    -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_INSTALL_PREFIX}/bin/qmake \
    -DCMAKE_PREFIX_PATH:PATH=${QT_INSTALL_PREFIX} \
    -DCMAKE_C_COMPILER:FILEPATH=/opt/emsdk/upstream/emscripten/em \
    -DCMAKE_CXX_COMPILER:FILEPATH=/opt/emsdk/upstream/emscripten/em++ \
    -DCMAKE_TOOLCHAIN_FILE:FILEPATH=${QT_INSTALL_PREFIX}/lib/cmake/Qt6/qt.toolchain.cmake -DQT_HOST_PATH=${QT_DIR}/${QT}/gcc_64 \
    && cmake --build .  ```