|
11 | 11 | # Build with: |
12 | 12 | # docker build \ |
13 | 13 | # --build-arg BASE_IMAGE=playground-php-wasm:compile-extension-php8-4-jspi \ |
| 14 | +# --build-arg HOST_PHP_VERSION=8.4 \ |
14 | 15 | # -t playground-php-wasm-ext-rust:8.4-jspi \ |
15 | 16 | # -f Dockerfile.rust . |
16 | 17 |
|
17 | 18 | ARG BASE_IMAGE=playground-php-wasm:compile-extension-php8-4-jspi |
| 19 | +ARG HOST_PHP_VERSION=8.4 |
18 | 20 |
|
19 | | -# Stage providing a host PHP 8.4 CLI binary. ext-php-rs's build.rs shells |
| 21 | +# Stage providing a host PHP CLI binary. ext-php-rs's build.rs shells |
20 | 22 | # out to `php` to detect the PHP version (PHP_VERSION_ID drives the cfg |
21 | | -# flags php80..php85). The wasm-targeted PHP install in /usr/local has no |
22 | | -# CLI binary (--disable-cli), Ubuntu noble ships only PHP 8.3, and |
23 | | -# packages.sury.org blocks our datacenter IP, so we steal a CLI from the |
24 | | -# official php:8.4-cli image. |
25 | | -FROM php:8.4-cli AS host-php-cli |
| 23 | +# flags such as php74, php80, and php85). The wasm-targeted PHP install in |
| 24 | +# /usr/local has no CLI binary (--disable-cli), so copy a matching CLI from |
| 25 | +# the official PHP image for the target version. |
| 26 | +FROM php:${HOST_PHP_VERSION}-cli AS host-php-cli |
| 27 | + |
| 28 | +RUN set -eux; \ |
| 29 | + mkdir -p /opt/host-php/libdeps; \ |
| 30 | + ldd /usr/local/bin/php \ |
| 31 | + | awk '($2 == "=>") { print $3 } ($1 ~ /^\//) { print $1 }' \ |
| 32 | + | grep -v '^$' \ |
| 33 | + | sort -u \ |
| 34 | + | while read -r lib; do cp -L "$lib" /opt/host-php/libdeps/; done |
26 | 35 |
|
27 | 36 | FROM ${BASE_IMAGE} |
28 | 37 |
|
29 | 38 | COPY --from=host-php-cli /usr/local/bin/php /opt/host-php/bin/php |
30 | 39 | COPY --from=host-php-cli /usr/local/lib/php /opt/host-php/lib/php |
31 | 40 | COPY --from=host-php-cli /usr/local/etc/php /opt/host-php/etc/php |
32 | 41 | COPY --from=host-php-cli /usr/local/include/php /opt/host-php/include/php |
| 42 | +COPY --from=host-php-cli /opt/host-php/libdeps /opt/host-php/libdeps |
33 | 43 |
|
34 | 44 | ENV RUSTUP_HOME=/root/rustup \ |
35 | 45 | CARGO_HOME=/root/cargo \ |
36 | | - PATH=/root/cargo/bin:/root/rustup/bin:/usr/local/bin:/usr/bin:/bin |
| 46 | + PATH=/root/cargo/bin:/root/rustup/bin:/usr/local/bin:/usr/bin:/bin \ |
| 47 | + LD_LIBRARY_PATH=/opt/host-php/libdeps:/opt/host-php/lib |
37 | 48 |
|
38 | 49 | RUN apt-get update && apt-get install -y --no-install-recommends \ |
39 | 50 | curl ca-certificates build-essential \ |
40 | 51 | libclang-dev clang llvm-dev pkg-config libxml2 libonig5 libsqlite3-0 \ |
41 | 52 | libargon2-1 libssl3 zlib1g libreadline8 \ |
42 | 53 | && rm -rf /var/lib/apt/lists/* \ |
| 54 | + && /opt/host-php/bin/php -v \ |
43 | 55 | && ln -sf /opt/host-php/bin/php /usr/local/bin/php-host |
44 | 56 |
|
45 | 57 | # ext-php-rs's build.rs needs a host `php` executable to query include paths |
|
0 commit comments