mirror of
https://github.com/crazywhalecc/static-php-cli.git
synced 2026-07-10 10:25:36 +08:00
Merge branch 'main' into fix/lide265
This commit is contained in:
79
.github/workflows/build-unix.yml
vendored
79
.github/workflows/build-unix.yml
vendored
@@ -29,6 +29,9 @@ on:
|
|||||||
description: Extensions to build (comma separated)
|
description: Extensions to build (comma separated)
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
|
shared-extensions:
|
||||||
|
description: Shared extensions to build (optional, comma separated)
|
||||||
|
type: string
|
||||||
extra-libs:
|
extra-libs:
|
||||||
description: Extra libraries to build (optional, comma separated)
|
description: Extra libraries to build (optional, comma separated)
|
||||||
type: string
|
type: string
|
||||||
@@ -42,6 +45,14 @@ on:
|
|||||||
build-fpm:
|
build-fpm:
|
||||||
description: Build fpm binary
|
description: Build fpm binary
|
||||||
type: boolean
|
type: boolean
|
||||||
|
build-frankenphp:
|
||||||
|
description: Build frankenphp binary (requires ZTS)
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
enable-zts:
|
||||||
|
description: Enable ZTS
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
prefer-pre-built:
|
prefer-pre-built:
|
||||||
description: Prefer pre-built binaries (reduce build time)
|
description: Prefer pre-built binaries (reduce build time)
|
||||||
type: boolean
|
type: boolean
|
||||||
@@ -73,6 +84,9 @@ on:
|
|||||||
description: Extensions to build (comma separated)
|
description: Extensions to build (comma separated)
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
|
shared-extensions:
|
||||||
|
description: Shared extensions to build (optional, comma separated)
|
||||||
|
type: string
|
||||||
extra-libs:
|
extra-libs:
|
||||||
description: Extra libraries to build (optional, comma separated)
|
description: Extra libraries to build (optional, comma separated)
|
||||||
type: string
|
type: string
|
||||||
@@ -86,6 +100,14 @@ on:
|
|||||||
build-fpm:
|
build-fpm:
|
||||||
description: Build fpm binary
|
description: Build fpm binary
|
||||||
type: boolean
|
type: boolean
|
||||||
|
build-frankenphp:
|
||||||
|
description: Build frankenphp binary (requires ZTS)
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
enable-zts:
|
||||||
|
description: Enable ZTS
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
prefer-pre-built:
|
prefer-pre-built:
|
||||||
description: Prefer pre-built binaries (reduce build time)
|
description: Prefer pre-built binaries (reduce build time)
|
||||||
type: boolean
|
type: boolean
|
||||||
@@ -152,8 +174,19 @@ jobs:
|
|||||||
RUNS_ON="macos-15"
|
RUNS_ON="macos-15"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
DOWN_CMD="$DOWN_CMD --with-php=${{ inputs.php-version }} --for-extensions=${{ inputs.extensions }} --ignore-cache-sources=php-src"
|
STATIC_EXTS="${{ inputs.extensions }}"
|
||||||
BUILD_CMD="$BUILD_CMD ${{ inputs.extensions }}"
|
SHARED_EXTS="${{ inputs['shared-extensions'] }}"
|
||||||
|
BUILD_FRANKENPHP="${{ inputs['build-frankenphp'] }}"
|
||||||
|
ENABLE_ZTS="${{ inputs['enable-zts'] }}"
|
||||||
|
ALL_EXTS="$STATIC_EXTS"
|
||||||
|
if [ -n "$SHARED_EXTS" ]; then
|
||||||
|
ALL_EXTS="$ALL_EXTS,$SHARED_EXTS"
|
||||||
|
fi
|
||||||
|
DOWN_CMD="$DOWN_CMD --with-php=${{ inputs.php-version }} --for-extensions=$ALL_EXTS --ignore-cache-sources=php-src"
|
||||||
|
BUILD_CMD="$BUILD_CMD $STATIC_EXTS"
|
||||||
|
if [ -n "$SHARED_EXTS" ]; then
|
||||||
|
BUILD_CMD="$BUILD_CMD --build-shared=$SHARED_EXTS"
|
||||||
|
fi
|
||||||
if [ -n "${{ inputs.extra-libs }}" ]; then
|
if [ -n "${{ inputs.extra-libs }}" ]; then
|
||||||
DOWN_CMD="$DOWN_CMD --for-libs=${{ inputs.extra-libs }}"
|
DOWN_CMD="$DOWN_CMD --for-libs=${{ inputs.extra-libs }}"
|
||||||
BUILD_CMD="$BUILD_CMD --with-libs=${{ inputs.extra-libs }}"
|
BUILD_CMD="$BUILD_CMD --with-libs=${{ inputs.extra-libs }}"
|
||||||
@@ -177,6 +210,12 @@ jobs:
|
|||||||
if [ ${{ inputs.build-fpm }} == true ]; then
|
if [ ${{ inputs.build-fpm }} == true ]; then
|
||||||
BUILD_CMD="$BUILD_CMD --build-fpm"
|
BUILD_CMD="$BUILD_CMD --build-fpm"
|
||||||
fi
|
fi
|
||||||
|
if [ "$BUILD_FRANKENPHP" = "true" ]; then
|
||||||
|
BUILD_CMD="$BUILD_CMD --build-frankenphp"
|
||||||
|
fi
|
||||||
|
if [ "$ENABLE_ZTS" = "true" ]; then
|
||||||
|
BUILD_CMD="$BUILD_CMD --enable-zts"
|
||||||
|
fi
|
||||||
echo 'download='"$DOWN_CMD" >> "$GITHUB_OUTPUT"
|
echo 'download='"$DOWN_CMD" >> "$GITHUB_OUTPUT"
|
||||||
echo 'build='"$BUILD_CMD" >> "$GITHUB_OUTPUT"
|
echo 'build='"$BUILD_CMD" >> "$GITHUB_OUTPUT"
|
||||||
echo 'run='"$RUNS_ON" >> "$GITHUB_OUTPUT"
|
echo 'run='"$RUNS_ON" >> "$GITHUB_OUTPUT"
|
||||||
@@ -199,6 +238,27 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
phpts: nts
|
phpts: nts
|
||||||
|
|
||||||
|
- if: ${{ inputs['build-frankenphp'] == true }}
|
||||||
|
name: "Install go-xcaddy for FrankenPHP"
|
||||||
|
run: |
|
||||||
|
case "${{ inputs.os }}" in
|
||||||
|
linux-x86_64|linux-aarch64)
|
||||||
|
./bin/spc-alpine-docker install-pkg go-xcaddy
|
||||||
|
;;
|
||||||
|
linux-x86_64-glibc|linux-aarch64-glibc)
|
||||||
|
./bin/spc-gnu-docker install-pkg go-xcaddy
|
||||||
|
;;
|
||||||
|
macos-x86_64|macos-aarch64)
|
||||||
|
composer update --no-dev --classmap-authoritative
|
||||||
|
./bin/spc doctor --auto-fix
|
||||||
|
./bin/spc install-pkg go-xcaddy
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unsupported OS for go-xcaddy install: ${{ inputs.os }}"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
# Cache downloaded source
|
# Cache downloaded source
|
||||||
- id: cache-download
|
- id: cache-download
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
@@ -245,7 +305,22 @@ jobs:
|
|||||||
name: php-fpm-${{ inputs.php-version }}-${{ inputs.os }}
|
name: php-fpm-${{ inputs.php-version }}-${{ inputs.os }}
|
||||||
path: buildroot/bin/php-fpm
|
path: buildroot/bin/php-fpm
|
||||||
|
|
||||||
|
# Upload frankenphp executable
|
||||||
|
- if: ${{ inputs['build-frankenphp'] == true }}
|
||||||
|
name: "Upload FrankenPHP SAPI"
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: php-frankenphp-${{ inputs.php-version }}-${{ inputs.os }}
|
||||||
|
path: buildroot/bin/frankenphp
|
||||||
|
|
||||||
# Upload extensions metadata
|
# Upload extensions metadata
|
||||||
|
- if: ${{ inputs['shared-extensions'] != '' }}
|
||||||
|
name: "Upload shared extensions"
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: php-shared-ext-${{ inputs.php-version }}-${{ inputs.os }}
|
||||||
|
path: |
|
||||||
|
buildroot/modules/*.so
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
name: "Upload License Files"
|
name: "Upload License Files"
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -148,6 +148,8 @@ SPC_CMD_PREFIX_PHP_CONFIGURE="./configure --prefix= --with-valgrind=no --enable-
|
|||||||
SPC_CMD_VAR_PHP_EMBED_TYPE="static"
|
SPC_CMD_VAR_PHP_EMBED_TYPE="static"
|
||||||
; EXTRA_CFLAGS for `configure` and `make` php
|
; EXTRA_CFLAGS for `configure` and `make` php
|
||||||
SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS="-g -fstack-protector-strong -fpic -fpie -Werror=unknown-warning-option ${SPC_DEFAULT_C_FLAGS}"
|
SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS="-g -fstack-protector-strong -fpic -fpie -Werror=unknown-warning-option ${SPC_DEFAULT_C_FLAGS}"
|
||||||
|
; EXTRA_LDFLAGS for `make` php, can use -release to set a soname for libphp.so
|
||||||
|
SPC_CMD_VAR_PHP_MAKE_EXTRA_LDFLAGS=""
|
||||||
; minimum compatible macOS version (LLVM vars, availability not guaranteed)
|
; minimum compatible macOS version (LLVM vars, availability not guaranteed)
|
||||||
MACOSX_DEPLOYMENT_TARGET=12.0
|
MACOSX_DEPLOYMENT_TARGET=12.0
|
||||||
|
|
||||||
|
|||||||
@@ -16,8 +16,10 @@ while also defining the extensions to compile.
|
|||||||
|
|
||||||
1. Fork project.
|
1. Fork project.
|
||||||
2. Go to the Actions of the project and select `CI`.
|
2. Go to the Actions of the project and select `CI`.
|
||||||
3. Select `Run workflow`, fill in the PHP version you want to compile, the target type, and the list of extensions. (extensions comma separated, e.g. `bcmath,curl,mbstring`)
|
3. Select `Run workflow`, fill in the PHP version you want to compile, the target type, and the list of static extensions. (comma separated, e.g. `bcmath,curl,mbstring`)
|
||||||
4. After waiting for about a period of time, enter the corresponding task and get `Artifacts`.
|
4. If you need shared extensions (for example `xdebug`), set `shared-extensions` (comma separated, e.g. `xdebug`).
|
||||||
|
5. If you need FrankenPHP, enable `build-frankenphp` and also enable `enable-zts`.
|
||||||
|
6. After waiting for about a period of time, enter the corresponding task and get `Artifacts`.
|
||||||
|
|
||||||
If you enable `debug`, all logs will be output at build time, including compiled logs, for troubleshooting.
|
If you enable `debug`, all logs will be output at build time, including compiled logs, for troubleshooting.
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,9 @@ Action 构建指的是直接使用 GitHub Action 进行编译。
|
|||||||
1. Fork 本项目。
|
1. Fork 本项目。
|
||||||
2. 进入项目的 Actions,选择 CI 开头的 Workflow(根据你需要的操作系统选择)。
|
2. 进入项目的 Actions,选择 CI 开头的 Workflow(根据你需要的操作系统选择)。
|
||||||
3. 选择 `Run workflow`,填入你要编译的 PHP 版本、目标类型、扩展列表。(扩展列表使用英文逗号分割,例如 `bcmath,curl,mbstring`)
|
3. 选择 `Run workflow`,填入你要编译的 PHP 版本、目标类型、扩展列表。(扩展列表使用英文逗号分割,例如 `bcmath,curl,mbstring`)
|
||||||
4. 等待大约一段时间后,进入对应的任务中,获取 `Artifacts`。
|
4. 如果需要共享扩展(例如 `xdebug`),请设置 `shared-extensions`(使用英文逗号分割,例如 `xdebug`)。
|
||||||
|
5. 如果需要 FrankenPHP,请启用 `build-frankenphp`,同时也需要启用 `enable-zts`。
|
||||||
|
6. 等待大约一段时间后,进入对应的任务中,获取 `Artifacts`。
|
||||||
|
|
||||||
如果你选择了 `debug`,则会在构建时输出所有日志,包括编译的日志,以供排查错误。
|
如果你选择了 `debug`,则会在构建时输出所有日志,包括编译的日志,以供排查错误。
|
||||||
|
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ class LinuxBuilder extends UnixBuilderBase
|
|||||||
throw new WrongUsageException(
|
throw new WrongUsageException(
|
||||||
"You're building against musl libc statically (the default on Linux), but you're trying to build shared extensions.\n" .
|
"You're building against musl libc statically (the default on Linux), but you're trying to build shared extensions.\n" .
|
||||||
'Static musl libc does not implement `dlopen`, so your php binary is not able to load shared extensions.' . "\n" .
|
'Static musl libc does not implement `dlopen`, so your php binary is not able to load shared extensions.' . "\n" .
|
||||||
'Either use SPC_LIBC=glibc to link against glibc on a glibc OS, or use SPC_TARGET="native-native-musl -dynamic" to link against musl libc dynamically using `zig cc`.'
|
'Either use SPC_LIBC=glibc to link against glibc on a glibc OS, use SPC_TARGET="native-native-musl -dynamic" to link against musl libc dynamically using `zig cc` or use SPC_MUSL_DYNAMIC=true on alpine.'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
logger()->info('Building shared extensions...');
|
logger()->info('Building shared extensions...');
|
||||||
|
|||||||
@@ -31,8 +31,23 @@ class zlib extends WindowsLibraryBase
|
|||||||
$this->builder->makeSimpleWrapper('cmake'),
|
$this->builder->makeSimpleWrapper('cmake'),
|
||||||
"--build build --config Release --target install -j{$this->builder->concurrency}"
|
"--build build --config Release --target install -j{$this->builder->concurrency}"
|
||||||
);
|
);
|
||||||
copy(BUILD_LIB_PATH . '\zlibstatic.lib', BUILD_LIB_PATH . '\zlib_a.lib');
|
$detect_list = [
|
||||||
unlink(BUILD_ROOT_PATH . '\bin\zlib.dll');
|
'zlibstatic.lib',
|
||||||
unlink(BUILD_LIB_PATH . '\zlib.lib');
|
'zs.lib',
|
||||||
|
'libzs.lib',
|
||||||
|
];
|
||||||
|
foreach ($detect_list as $item) {
|
||||||
|
if (file_exists(BUILD_LIB_PATH . '\\' . $item)) {
|
||||||
|
FileSystem::copy(BUILD_LIB_PATH . '\\' . $item, BUILD_LIB_PATH . '\zlib_a.lib');
|
||||||
|
FileSystem::copy(BUILD_LIB_PATH . '\\' . $item, BUILD_LIB_PATH . '\zlibstatic.lib');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FileSystem::removeFileIfExists(BUILD_ROOT_PATH . '\bin\zlib.dll');
|
||||||
|
FileSystem::removeFileIfExists(BUILD_LIB_PATH . '\zlib.lib');
|
||||||
|
FileSystem::removeFileIfExists(BUILD_LIB_PATH . '\libz.dll');
|
||||||
|
FileSystem::removeFileIfExists(BUILD_LIB_PATH . '\libz.lib');
|
||||||
|
FileSystem::removeFileIfExists(BUILD_LIB_PATH . '\z.lib');
|
||||||
|
FileSystem::removeFileIfExists(BUILD_LIB_PATH . '\z.dll');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -634,7 +634,13 @@ class SourcePatcher
|
|||||||
FileSystem::replaceFileStr(SOURCE_PATH . '/php-src/ext/gd/libgd/gdft.c', '#ifndef MSWIN32', '#ifndef _WIN32');
|
FileSystem::replaceFileStr(SOURCE_PATH . '/php-src/ext/gd/libgd/gdft.c', '#ifndef MSWIN32', '#ifndef _WIN32');
|
||||||
}
|
}
|
||||||
// custom config.w32, because official config.w32 is hard-coded many things
|
// custom config.w32, because official config.w32 is hard-coded many things
|
||||||
$origin = $ver_id >= 80100 ? file_get_contents(ROOT_DIR . '/src/globals/extra/gd_config_81.w32') : file_get_contents(ROOT_DIR . '/src/globals/extra/gd_config_80.w32');
|
if ($ver_id >= 80500) {
|
||||||
|
$origin = file_get_contents(ROOT_DIR . '/src/globals/extra/gd_config_85.w32');
|
||||||
|
} elseif ($ver_id >= 80100) {
|
||||||
|
$origin = file_get_contents(ROOT_DIR . '/src/globals/extra/gd_config_81.w32');
|
||||||
|
} else {
|
||||||
|
$origin = file_get_contents(ROOT_DIR . '/src/globals/extra/gd_config_80.w32');
|
||||||
|
}
|
||||||
file_put_contents(SOURCE_PATH . '/php-src/ext/gd/config.w32.bak', file_get_contents(SOURCE_PATH . '/php-src/ext/gd/config.w32'));
|
file_put_contents(SOURCE_PATH . '/php-src/ext/gd/config.w32.bak', file_get_contents(SOURCE_PATH . '/php-src/ext/gd/config.w32'));
|
||||||
return file_put_contents(SOURCE_PATH . '/php-src/ext/gd/config.w32', $origin) !== false;
|
return file_put_contents(SOURCE_PATH . '/php-src/ext/gd/config.w32', $origin) !== false;
|
||||||
}
|
}
|
||||||
|
|||||||
94
src/globals/extra/gd_config_85.w32
Normal file
94
src/globals/extra/gd_config_85.w32
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
// vim:ft=javascript
|
||||||
|
|
||||||
|
ARG_WITH("gd", "Bundled GD support", "yes");
|
||||||
|
|
||||||
|
if (PHP_GD != "no") {
|
||||||
|
// check for gd.h (required)
|
||||||
|
if (!CHECK_HEADER_ADD_INCLUDE("gd.h", "CFLAGS_GD", PHP_GD + ";ext\\gd\\libgd")) {
|
||||||
|
ERROR("gd not enabled; libraries and headers not found");
|
||||||
|
}
|
||||||
|
|
||||||
|
// zlib ext support (required)
|
||||||
|
if (!CHECK_LIB("zlib_a.lib;zlib.lib", "gd", PHP_GD)) {
|
||||||
|
ERROR("gd not enabled; zlib not enabled");
|
||||||
|
}
|
||||||
|
|
||||||
|
// libjpeg lib support
|
||||||
|
if (CHECK_LIB("libjpeg_a.lib;libjpeg.lib", "gd", PHP_GD) &&
|
||||||
|
CHECK_HEADER_ADD_INCLUDE("jpeglib.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include")) {
|
||||||
|
AC_DEFINE("HAVE_LIBJPEG", 1, "JPEG support");
|
||||||
|
AC_DEFINE("HAVE_GD_JPG", 1, "JPEG support");
|
||||||
|
}
|
||||||
|
|
||||||
|
// libpng16 lib support
|
||||||
|
if (CHECK_LIB("libpng_a.lib;libpng.lib", "gd", PHP_GD) &&
|
||||||
|
CHECK_HEADER_ADD_INCLUDE("png.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include\\libpng16")) {
|
||||||
|
AC_DEFINE("HAVE_LIBPNG", 1, "PNG support");
|
||||||
|
AC_DEFINE("HAVE_GD_PNG", 1, "PNG support");
|
||||||
|
}
|
||||||
|
|
||||||
|
// freetype lib support
|
||||||
|
if (CHECK_LIB("libfreetype_a.lib;libfreetype.lib", "gd", PHP_GD) &&
|
||||||
|
CHECK_HEADER_ADD_INCLUDE("ft2build.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include\\freetype2;" + PHP_PHP_BUILD + "\\include\\freetype")) {
|
||||||
|
AC_DEFINE("HAVE_LIBFREETYPE", 1, "FreeType support");
|
||||||
|
AC_DEFINE("HAVE_GD_FREETYPE", 1, "FreeType support");
|
||||||
|
}
|
||||||
|
|
||||||
|
// xpm lib support
|
||||||
|
if (CHECK_LIB("libXpm_a.lib", "gd", PHP_GD) &&
|
||||||
|
CHECK_HEADER_ADD_INCLUDE("xpm.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include\\X11")) {
|
||||||
|
AC_DEFINE("HAVE_LIBXPM", 1, "XPM support");
|
||||||
|
AC_DEFINE("HAVE_GD_XPM", 1, "XPM support");
|
||||||
|
}
|
||||||
|
|
||||||
|
// iconv lib support
|
||||||
|
if ((CHECK_LIB("libiconv_a.lib;libiconv.lib", "gd", PHP_GD) || CHECK_LIB("iconv_a.lib;iconv.lib", "gd", PHP_GD)) &&
|
||||||
|
CHECK_HEADER_ADD_INCLUDE("iconv.h", "CFLAGS_GD", PHP_GD)) {
|
||||||
|
AC_DEFINE("HAVE_LIBICONV", 1, "Iconv support");
|
||||||
|
}
|
||||||
|
|
||||||
|
// libwebp lib support
|
||||||
|
if ((CHECK_LIB("libwebp_a.lib", "gd", PHP_GD) || CHECK_LIB("libwebp.lib", "gd", PHP_GD)) &&
|
||||||
|
CHECK_LIB("libsharpyuv.lib", "gd", PHP_GD) &&
|
||||||
|
CHECK_HEADER_ADD_INCLUDE("decode.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include\\webp") &&
|
||||||
|
CHECK_HEADER_ADD_INCLUDE("encode.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include\\webp")) {
|
||||||
|
AC_DEFINE("HAVE_LIBWEBP", 1, "WebP support");
|
||||||
|
AC_DEFINE("HAVE_GD_WEBP", 1, "WebP support");
|
||||||
|
}
|
||||||
|
|
||||||
|
// libavif lib support
|
||||||
|
if (CHECK_LIB("avif_a.lib", "gd", PHP_GD) &&
|
||||||
|
CHECK_LIB("aom_a.lib", "gd", PHP_GD) &&
|
||||||
|
CHECK_HEADER_ADD_INCLUDE("avif.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include\\avif")) {
|
||||||
|
ADD_FLAG("CFLAGS_GD", "/D HAVE_LIBAVIF /D HAVE_GD_AVIF");
|
||||||
|
} else if (CHECK_LIB("avif.lib", "gd", PHP_GD) &&
|
||||||
|
CHECK_HEADER_ADD_INCLUDE("avif.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include\\avif")) {
|
||||||
|
ADD_FLAG("CFLAGS_GD", "/D HAVE_LIBAVIF /D HAVE_GD_AVIF");
|
||||||
|
}
|
||||||
|
|
||||||
|
CHECK_LIB("User32.lib", "gd", PHP_GD);
|
||||||
|
CHECK_LIB("Gdi32.lib", "gd", PHP_GD);
|
||||||
|
|
||||||
|
EXTENSION("gd", "gd.c", null, "-Iext/gd/libgd");
|
||||||
|
ADD_SOURCES("ext/gd/libgd", "gd.c \
|
||||||
|
gdcache.c gdfontg.c gdfontl.c gdfontmb.c gdfonts.c gdfontt.c \
|
||||||
|
gdft.c gd_gd2.c gd_gd.c gd_gif_in.c gd_gif_out.c gdhelpers.c gd_io.c gd_io_dp.c \
|
||||||
|
gd_io_file.c gd_io_ss.c gd_jpeg.c gdkanji.c gd_png.c gd_ss.c \
|
||||||
|
gdtables.c gd_topal.c gd_wbmp.c gdxpm.c wbmp.c gd_xbm.c gd_security.c gd_transform.c \
|
||||||
|
gd_filter.c gd_rotate.c gd_color_match.c gd_webp.c gd_avif.c \
|
||||||
|
gd_crop.c gd_interpolation.c gd_matrix.c gd_bmp.c gd_tga.c", "gd");
|
||||||
|
|
||||||
|
AC_DEFINE('HAVE_LIBGD', 1, 'GD support');
|
||||||
|
AC_DEFINE('HAVE_GD_BUNDLED', 1, "Bundled GD");
|
||||||
|
AC_DEFINE('HAVE_GD_BMP', 1, "BMP support");
|
||||||
|
AC_DEFINE('HAVE_GD_TGA', 1, "TGA support");
|
||||||
|
ADD_FLAG("CFLAGS_GD", " \
|
||||||
|
/D PHP_GD_EXPORTS=1 \
|
||||||
|
/D HAVE_GD_GET_INTERPOLATION \
|
||||||
|
");
|
||||||
|
if (ICC_TOOLSET) {
|
||||||
|
ADD_FLAG("LDFLAGS_GD", "/nodefaultlib:libcmt");
|
||||||
|
}
|
||||||
|
|
||||||
|
PHP_INSTALL_HEADERS("", "ext/gd ext/gd/libgd");
|
||||||
|
}
|
||||||
@@ -13,7 +13,7 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
// test php version (8.1 ~ 8.4 available, multiple for matrix)
|
// test php version (8.1 ~ 8.4 available, multiple for matrix)
|
||||||
$test_php_version = [
|
$test_php_version = [
|
||||||
// '8.1',
|
'8.1',
|
||||||
// '8.2',
|
// '8.2',
|
||||||
// '8.3',
|
// '8.3',
|
||||||
'8.4',
|
'8.4',
|
||||||
@@ -23,19 +23,19 @@ $test_php_version = [
|
|||||||
|
|
||||||
// test os (macos-15-intel, macos-15, ubuntu-latest, windows-latest are available)
|
// test os (macos-15-intel, macos-15, ubuntu-latest, windows-latest are available)
|
||||||
$test_os = [
|
$test_os = [
|
||||||
'macos-15-intel', // bin/spc for x86_64
|
// 'macos-15-intel', // bin/spc for x86_64
|
||||||
'macos-15', // bin/spc for arm64
|
// 'macos-15', // bin/spc for arm64
|
||||||
// 'ubuntu-latest', // bin/spc-alpine-docker for x86_64
|
// 'ubuntu-latest', // bin/spc-alpine-docker for x86_64
|
||||||
'ubuntu-22.04', // bin/spc-gnu-docker for x86_64
|
// 'ubuntu-22.04', // bin/spc-gnu-docker for x86_64
|
||||||
'ubuntu-24.04', // bin/spc for x86_64
|
// 'ubuntu-24.04', // bin/spc for x86_64
|
||||||
'ubuntu-22.04-arm', // bin/spc-gnu-docker for arm64
|
// 'ubuntu-22.04-arm', // bin/spc-gnu-docker for arm64
|
||||||
'ubuntu-24.04-arm', // bin/spc for arm64
|
// 'ubuntu-24.04-arm', // bin/spc for arm64
|
||||||
// 'windows-2022', // .\bin\spc.ps1
|
// 'windows-2022', // .\bin\spc.ps1
|
||||||
// 'windows-2025',
|
'windows-2025',
|
||||||
];
|
];
|
||||||
|
|
||||||
// whether enable thread safe
|
// whether enable thread safe
|
||||||
$zts = false;
|
$zts = true;
|
||||||
|
|
||||||
$no_strip = false;
|
$no_strip = false;
|
||||||
|
|
||||||
@@ -50,8 +50,8 @@ $prefer_pre_built = false;
|
|||||||
|
|
||||||
// If you want to test your added extensions and libs, add below (comma separated, example `bcmath,openssl`).
|
// If you want to test your added extensions and libs, add below (comma separated, example `bcmath,openssl`).
|
||||||
$extensions = match (PHP_OS_FAMILY) {
|
$extensions = match (PHP_OS_FAMILY) {
|
||||||
'Linux', 'Darwin' => 'imagick',
|
'Linux', 'Darwin' => 'pgsql',
|
||||||
'Windows' => 'com_dotnet',
|
'Windows' => 'gd,zlib,mbstring,filter',
|
||||||
};
|
};
|
||||||
|
|
||||||
// If you want to test shared extensions, add them below (comma separated, example `bcmath,openssl`).
|
// If you want to test shared extensions, add them below (comma separated, example `bcmath,openssl`).
|
||||||
@@ -89,7 +89,7 @@ function _getCombination(string $type = 'common'): string
|
|||||||
'common' => 'bcmath,bz2,calendar,ctype,curl,dom,exif,fileinfo,filter,ftp,gd,gmp,iconv,xml,mbstring,mbregex,' .
|
'common' => 'bcmath,bz2,calendar,ctype,curl,dom,exif,fileinfo,filter,ftp,gd,gmp,iconv,xml,mbstring,mbregex,' .
|
||||||
'mysqlnd,openssl,pcntl,pdo,pdo_mysql,pdo_sqlite,phar,posix,redis,session,simplexml,soap,sockets,' .
|
'mysqlnd,openssl,pcntl,pdo,pdo_mysql,pdo_sqlite,phar,posix,redis,session,simplexml,soap,sockets,' .
|
||||||
'sqlite3,tokenizer,xmlwriter,xmlreader,zlib,zip',
|
'sqlite3,tokenizer,xmlwriter,xmlreader,zlib,zip',
|
||||||
'bulk' => 'apcu,bcmath,bz2,calendar,ctype,curl,dba,dom,event,exif,fileinfo,filter,ftp,gd,gmp,iconv,imagick,' .
|
'bulk' => 'apcu,bcmath,bz2,calendar,ctype,curl,dba,dom,event,exif,fileinfo,filter,ftp,gd,gmp,iconv,imagick,imap,' .
|
||||||
'intl,mbregex,mbstring,mysqli,mysqlnd,opcache,openssl,pcntl,pdo,pdo_mysql,pdo_pgsql,pdo_sqlite,pgsql,phar,' .
|
'intl,mbregex,mbstring,mysqli,mysqlnd,opcache,openssl,pcntl,pdo,pdo_mysql,pdo_pgsql,pdo_sqlite,pgsql,phar,' .
|
||||||
'posix,protobuf,readline,redis,session,shmop,simplexml,soap,sockets,sodium,sqlite3,swoole,sysvmsg,sysvsem,' .
|
'posix,protobuf,readline,redis,session,shmop,simplexml,soap,sockets,sodium,sqlite3,swoole,sysvmsg,sysvsem,' .
|
||||||
'sysvshm,tokenizer,xml,xmlreader,xmlwriter,xsl,zip,zlib',
|
'sysvshm,tokenizer,xml,xmlreader,xmlwriter,xsl,zip,zlib',
|
||||||
|
|||||||
Reference in New Issue
Block a user