@@ -3,68 +3,67 @@ ARG BREF_VERSION
33FROM bref/build-php-$PHP_VERSION:$BREF_VERSION AS ext
44ARG PHP_VERSION
55
6+ ENV IMAGICK_VERSION="7.1.1-38"
7+ ENV AOM_VERSION="3.10.0"
8+ ENV LIBHEIF_VERSION="1.19.3"
9+ ENV LIBDE265_VERSION="1.0.15"
10+ ENV LIBWEBP_VERSION="1.4.0"
11+ ENV GS_VERSION="9.56.1"
12+ ENV IMAGICK_EXT_COMMIT="28f27044e435a2b203e32675e942eb8de620ee58"
13+
614# Prepare environment
715ENV IMAGICK_BUILD_DIR=${BUILD_DIR}/imagick
816RUN mkdir -p ${IMAGICK_BUILD_DIR}
9- RUN LD_LIBRARY_PATH= yum -y install libpng-devel libjpeg-devel lcms2-devel ImageMagick-devel
17+ WORKDIR ${IMAGICK_BUILD_DIR}
18+ RUN LD_LIBRARY_PATH= yum -y install libpng-devel libjpeg-devel lcms2-devel ImageMagick-devel nasm gcc10 gcc10-c++
19+
20+ # Use gcc10 as the default compiler, needed for AOM
21+ ENV CXX="/usr/bin/gcc10-g++"
22+ ENV CC="/usr/bin/gcc10-gcc"
1023
1124# Compile libwebp since AL2 ships with v0.3, and v0.4 or higher is required to builder the other libs
12- WORKDIR ${IMAGICK_BUILD_DIR}
13- RUN curl -Ls -o libwebp.tar.gz https://github.com/webmproject/libwebp/archive/refs/tags/v1.4.0.tar.gz
14- RUN tar xzf libwebp.tar.gz
15- WORKDIR ${IMAGICK_BUILD_DIR}/libwebp-1.4.0
16- RUN autoreconf -i && automake && autoconf
17- RUN ./configure --prefix ${INSTALL_DIR} --exec-prefix ${INSTALL_DIR}
18- RUN make -j $(nproc) && make install
25+ RUN curl -Ls -o libwebp.tar.gz https://github.com/webmproject/libwebp/archive/refs/tags/v${LIBWEBP_VERSION}.tar.gz && tar xzf libwebp.tar.gz && rm libwebp.tar.gz \
26+ && cd ${IMAGICK_BUILD_DIR}/libwebp-${LIBWEBP_VERSION} \
27+ && autoreconf -i && automake && autoconf \
28+ && ./configure --prefix ${INSTALL_DIR} --exec-prefix ${INSTALL_DIR} \
29+ && make -j $(nproc) && make install && rm -rf ${IMAGICK_BUILD_DIR}/libwebp-${LIBWEBP_VERSION}
30+
31+ # Compile AOM (libavif dependency for AVIF support)
32+ RUN git clone -b v${AOM_VERSION} --depth 1 https://aomedia.googlesource.com/aom \
33+ && mkdir -p ${IMAGICK_BUILD_DIR}/aom_build && cd ${IMAGICK_BUILD_DIR}/aom_build \
34+ && cmake ../aom -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} -DBUILD_SHARED_LIBS=1 -DENABLE_DOCS=0 -DENABLE_EXAMPLES=0 -DENABLE_TESTDATA=0 -DENABLE_TESTS=0 -DENABLE_TOOLS=0 \
35+ && make -j $(nproc) && make install && rm -rf ${IMAGICK_BUILD_DIR}/aom && rm -rf ${IMAGICK_BUILD_DIR}/aom_build
1936
2037# Compile libde265 (libheif dependency)
21- WORKDIR ${IMAGICK_BUILD_DIR}
22- RUN curl -Ls -o libde265.tar.gz https://github.com/strukturag/libde265/releases/download/v1.0.15/libde265-1.0.15.tar.gz && tar xzf libde265.tar.gz
23- WORKDIR ${IMAGICK_BUILD_DIR}/libde265-1.0.15
24- RUN ./configure --prefix ${INSTALL_DIR} --exec-prefix ${INSTALL_DIR}
25- RUN make -j $(nproc) && make install
38+ RUN curl -Ls -o libde265.tar.gz https://github.com/strukturag/libde265/releases/download/v${LIBDE265_VERSION}/libde265-${LIBDE265_VERSION}.tar.gz && tar xzf libde265.tar.gz && rm libde265.tar.gz \
39+ && cd ${IMAGICK_BUILD_DIR}/libde265-${LIBDE265_VERSION} \
40+ && ./configure --prefix ${INSTALL_DIR} --exec-prefix ${INSTALL_DIR} \
41+ && make -j $(nproc) && make install && rm -rf ${IMAGICK_BUILD_DIR}/libde265-${LIBDE265_VERSION}
2642
2743# Compile libheif
28- WORKDIR ${IMAGICK_BUILD_DIR}
29- RUN curl -Ls -o libheif.tar.gz https://github.com/strukturag/libheif/releases/download/v1.13.0/libheif-1.13.0.tar.gz && tar xzf libheif.tar.gz
30- WORKDIR ${IMAGICK_BUILD_DIR}/libheif-1.13.0
31- RUN ./configure --prefix ${INSTALL_DIR} --exec-prefix ${INSTALL_DIR}
32- RUN make -j $(nproc) && make install
44+ RUN curl -Ls -o libheif.tar.gz https://github.com/strukturag/libheif/releases/download/v${LIBHEIF_VERSION}/libheif-${LIBHEIF_VERSION}.tar.gz \
45+ && tar xzf libheif.tar.gz && rm libheif.tar.gz && mkdir -p ${IMAGICK_BUILD_DIR}/libheif-${LIBHEIF_VERSION}/build && cd ${IMAGICK_BUILD_DIR}/libheif-${LIBHEIF_VERSION}/build \
46+ && cmake --preset=release-noplugins .. -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} \
47+ && make -j $(nproc) && make install && rm -rf ${IMAGICK_BUILD_DIR}/libheif-${LIBHEIF_VERSION}
3348
3449# Compile gs
35- WORKDIR ${IMAGICK_BUILD_DIR}
36- RUN curl -Ls -o ghostscript.tar.gz https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs9561/ghostscript-9.56.1.tar.gz && tar xzf ghostscript.tar.gz
37- WORKDIR ${IMAGICK_BUILD_DIR}/ghostscript-9.56.1
38- RUN ./configure --prefix ${INSTALL_DIR} --exec-prefix ${INSTALL_DIR} --without-x
39- RUN make -j $(nproc) && cp bin/gs /tmp/gs
50+ RUN curl -Ls -o ghostscript.tar.gz https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs9561/ghostscript-${GS_VERSION}.tar.gz && tar xzf ghostscript.tar.gz && rm ghostscript.tar.gz \
51+ && mkdir -p ${IMAGICK_BUILD_DIR}/ghostscript-${GS_VERSION} && cd ${IMAGICK_BUILD_DIR}/ghostscript-${GS_VERSION} \
52+ && ./configure --prefix ${INSTALL_DIR} --exec-prefix ${INSTALL_DIR} --without-x \
53+ && make -j $(nproc) && cp bin/gs /tmp/gs && rm -rf ${IMAGICK_BUILD_DIR}/ghostscript-${GS_VERSION}
4054
4155# Compile the ImageMagick library
42- WORKDIR ${IMAGICK_BUILD_DIR}
43- RUN curl -Ls -o ImageMagick.tar.gz https://github.com/ImageMagick/ImageMagick/archive/refs/tags/7.1.1-38.tar.gz && tar xzf ImageMagick.tar.gz
44- WORKDIR ${IMAGICK_BUILD_DIR}/ImageMagick-7.1.1-38
45- RUN ./configure --prefix ${INSTALL_DIR} --exec-prefix ${INSTALL_DIR} --with-webp --with-heic --disable-static --with-freetype=yes
46- RUN make -j $(nproc)
47- RUN make install
48-
49- # Show how ImageMagick is configured. See the "delicate" section
50- RUN convert -list configure
51-
52- # Compile the php imagick extension
53- WORKDIR ${IMAGICK_BUILD_DIR}
54- RUN git clone https://github.com/Imagick/imagick
55- WORKDIR ${IMAGICK_BUILD_DIR}/imagick
56- # TODO; update the commit hash when there's a new release
57- RUN git reset --hard 28f27044e435a2b203e32675e942eb8de620ee58
58- RUN phpize
59- RUN ./configure --with-imagick=${INSTALL_DIR}
60- RUN make -j $(nproc)
61- RUN make install
62-
63- RUN cp `php-config --extension-dir`/imagick.so /tmp/imagick.so
64- RUN strip --strip-debug /tmp/imagick.so
65- RUN echo 'extension=imagick.so' > /tmp/ext.ini
56+ RUN curl -Ls -o ImageMagick.tar.gz https://github.com/ImageMagick/ImageMagick/archive/refs/tags/${IMAGICK_VERSION}.tar.gz && tar xzf ImageMagick.tar.gz && rm ImageMagick.tar.gz \
57+ && cd ${IMAGICK_BUILD_DIR}/ImageMagick-${IMAGICK_VERSION} \
58+ && ./configure --prefix ${INSTALL_DIR} --exec-prefix ${INSTALL_DIR} --with-webp --with-heic --disable-static --with-freetype=yes \
59+ && make -j $(nproc) && make install && rm -rf ${IMAGICK_BUILD_DIR}/ImageMagick-${IMAGICK_VERSION} && convert -list configure
6660
67- RUN php /bref/lib-copy/copy-dependencies.php /tmp/imagick.so /tmp/extension-libs
61+ # Compile the php imagick extension and copy the dependencies
62+ RUN git clone https://github.com/Imagick/imagick && cd imagick \
63+ &&git reset --hard ${IMAGICK_EXT_COMMIT} \
64+ && phpize && ./configure --with-imagick=${INSTALL_DIR} \
65+ && make -j $(nproc) && make install && cp `php-config --extension-dir`/imagick.so /tmp/imagick.so && strip --strip-debug /tmp/imagick.so && echo 'extension=imagick.so' > /tmp/ext.ini \
66+ && php /bref/lib-copy/copy-dependencies.php /tmp/imagick.so /tmp/extension-libs
6867
6968# Build the final image with just the files we need
7069FROM scratch
0 commit comments