diff --git a/.gitignore b/.gitignore index 8b8a6e96..737b6f29 100644 --- a/.gitignore +++ b/.gitignore @@ -25,7 +25,7 @@ __pycache__ /scripts /build /dist -/*.sh +/dl # tests /.tests diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 35b513b0..00000000 --- a/Dockerfile +++ /dev/null @@ -1,39 +0,0 @@ -ARG MR_VERSION -ARG CUDA_VERSION=9.0 -ARG OS_VERSION=7 -FROM alicevision/meshroom-deps:${MR_VERSION}-centos${OS_VERSION}-cuda${CUDA_VERSION} -LABEL maintainer="AliceVision Team alicevision-team@googlegroups.com" - -# Execute with nvidia docker (https://github.com/nvidia/nvidia-docker/wiki/Installation-(version-2.0)) -# docker run -it --runtime=nvidia meshroom - -ENV MESHROOM_DEV=/opt/Meshroom \ - MESHROOM_BUILD=/tmp/Meshroom_build \ - MESHROOM_BUNDLE=/opt/Meshroom_bundle \ - QT_DIR=/opt/Qt5.14.1/5.14.1/gcc_64 \ - PATH="${PATH}:${MESHROOM_BUNDLE}" - -COPY . "${MESHROOM_DEV}" - -WORKDIR ${MESHROOM_DEV} - -RUN source scl_source enable rh-python36 && python setup.py install_exe -d "${MESHROOM_BUNDLE}" && \ - find ${MESHROOM_BUNDLE} -name "*Qt5Web*" -delete && \ - find ${MESHROOM_BUNDLE} -name "*Qt5Designer*" -delete && \ - rm -rf ${MESHROOM_BUNDLE}/lib/PySide2/typesystems/ ${MESHROOM_BUNDLE}/lib/PySide2/examples/ ${MESHROOM_BUNDLE}/lib/PySide2/include/ ${MESHROOM_BUNDLE}/lib/PySide2/Qt/translations/ ${MESHROOM_BUNDLE}/lib/PySide2/Qt/resources/ && \ - rm ${MESHROOM_BUNDLE}/lib/PySide2/QtWeb* && \ - rm ${MESHROOM_BUNDLE}/lib/PySide2/pyside2-lupdate ${MESHROOM_BUNDLE}/lib/PySide2/rcc ${MESHROOM_BUNDLE}/lib/PySide2/designer - -WORKDIR ${MESHROOM_BUILD} - -# Build Meshroom plugins -RUN cmake "${MESHROOM_DEV}" -DALICEVISION_ROOT="${AV_INSTALL}" -DQT_DIR="${QT_DIR}" -DCMAKE_INSTALL_PREFIX="${MESHROOM_BUNDLE}/qtPlugins" -# RUN make -j8 qtOIIO -# RUN make -j8 qmlAlembic -# RUN make -j8 qtAliceVision -RUN make -j8 && cd /tmp && rm -rf ${MESHROOM_BUILD} - -RUN mv "${AV_BUNDLE}" "${MESHROOM_BUNDLE}/aliceVision" -RUN rm -rf ${MESHROOM_BUNDLE}/aliceVision/share/doc ${MESHROOM_BUNDLE}/aliceVision/share/eigen3 ${MESHROOM_BUNDLE}/aliceVision/share/fonts ${MESHROOM_BUNDLE}/aliceVision/share/lemon ${MESHROOM_BUNDLE}/aliceVision/share/libraw ${MESHROOM_BUNDLE}/aliceVision/share/man/ aliceVision/share/pkgconfig - - diff --git a/docker/Dockerfile_centos b/docker/Dockerfile_centos new file mode 100644 index 00000000..a2c833c0 --- /dev/null +++ b/docker/Dockerfile_centos @@ -0,0 +1,72 @@ +ARG MESHROOM_VERSION +ARG AV_VERSION +ARG CUDA_VERSION +ARG CENTOS_VERSION +FROM alicevision/meshroom-deps:${MESHROOM_VERSION}-av${AV_VERSION}-centos${CENTOS_VERSION}-cuda${CUDA_VERSION} +LABEL maintainer="AliceVision Team alicevision-team@googlegroups.com" + +# Execute with nvidia docker (https://github.com/nvidia/nvidia-docker/wiki/Installation-(version-2.0)) +# docker run -it --runtime nvidia -p 2222:22 --name meshroom -v:/data alicevision/meshroom:develop-av2.2.8.develop-ubuntu20.04-cuda11.0 +# ssh -p 2222 -X root@ /opt/Meshroom_bundle/Meshroom # Password is 'meshroom' + +ENV MESHROOM_DEV=/opt/Meshroom \ + MESHROOM_BUILD=/tmp/Meshroom_build \ + MESHROOM_BUNDLE=/opt/Meshroom_bundle \ + AV_INSTALL=/opt/AliceVision_install \ + QT_DIR=/opt/Qt5.14.1/5.14.1/gcc_64 \ + PATH="${PATH}:${MESHROOM_BUNDLE}" \ + OPENIMAGEIO_LIBRARY=/opt/AliceVision_install/lib + +COPY *.txt *.md *.py ${MESHROOM_DEV}/ +COPY ./docs ${MESHROOM_DEV}/docs +COPY ./meshroom ${MESHROOM_DEV}/meshroom +COPY ./tests ${MESHROOM_DEV}/tests +COPY ./bin ${MESHROOM_DEV}/bin + +WORKDIR ${MESHROOM_DEV} + +RUN source scl_source enable rh-python36 && python setup.py install_exe -d "${MESHROOM_BUNDLE}" && \ + find ${MESHROOM_BUNDLE} -name "*Qt5Web*" -delete && \ + find ${MESHROOM_BUNDLE} -name "*Qt5Designer*" -delete && \ + rm -rf ${MESHROOM_BUNDLE}/lib/PySide2/typesystems/ \ + ${MESHROOM_BUNDLE}/lib/PySide2/examples/ \ + ${MESHROOM_BUNDLE}/lib/PySide2/include/ \ + ${MESHROOM_BUNDLE}/lib/PySide2/Qt/translations/ \ + ${MESHROOM_BUNDLE}/lib/PySide2/Qt/resources/ \ + ${MESHROOM_BUNDLE}/lib/PySide2/QtWeb* \ + ${MESHROOM_BUNDLE}/lib/PySide2/pyside2-lupdate \ + ${MESHROOM_BUNDLE}/lib/PySide2/rcc \ + ${MESHROOM_BUNDLE}/lib/PySide2/designer + +WORKDIR ${MESHROOM_BUILD} + +# Build Meshroom plugins +RUN cmake "${MESHROOM_DEV}" -DALICEVISION_ROOT="${AV_INSTALL}" -DCMAKE_INSTALL_PREFIX="${MESHROOM_BUNDLE}/qtPlugins" +RUN make "-j$(nproc)" qtOIIO + +RUN make "-j$(nproc)" qmlAlembic +RUN make "-j$(nproc)" qtAliceVision +RUN make "-j$(nproc)" && \ + rm -rf "${MESHROOM_BUILD}" "${MESHROOM_DEV}" \ + ${MESHROOM_BUNDLE}/aliceVision/share/doc \ + ${MESHROOM_BUNDLE}/aliceVision/share/eigen3 \ + ${MESHROOM_BUNDLE}/aliceVision/share/fonts \ + ${MESHROOM_BUNDLE}/aliceVision/share/lemon \ + ${MESHROOM_BUNDLE}/aliceVision/share/libraw \ + ${MESHROOM_BUNDLE}/aliceVision/share/man/ \ + aliceVision/share/pkgconfig + +# Enable SSH X11 forwarding, needed when the Docker image +# is run on a remote machine +RUN yum -y install openssh-server xauth mesa-dri-drivers && \ + systemctl enable sshd && \ + mkdir -p /run/sshd + +RUN sed -i "s/^.*X11Forwarding.*$/X11Forwarding yes/; s/^.*X11UseLocalhost.*$/X11UseLocalhost no/; s/^.*PermitRootLogin prohibit-password/PermitRootLogin yes/; s/^.*X11UseLocalhost.*/X11UseLocalhost no/;" /etc/ssh/sshd_config +RUN echo "root:meshroom" | chpasswd + +WORKDIR /root + +EXPOSE 22 +CMD bash -c "test -s /etc/machine-id || systemd-machine-id-setup; sshd-keygen; /usr/sbin/sshd -D" + diff --git a/Dockerfile_deps b/docker/Dockerfile_centos_deps similarity index 58% rename from Dockerfile_deps rename to docker/Dockerfile_centos_deps index 6ac72326..a643e9ae 100644 --- a/Dockerfile_deps +++ b/docker/Dockerfile_centos_deps @@ -1,7 +1,7 @@ ARG AV_VERSION -ARG CUDA_VERSION=9.0 -ARG OS_VERSION=7 -FROM alicevision/alicevision:${AV_VERSION}-centos${OS_VERSION}-cuda${CUDA_VERSION} +ARG CUDA_VERSION +ARG CENTOS_VERSION=7 +FROM alicevision/alicevision:${AV_VERSION}-centos${CENTOS_VERSION}-cuda${CUDA_VERSION} LABEL maintainer="AliceVision Team alicevision-team@googlegroups.com" # Execute with nvidia docker (https://github.com/nvidia/nvidia-docker/wiki/Installation-(version-2.0)) @@ -13,9 +13,6 @@ ENV MESHROOM_DEV=/opt/Meshroom \ QT_CI_LOGIN=alicevisionjunk@gmail.com \ QT_CI_PASSWORD=azerty1. -# Workaround for qmlAlembic/qtAliceVision builds: fuse lib/lib64 folders -RUN cp -rf ${AV_INSTALL}/lib/* ${AV_INSTALL}/lib64 && rm -rf ${AV_INSTALL}/lib && ln -s ${AV_INSTALL}/lib64 ${AV_INSTALL}/lib - # Install libs needed by Qt RUN yum install -y \ flex \ @@ -41,22 +38,17 @@ RUN yum install -y \ # Install Python3 RUN yum install -y centos-release-scl && yum install -y rh-python36 && source scl_source enable rh-python36 && pip install --upgrade pip - -COPY ./*requirements.txt ./setup.py "${MESHROOM_DEV}/" +COPY ./*requirements.txt ./setup.py ${MESHROOM_DEV}/ # Install Meshroom requirements and freeze bundle WORKDIR "${MESHROOM_DEV}" RUN source scl_source enable rh-python36 && pip install -r dev_requirements.txt -r requirements.txt -COPY ./docker/qt-installer-noninteractive.qs "${MESHROOM_DEV}/docker/" - # Install Qt (to build plugins) -ENV QT_VERSION_A=5.14 \ - QT_VERSION_B=5.14.1 WORKDIR /tmp/qt -RUN wget https://download.qt.io/archive/qt/${QT_VERSION_A}/${QT_VERSION_B}/qt-opensource-linux-x64-${QT_VERSION_B}.run && \ - chmod +x qt-opensource-linux-x64-${QT_VERSION_B}.run && \ - ./qt-opensource-linux-x64-${QT_VERSION_B}.run --verbose --platform minimal --script "${MESHROOM_DEV}/docker/qt-installer-noninteractive.qs" && \ - rm qt-opensource-linux-x64-${QT_VERSION_B}.run - +COPY dl/qt.run /tmp/qt +COPY ./docker/qt-installer-noninteractive.qs ${MESHROOM_DEV}/docker/ +RUN chmod +x qt.run && \ + ./qt.run --verbose --platform minimal --script "${MESHROOM_DEV}/docker/qt-installer-noninteractive.qs" && \ + rm qt.run diff --git a/docker/Dockerfile_ubuntu b/docker/Dockerfile_ubuntu new file mode 100644 index 00000000..3312c5df --- /dev/null +++ b/docker/Dockerfile_ubuntu @@ -0,0 +1,71 @@ +ARG MESHROOM_VERSION +ARG AV_VERSION +ARG CUDA_VERSION +ARG UBUNTU_VERSION +FROM alicevision/meshroom-deps:${MESHROOM_VERSION}-av${AV_VERSION}-ubuntu${UBUNTU_VERSION}-cuda${CUDA_VERSION} +LABEL maintainer="AliceVision Team alicevision-team@googlegroups.com" + +# Execute with nvidia docker (https://github.com/nvidia/nvidia-docker/wiki/Installation-(version-2.0)) +# docker run -it --runtime nvidia -p 2222:22 --name meshroom -v:/data alicevision/meshroom:develop-av2.2.8.develop-ubuntu20.04-cuda11.0 +# ssh -p 2222 -X root@ /opt/Meshroom_bundle/Meshroom # Password is 'meshroom' + +ENV MESHROOM_DEV=/opt/Meshroom \ + MESHROOM_BUILD=/tmp/Meshroom_build \ + MESHROOM_BUNDLE=/opt/Meshroom_bundle \ + AV_INSTALL=/opt/AliceVision_install \ + QT_DIR=/opt/Qt5.14.1/5.14.1/gcc_64 \ + PATH="${PATH}:${MESHROOM_BUNDLE}" \ + OPENIMAGEIO_LIBRARY=/opt/AliceVision_install/lib + +COPY *.txt *.md *.py ${MESHROOM_DEV}/ +COPY ./docs ${MESHROOM_DEV}/docs +COPY ./meshroom ${MESHROOM_DEV}/meshroom +COPY ./tests ${MESHROOM_DEV}/tests +COPY ./bin ${MESHROOM_DEV}/bin + +WORKDIR ${MESHROOM_DEV} + +RUN python3 setup.py install_exe -d "${MESHROOM_BUNDLE}" && \ + find ${MESHROOM_BUNDLE} -name "*Qt5Web*" -delete && \ + find ${MESHROOM_BUNDLE} -name "*Qt5Designer*" -delete && \ + rm -rf ${MESHROOM_BUNDLE}/lib/PySide2/typesystems/ \ + ${MESHROOM_BUNDLE}/lib/PySide2/examples/ \ + ${MESHROOM_BUNDLE}/lib/PySide2/include/ \ + ${MESHROOM_BUNDLE}/lib/PySide2/Qt/translations/ \ + ${MESHROOM_BUNDLE}/lib/PySide2/Qt/resources/ \ + ${MESHROOM_BUNDLE}/lib/PySide2/QtWeb* \ + ${MESHROOM_BUNDLE}/lib/PySide2/pyside2-lupdate \ + ${MESHROOM_BUNDLE}/lib/PySide2/rcc \ + ${MESHROOM_BUNDLE}/lib/PySide2/designer + +WORKDIR ${MESHROOM_BUILD} + +# Build Meshroom plugins +RUN cmake "${MESHROOM_DEV}" -DALICEVISION_ROOT="${AV_INSTALL}" -DCMAKE_INSTALL_PREFIX="${MESHROOM_BUNDLE}/qtPlugins" +RUN make "-j$(nproc)" qtOIIO +RUN make "-j$(nproc)" qmlAlembic +RUN make "-j$(nproc)" qtAliceVision +RUN make "-j$(nproc)" && \ + rm -rf "${MESHROOM_BUILD}" "${MESHROOM_DEV}" \ + ${MESHROOM_BUNDLE}/aliceVision/share/doc \ + ${MESHROOM_BUNDLE}/aliceVision/share/eigen3 \ + ${MESHROOM_BUNDLE}/aliceVision/share/fonts \ + ${MESHROOM_BUNDLE}/aliceVision/share/lemon \ + ${MESHROOM_BUNDLE}/aliceVision/share/libraw \ + ${MESHROOM_BUNDLE}/aliceVision/share/man/ \ + aliceVision/share/pkgconfig + +# Enable SSH X11 forwarding, needed when the Docker image +# is run on a remote machine +RUN apt install ssh xauth && \ + systemctl enable ssh && \ + mkdir -p /run/sshd + +RUN sed -i "s/^.*X11Forwarding.*$/X11Forwarding yes/; s/^.*X11UseLocalhost.*$/X11UseLocalhost no/; s/^.*PermitRootLogin prohibit-password/PermitRootLogin yes/; s/^.*X11UseLocalhost.*/X11UseLocalhost no/;" /etc/ssh/sshd_config +RUN echo "root:meshroom" | chpasswd + +WORKDIR /root + +EXPOSE 22 +CMD ["/usr/sbin/sshd", "-D"] + diff --git a/docker/Dockerfile_ubuntu_deps b/docker/Dockerfile_ubuntu_deps new file mode 100644 index 00000000..7c775f7c --- /dev/null +++ b/docker/Dockerfile_ubuntu_deps @@ -0,0 +1,75 @@ +ARG AV_VERSION +ARG CUDA_VERSION +ARG UBUNTU_VERSION +FROM alicevision/alicevision:${AV_VERSION}-ubuntu${UBUNTU_VERSION}-cuda${CUDA_VERSION} +LABEL maintainer="AliceVision Team alicevision-team@googlegroups.com" + +# Execute with nvidia docker (https://github.com/nvidia/nvidia-docker/wiki/Installation-(version-2.0)) +# docker run -it --runtime=nvidia meshroom + +ENV MESHROOM_DEV=/opt/Meshroom \ + MESHROOM_BUILD=/tmp/Meshroom_build \ + QT_DIR=/opt/Qt5.14.1/5.14.1/gcc_64 \ + QT_CI_LOGIN=alicevisionjunk@gmail.com \ + QT_CI_PASSWORD=azerty1. + +# Workaround for qmlAlembic/qtAliceVision builds: fuse lib/lib64 folders +#RUN ln -s ${AV_INSTALL}/lib ${AV_INSTALL}/lib64 + +# Install libs needed by Qt +RUN apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends \ + flex \ + fontconfig \ + libfreetype6 \ + libglib2.0-0 \ + libice6 \ + libx11-6 \ + libxcb1 \ + libxext6 \ + libxi6 \ + libxrender1 \ + libsm6 \ + libxt-dev \ + libglu-dev \ + libosmesa-dev \ + libgl-dev \ + libglu-dev \ + libqt5charts5-dev \ + libxcb-keysyms1 \ + libxcb-image0 \ + libxkbcommon-x11-0 \ + libz-dev \ + systemd \ + ssh + +# Disabled as QTOIIO requires ah least 5.13 (5.12 available in Ubuntu 20.04) +# qtdeclarative5-dev \ +# qt3d-assimpsceneimport-plugin \ +# qt3d-defaultgeometryloader-plugin \ +# qt3d-gltfsceneio-plugin \ +# qt3d-scene2d-plugin \ +# qt53dextras5 \ +# qt3d5-dev + + +RUN apt-get install -y --no-install-recommends \ + software-properties-common + +# Install Python3 +RUN apt install python3-pip -y && pip3 install --upgrade pip + +# Install Qt (to build plugins) +WORKDIR /tmp/qt +COPY dl/qt.run /tmp/qt +COPY ./docker/qt-installer-noninteractive.qs ${MESHROOM_DEV}/docker/ +RUN chmod +x qt.run && \ + ./qt.run --verbose --platform minimal --script "${MESHROOM_DEV}/docker/qt-installer-noninteractive.qs" && \ + rm qt.run + +COPY ./*requirements.txt ./setup.py ${MESHROOM_DEV}/ + +# Install Meshroom requirements and freeze bundle +WORKDIR "${MESHROOM_DEV}" +RUN pip install -r dev_requirements.txt -r requirements.txt + diff --git a/docker/build-all.sh b/docker/build-all.sh new file mode 100755 index 00000000..006a6146 --- /dev/null +++ b/docker/build-all.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +set -e + +test -d docker || ( + echo This script must be run from the top level Meshroom directory + exit 1 +) + +CUDA_VERSION=11.0 UBUNTU_VERSION=20.04 docker/build-ubuntu.sh +CUDA_VERSION=11.0 UBUNTU_VERSION=18.04 docker/build-ubuntu.sh +CUDA_VERSION=10.2 UBUNTU_VERSION=18.04 docker/build-ubuntu.sh +CUDA_VERSION=9.2 UBUNTU_VERSION=18.04 docker/build-ubuntu.sh + +CUDA_VERSION=10.2 CENTOS_VERSION=7 docker/build-centos.sh +CUDA_VERSION=9.2 CENTOS_VERSION=7 docker/build-centos.sh diff --git a/docker/build-centos.sh b/docker/build-centos.sh new file mode 100755 index 00000000..dbe1d505 --- /dev/null +++ b/docker/build-centos.sh @@ -0,0 +1,37 @@ +#!/bin/bash +set -e + +test -z "$MESHROOM_VERSION" && MESHROOM_VERSION="$(git rev-parse --abbrev-ref HEAD)-$(git rev-parse --short HEAD)" +test -z "$AV_VERSION" && echo "AliceVision version not specified, set AV_VERSION in the environment" && exit 1 +test -z "$CUDA_VERSION" && CUDA_VERSION="10.2" +test -z "$CENTOS_VERSION" && CENTOS_VERSION=7 + +test -d docker || ( + echo This script must be run from the top level Meshroom directory + exit 1 +) + +test -d dl || \ + mkdir dl +test -f dl/qt.run || \ + wget "https://download.qt.io/archive/qt/5.14/5.14.1/qt-opensource-linux-x64-5.14.1.run" -O "dl/qt.run" + +# DEPENDENCIES +docker build \ + --rm \ + --build-arg "CUDA_VERSION=${CUDA_VERSION}" \ + --build-arg "CENTOS_VERSION=${CENTOS_VERSION}" \ + --build-arg "AV_VERSION=${AV_VERSION}" \ + --tag "alicevision/meshroom-deps:${MESHROOM_VERSION}-av${AV_VERSION}-centos${CENTOS_VERSION}-cuda${CUDA_VERSION}" \ + -f docker/Dockerfile_centos_deps . + +# Meshroom +docker build \ + --rm \ + --build-arg "MESHROOM_VERSION=${MESHROOM_VERSION}" \ + --build-arg "CUDA_VERSION=${CUDA_VERSION}" \ + --build-arg "CENTOS_VERSION=${CENTOS_VERSION}" \ + --build-arg "AV_VERSION=${AV_VERSION}" \ + --tag "alicevision/meshroom:${MESHROOM_VERSION}-av${AV_VERSION}-centos${CENTOS_VERSION}-cuda${CUDA_VERSION}" \ + -f docker/Dockerfile_centos . + diff --git a/docker/build-ubuntu.sh b/docker/build-ubuntu.sh new file mode 100755 index 00000000..909b3ec0 --- /dev/null +++ b/docker/build-ubuntu.sh @@ -0,0 +1,37 @@ +#!/bin/bash +set -e + +test -z "$MESHROOM_VERSION" && MESHROOM_VERSION="$(git rev-parse --abbrev-ref HEAD)-$(git rev-parse --short HEAD)" +test -z "$AV_VERSION" && echo "AliceVision version not specified, set AV_VERSION in the environment" && exit 1 +test -z "$CUDA_VERSION" && CUDA_VERSION=11.0 +test -z "$UBUNTU_VERSION" && UBUNTU_VERSION=20.04 + +test -d docker || ( + echo This script must be run from the top level Meshroom directory + exit 1 +) + +test -d dl || \ + mkdir dl +test -f dl/qt.run || \ + "wget https://download.qt.io/archive/qt/5.14/5.14.1/qt-opensource-linux-x64-5.14.1.run" -O "dl/qt.run" + +# DEPENDENCIES +docker build \ + --rm \ + --build-arg "CUDA_VERSION=${CUDA_VERSION}" \ + --build-arg "UBUNTU_VERSION=${UBUNTU_VERSION}" \ + --build-arg "AV_VERSION=${AV_VERSION}" \ + --tag "alicevision/meshroom-deps:${MESHROOM_VERSION}-av${AV_VERSION}-ubuntu${UBUNTU_VERSION}-cuda${CUDA_VERSION}" \ + -f docker/Dockerfile_ubuntu_deps . + +# Meshroom +docker build \ + --rm \ + --build-arg "MESHROOM_VERSION=${MESHROOM_VERSION}" \ + --build-arg "CUDA_VERSION=${CUDA_VERSION}" \ + --build-arg "UBUNTU_VERSION=${UBUNTU_VERSION}" \ + --build-arg "AV_VERSION=${AV_VERSION}" \ + --tag "alicevision/meshroom:${MESHROOM_VERSION}-av${AV_VERSION}-ubuntu${UBUNTU_VERSION}-cuda${CUDA_VERSION}" \ + -f docker/Dockerfile_ubuntu . + diff --git a/docker/qt-installer-noninteractive.qs b/docker/qt-installer-noninteractive.qs index 65acefb2..504aaad9 100644 --- a/docker/qt-installer-noninteractive.qs +++ b/docker/qt-installer-noninteractive.qs @@ -28,6 +28,8 @@ Controller.prototype.ComponentSelectionPageCallback = function() { var widget = gui.currentPageWidget(); widget.deselectAll(); widget.selectComponent("qt.qt5.5141.gcc_64"); + widget.selectComponent("qt.qt5.5141.qtcharts"); + widget.selectComponent("qt.qt5.5141.qtcharts.gcc_64"); gui.clickButton(buttons.NextButton); } Controller.prototype.IntroductionPageCallback = function() {