1
+ FROM ubuntu:bionic as base
2
+
3
+ LABEL maintainer=
"[email protected] "
4
+ LABEL stage=qt-build-base
5
+
6
+ # UID/GID injection on build if wanted
7
+ ARG USER_UID=
8
+ ARG USER_GID=
9
+
10
+ # Name of the regular user. Does not look useful but can save a bit time when changing
11
+ ENV QT_USERNAME=qt
12
+
13
+ # QT Version
14
+ ENV QT_VERSION_MAJOR=5
15
+ ENV QT_VERSION_MINOR=11
16
+ ENV QT_VERSION_PATCH=3
17
+ ENV QT_BUILD_ROOT=/tmp/qt_build
18
+ ENV QT_BUILD_DIR=${QT_BUILD_ROOT}/qt-everywhere-src-${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}.${QT_VERSION_PATCH}/build
19
+ ENV QT_PREFIX=/usr/local
20
+
21
+ # Install all build dependencies
22
+ RUN apt-get update && apt-get dist-upgrade && apt-get -y --no-install-recommends install \
23
+ ca-certificates \
24
+ curl \
25
+ python \
26
+ gperf \
27
+ bison \
28
+ flex \
29
+ build-essential \
30
+ pkg-config \
31
+ libgl1-mesa-dev \
32
+ # bash needed for argument substitution in entrypoint
33
+ bash \
34
+ && apt-get -qq clean \
35
+ && rm -rf /var/lib/apt/lists/* \
36
+ && echo -e "#!/bin/sh\n ls -lah" > /usr/local/bin/ll && chmod +x /usr/local/bin/ll
37
+
38
+ # Adding regular user
39
+ RUN if [ ${USER_GID} ]; then \
40
+ addgroup -g ${USER_GID} ${QT_USERNAME}; \
41
+ else \
42
+ addgroup ${QT_USERNAME}; \
43
+ fi \
44
+ && if [ ${USER_UID} ]; then \
45
+ useradd -u ${USER_UID} -g ${QT_USERNAME} ${QT_USERNAME}; \
46
+ else \
47
+ useradd -g ${QT_USERNAME} ${QT_USERNAME}; \
48
+ fi
49
+
50
+ # build stage
51
+ FROM base as builder
52
+
53
+ LABEL stage=qt-build-builder
54
+
55
+ # Installing from here
56
+ WORKDIR ${QT_BUILD_ROOT}
57
+
58
+ # Download sources
59
+ RUN curl -sSL https://download.qt.io/official_releases/qt/${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}/${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}.${QT_VERSION_PATCH}/single/qt-everywhere-src-${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}.${QT_VERSION_PATCH}.tar.xz | tar xJ
60
+
61
+ WORKDIR ${QT_BUILD_DIR}
62
+
63
+ # Configure, make, install
64
+ RUN ../configure -prefix ${QT_PREFIX} -opensource -confirm-license -nomake examples -nomake tests -no-feature-geoservices_mapboxgl
65
+
66
+ # Possibility to make outputs less verbose when required for a ci build
67
+ ARG CI_BUILD=
68
+ ENV CI_BUILD=${CI_BUILD}
69
+
70
+ # Speeding up make depending of your system
71
+ ARG CORE_COUNT=1
72
+
73
+ RUN if [ $CI_BUILD ]; then \
74
+ echo "Suppressing make output for CI environments to decrease log size" ; \
75
+ make -j${CORE_COUNT} > /dev/null || make; \
76
+ else make -j${CORE_COUNT}; \
77
+ fi
78
+
79
+ # install it
80
+ RUN make install
81
+
82
+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
83
+ # resulting image with environment
84
+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
85
+
86
+ FROM base as qt
87
+
88
+ ENV ENTRYPOINT_DIR=/usr/local/bin
89
+ ENV APP_BUILDDIR=/var/build
90
+
91
+ COPY --from=builder ${QT_PREFIX} ${QT_PREFIX}
92
+ COPY entrypoint.sh ${ENTRYPOINT_DIR}
93
+
94
+ RUN chmod +x ${ENTRYPOINT_DIR}/entrypoint.sh
95
+
96
+ # setting volume up with good permissions
97
+ RUN mkdir -p ${APP_BUILDDIR} && chmod 1777 ${APP_BUILDDIR}
98
+ VOLUME ["${APP_BUILDDIR}" ]
99
+
100
+ USER ${QT_USERNAME}
101
+
102
+ ENTRYPOINT ["entrypoint.sh" ]
0 commit comments