diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 00000000..6e2f8d90
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,24 @@
+# Force LF line endings for all text files.
+# Prevents git from auto-converting LF -> CRLF on Windows checkouts.
+* text=auto eol=lf
+
+# Explicit binary files — git won't touch line endings for these
+*.phar binary
+*.png binary
+*.jpg binary
+*.jpeg binary
+*.gif binary
+*.ico binary
+*.zip binary
+*.gz binary
+*.tgz binary
+*.txz binary
+*.xz binary
+*.bz2 binary
+*.7z binary
+*.exe binary
+*.dll binary
+*.sfx binary
+*.so binary
+*.a binary
+*.o binary
diff --git a/.github/workflows/vitepress-deploy.yml b/.github/workflows/vitepress-deploy.yml
index 515cf1d6..86b633b4 100644
--- a/.github/workflows/vitepress-deploy.yml
+++ b/.github/workflows/vitepress-deploy.yml
@@ -1,68 +1,68 @@
-name: Docs build test and auto deploy
-on:
- pull_request:
- branches: [ "v3" ]
- types: [ opened, synchronize, reopened ]
- paths:
- - 'config/**.yml'
- - 'docs/**'
- - 'package.json'
- - 'yarn.lock'
- - '.github/workflows/vitepress-deploy.yml'
- push:
- branches: [ "v3" ]
- paths:
- - 'config/**.yml'
- - 'docs/**'
- - 'package.json'
- - 'yarn.lock'
- - '.github/workflows/vitepress-deploy.yml'
-
-jobs:
- build:
- name: Deploy docs
- runs-on: ubuntu-latest
- if: github.repository == 'crazywhalecc/static-php-cli'
- steps:
- - name: Checkout
- uses: actions/checkout@v4
-
- - uses: actions/setup-node@v3
-
- - run: npm install
-
- - name: "Install PHP for official runners"
- uses: shivammathur/setup-php@v2
- with:
- coverage: none
- tools: composer:v2
- php-version: 8.4
- ini-values: memory_limit=-1
- extensions: curl, openssl, mbstring
-
- - name: "Get Composer Cache Directory"
- id: composer-cache
- run: |
- echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
-
- - name: "Cache Composer dependencies"
- uses: "actions/cache@v4"
- with:
- path: "${{ steps.composer-cache.outputs.dir }}"
- key: "php-8.2-locked-composer-${{ hashFiles('**/composer.lock') }}"
- restore-keys: |
- php-8.2-locked-composer
-
- - name: "Install Locked Dependencies"
- run: "composer install --no-interaction --no-progress"
-
- - name: Build
- run: npm run docs:build
-
- # Deploy to GitHub Pages only when the workflow is triggered by a push to the v3 branch
- - name: Deploy to GitHub Pages
- uses: peaceiris/actions-gh-pages@v3
- if: github.event_name == 'push' && github.ref == 'refs/heads/v3'
- with:
- github_token: ${{ secrets.GITHUB_TOKEN }}
- publish_dir: docs/.vitepress/dist
+name: Docs build test and auto deploy
+on:
+ pull_request:
+ branches: [ "v3" ]
+ types: [ opened, synchronize, reopened ]
+ paths:
+ - 'config/**.yml'
+ - 'docs/**'
+ - 'package.json'
+ - 'yarn.lock'
+ - '.github/workflows/vitepress-deploy.yml'
+ push:
+ branches: [ "v3" ]
+ paths:
+ - 'config/**.yml'
+ - 'docs/**'
+ - 'package.json'
+ - 'yarn.lock'
+ - '.github/workflows/vitepress-deploy.yml'
+
+jobs:
+ build:
+ name: Deploy docs
+ runs-on: ubuntu-latest
+ if: github.repository == 'crazywhalecc/static-php-cli'
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - uses: actions/setup-node@v3
+
+ - run: npm install
+
+ - name: "Install PHP for official runners"
+ uses: shivammathur/setup-php@v2
+ with:
+ coverage: none
+ tools: composer:v2
+ php-version: 8.4
+ ini-values: memory_limit=-1
+ extensions: curl, openssl, mbstring
+
+ - name: "Get Composer Cache Directory"
+ id: composer-cache
+ run: |
+ echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
+
+ - name: "Cache Composer dependencies"
+ uses: "actions/cache@v4"
+ with:
+ path: "${{ steps.composer-cache.outputs.dir }}"
+ key: "php-8.2-locked-composer-${{ hashFiles('**/composer.lock') }}"
+ restore-keys: |
+ php-8.2-locked-composer
+
+ - name: "Install Locked Dependencies"
+ run: "composer install --no-interaction --no-progress"
+
+ - name: Build
+ run: npm run docs:build
+
+ # Deploy to GitHub Pages only when the workflow is triggered by a push to the v3 branch
+ - name: Deploy to GitHub Pages
+ uses: peaceiris/actions-gh-pages@v3
+ if: github.event_name == 'push' && github.ref == 'refs/heads/v3'
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ publish_dir: docs/.vitepress/dist
diff --git a/README-zh.md b/README-zh.md
index 3abe0a69..7b01ce3d 100755
--- a/README-zh.md
+++ b/README-zh.md
@@ -1,156 +1,156 @@
-# StaticPHP
-
-[](README-zh.md)
-[](README.md)
-[](https://github.com/crazywhalecc/static-php-cli/releases)
-[](https://github.com/crazywhalecc/static-php-cli/actions/workflows/tests.yml)
-[](https://github.com/crazywhalecc/static-php-cli/blob/main/LICENSE)
-[](https://discord.gg/xf6Rd4pEAk)
-
-**StaticPHP** 是一个强大的工具,用于构建可移植的可执行文件,包括 PHP、扩展等。
-
-> [!IMPORTANT]
-> 我们正准备发布 **v3** 版本,届时项目名称将从 **static-php-cli** 更改为 **StaticPHP**。
-> 此分支对应 v3 版本。v2 版本请查看 [v2 分支](https://github.com/crazywhalecc/static-php-cli/tree/main)。
-> 请更新您的参考资料,并关注正式版发布。
-
-## 特性
-
-- :elephant: 支持多个 PHP 版本 - PHP 8.1, 8.2, 8.3, 8.4, 8.5
-- :handbag: 构建零依赖的单文件 PHP 可执行程序
-- :hamburger: 构建 **[phpmicro](https://github.com/static-php/phpmicro)** 自解压可执行文件(将 PHP 二进制和源码合并为单个文件)
-- :pill: 自动构建环境检查器,支持自动修复
-- :zap: 支持 `Linux`、`macOS`、`Windows`
-- :wrench: 通过 vendor 模式和自定义注册表实现便捷扩展
-- :books: 智能依赖管理
-- 📦 自包含 `spc` 可执行文件,便于自安装
-- :fire: 支持 100+ 热门 [PHP 扩展](https://static-php.dev/en/guide/extensions.html)
-- :floppy_disk: 支持 UPX 压缩(二进制体积可缩小 30-50%)
-
-**单文件独立 php-cli:**
-
-
-
-**使用 phpmicro 将 PHP 代码与 PHP 解释器结合:**
-
-
-
-## 快速开始
-
-### 1. 下载 spc 二进制
-
-```bash
-# For Linux x86_64
-curl -fsSL -o spc https://dl.static-php.dev/v3/spc-bin/nightly/spc-linux-x86_64
-# For Linux aarch64
-curl -fsSL -o spc https://dl.static-php.dev/v3/spc-bin/nightly/spc-linux-aarch64
-# macOS x86_64 (Intel)
-curl -fsSL -o spc https://dl.static-php.dev/v3/spc-bin/nightly/spc-macos-x86_64
-# macOS aarch64 (Apple)
-curl -fsSL -o spc https://dl.static-php.dev/v3/spc-bin/nightly/spc-macos-aarch64
-# Windows (x86_64, win10 build 17063 or later, please install VS2022 first)
-curl.exe -fsSL -o spc.exe https://dl.static-php.dev/v3/spc-bin/nightly/spc-windows-x64.exe
-```
-
-对于 macOS 和 Linux,请先添加可执行权限:
-
-```bash
-chmod +x ./spc
-```
-
-### 2. 构建静态 PHP
-
-首先,创建 `craft.yml` 文件,并从 [扩展列表](https://static-php.dev/en/guide/extensions.html) 或 [命令生成器](https://static-php.dev/en/guide/cli-generator.html) 指定要包含的扩展:
-
-```yml
-# PHP version support: 8.1, 8.2, 8.3, 8.4, 8.5
-php-version: 8.5
-# Put your extension list here
-extensions: "apcu,bcmath,calendar,ctype,curl,dba,dom,exif,fileinfo,filter,gd,iconv,mbregex,mbstring,mysqli,mysqlnd,opcache,openssl,pcntl,pdo,pdo_mysql,pdo_sqlite,phar,posix,readline,redis,session,simplexml,sockets,sodium,sqlite3,tokenizer,xml,xmlreader,xmlwriter,xsl,zip,zlib"
-sapi:
- - cli
- - micro
-download-options:
- parallel: 10
-```
-
-运行命令:
-
-```bash
-./spc craft
-
-# 输出完整控制台日志
-./spc craft -vvv
-```
-
-### 3. 静态 PHP 使用
-
-现在你可以将 StaticPHP 构建的二进制复制到另一台机器并在无依赖环境下运行:
-
-```
-# php-cli
-buildroot/bin/php -v
-
-# phpmicro
-echo ' a.php
-./spc micro:combine a.php -O my-app
-./my-app
-```
-
-## 文档
-
-当前 README 包含基础用法。有关 StaticPHP 的完整功能集,
-请访问 。
-
-## 直接下载
-
-如果你暂时不想构建,或只想先测试,可以从 [Actions](https://github.com/static-php/static-php-cli-hosted/actions/workflows/build-php-bulk.yml) 下载示例预编译产物,或从自托管服务器下载。
-
-我们为每个 PHP 版本提供 2 种扩展集合:
-
-- **gigantic**:尽可能包含更多扩展,二进制大小约 100-150MB。
-- **base**:仅包含 StaticPHP 自身使用的少量扩展,二进制大小约 10MB。
-
-> WIP
-
-### 在线构建(使用 GitHub Actions)
-
-当上方直接下载的二进制无法满足你的需求时,
-你可以使用 GitHub Actions 轻松构建静态编译的 PHP,
-并同时自定义要编译的扩展列表。
-
-1. Fork 此仓库。
-2. 进入项目的 Actions 并选择 `CI`。
-3. 选择 `Run workflow`,填写你要编译的 PHP 版本、目标类型和扩展列表。(扩展用逗号分隔,例如 `bcmath,curl,mbstring`)
-4. 等待工作流执行完成后,进入对应运行记录并下载 `Artifacts`。
-
-如果你启用 `debug`,构建时将输出所有日志,包括编译日志,便于排查问题。
-
-> 我们也计划在未来提供可复用的 GitHub Actions 工作流,
-> 这样你无需 fork 本项目,也能在自己的仓库中轻松构建 static PHP。
-
-## 贡献
-
-如果你需要的扩展缺失,可以创建 issue。
-如果你熟悉本项目,也欢迎发起 pull request。
-
-如果你想贡献文档,请直接编辑 `docs/`。
-
-## 赞助本项目
-
-你可以通过 [GitHub Sponsor](https://github.com/crazywhalecc) 赞助我或我的项目。你捐赠的一部分将用于维护 **static-php.dev** 服务器。
-
-**特别感谢以下赞助商:**
-
-
-
-
-
-## 开源许可证
-
-本项目本身采用 MIT 许可证。
-一些新添加的扩展和依赖可能来自其他项目。
-这些源码文件头部也可能包含额外的 LICENSE 和 AUTHOR 信息。
-
-请在编译后使用 `bin/spc dump-license` 命令导出项目中使用的开源许可证,
-并遵守对应项目的 LICENSE。
+# StaticPHP
+
+[](README-zh.md)
+[](README.md)
+[](https://github.com/crazywhalecc/static-php-cli/releases)
+[](https://github.com/crazywhalecc/static-php-cli/actions/workflows/tests.yml)
+[](https://github.com/crazywhalecc/static-php-cli/blob/main/LICENSE)
+[](https://discord.gg/xf6Rd4pEAk)
+
+**StaticPHP** 是一个强大的工具,用于构建可移植的可执行文件,包括 PHP、扩展等。
+
+> [!IMPORTANT]
+> 我们正准备发布 **v3** 版本,届时项目名称将从 **static-php-cli** 更改为 **StaticPHP**。
+> 此分支对应 v3 版本。v2 版本请查看 [v2 分支](https://github.com/crazywhalecc/static-php-cli/tree/main)。
+> 请更新您的参考资料,并关注正式版发布。
+
+## 特性
+
+- :elephant: 支持多个 PHP 版本 - PHP 8.1, 8.2, 8.3, 8.4, 8.5
+- :handbag: 构建零依赖的单文件 PHP 可执行程序
+- :hamburger: 构建 **[phpmicro](https://github.com/static-php/phpmicro)** 自解压可执行文件(将 PHP 二进制和源码合并为单个文件)
+- :pill: 自动构建环境检查器,支持自动修复
+- :zap: 支持 `Linux`、`macOS`、`Windows`
+- :wrench: 通过 vendor 模式和自定义注册表实现便捷扩展
+- :books: 智能依赖管理
+- 📦 自包含 `spc` 可执行文件,便于自安装
+- :fire: 支持 100+ 热门 [PHP 扩展](https://static-php.dev/en/guide/extensions.html)
+- :floppy_disk: 支持 UPX 压缩(二进制体积可缩小 30-50%)
+
+**单文件独立 php-cli:**
+
+
+
+**使用 phpmicro 将 PHP 代码与 PHP 解释器结合:**
+
+
+
+## 快速开始
+
+### 1. 下载 spc 二进制
+
+```bash
+# For Linux x86_64
+curl -fsSL -o spc https://dl.static-php.dev/v3/spc-bin/nightly/spc-linux-x86_64
+# For Linux aarch64
+curl -fsSL -o spc https://dl.static-php.dev/v3/spc-bin/nightly/spc-linux-aarch64
+# macOS x86_64 (Intel)
+curl -fsSL -o spc https://dl.static-php.dev/v3/spc-bin/nightly/spc-macos-x86_64
+# macOS aarch64 (Apple)
+curl -fsSL -o spc https://dl.static-php.dev/v3/spc-bin/nightly/spc-macos-aarch64
+# Windows (x86_64, win10 build 17063 or later, please install VS2022 first)
+curl.exe -fsSL -o spc.exe https://dl.static-php.dev/v3/spc-bin/nightly/spc-windows-x64.exe
+```
+
+对于 macOS 和 Linux,请先添加可执行权限:
+
+```bash
+chmod +x ./spc
+```
+
+### 2. 构建静态 PHP
+
+首先,创建 `craft.yml` 文件,并从 [扩展列表](https://static-php.dev/en/guide/extensions.html) 或 [命令生成器](https://static-php.dev/en/guide/cli-generator.html) 指定要包含的扩展:
+
+```yml
+# PHP version support: 8.1, 8.2, 8.3, 8.4, 8.5
+php-version: 8.5
+# Put your extension list here
+extensions: "apcu,bcmath,calendar,ctype,curl,dba,dom,exif,fileinfo,filter,gd,iconv,mbregex,mbstring,mysqli,mysqlnd,opcache,openssl,pcntl,pdo,pdo_mysql,pdo_sqlite,phar,posix,readline,redis,session,simplexml,sockets,sodium,sqlite3,tokenizer,xml,xmlreader,xmlwriter,xsl,zip,zlib"
+sapi:
+ - cli
+ - micro
+download-options:
+ parallel: 10
+```
+
+运行命令:
+
+```bash
+./spc craft
+
+# 输出完整控制台日志
+./spc craft -vvv
+```
+
+### 3. 静态 PHP 使用
+
+现在你可以将 StaticPHP 构建的二进制复制到另一台机器并在无依赖环境下运行:
+
+```
+# php-cli
+buildroot/bin/php -v
+
+# phpmicro
+echo ' a.php
+./spc micro:combine a.php -O my-app
+./my-app
+```
+
+## 文档
+
+当前 README 包含基础用法。有关 StaticPHP 的完整功能集,
+请访问 。
+
+## 直接下载
+
+如果你暂时不想构建,或只想先测试,可以从 [Actions](https://github.com/static-php/static-php-cli-hosted/actions/workflows/build-php-bulk.yml) 下载示例预编译产物,或从自托管服务器下载。
+
+我们为每个 PHP 版本提供 2 种扩展集合:
+
+- **gigantic**:尽可能包含更多扩展,二进制大小约 100-150MB。
+- **base**:仅包含 StaticPHP 自身使用的少量扩展,二进制大小约 10MB。
+
+> WIP
+
+### 在线构建(使用 GitHub Actions)
+
+当上方直接下载的二进制无法满足你的需求时,
+你可以使用 GitHub Actions 轻松构建静态编译的 PHP,
+并同时自定义要编译的扩展列表。
+
+1. Fork 此仓库。
+2. 进入项目的 Actions 并选择 `CI`。
+3. 选择 `Run workflow`,填写你要编译的 PHP 版本、目标类型和扩展列表。(扩展用逗号分隔,例如 `bcmath,curl,mbstring`)
+4. 等待工作流执行完成后,进入对应运行记录并下载 `Artifacts`。
+
+如果你启用 `debug`,构建时将输出所有日志,包括编译日志,便于排查问题。
+
+> 我们也计划在未来提供可复用的 GitHub Actions 工作流,
+> 这样你无需 fork 本项目,也能在自己的仓库中轻松构建 static PHP。
+
+## 贡献
+
+如果你需要的扩展缺失,可以创建 issue。
+如果你熟悉本项目,也欢迎发起 pull request。
+
+如果你想贡献文档,请直接编辑 `docs/`。
+
+## 赞助本项目
+
+你可以通过 [GitHub Sponsor](https://github.com/crazywhalecc) 赞助我或我的项目。你捐赠的一部分将用于维护 **static-php.dev** 服务器。
+
+**特别感谢以下赞助商:**
+
+
+
+
+
+## 开源许可证
+
+本项目本身采用 MIT 许可证。
+一些新添加的扩展和依赖可能来自其他项目。
+这些源码文件头部也可能包含额外的 LICENSE 和 AUTHOR 信息。
+
+请在编译后使用 `bin/spc dump-license` 命令导出项目中使用的开源许可证,
+并遵守对应项目的 LICENSE。
diff --git a/bin/setup-runtime.ps1 b/bin/setup-runtime.ps1
index 4b3a25b7..44e0bb8f 100644
--- a/bin/setup-runtime.ps1
+++ b/bin/setup-runtime.ps1
@@ -1,116 +1,116 @@
-param (
- [string] ${action}
-)
-
-function AddToPath {
- param (
- [string]$pathToAdd
- )
-
- $currentPath = [System.Environment]::GetEnvironmentVariable('Path', 'User')
-
- if ($currentPath -notlike "*$pathToAdd*") {
- $newPath = $currentPath + ";$pathToAdd"
- [System.Environment]::SetEnvironmentVariable('Path', $newPath, 'User')
- Write-Host "Added '$pathToAdd' to Path."
- Write-Host "To remove path, use: " -NoNewline
- Write-Host "bin/setup-runtime remove-path" -ForegroundColor Cyan
- } else {
- Write-Host "Path already exists."
- }
-}
-
-function RemoveFromPath {
- param (
- [string]$pathToRemove
- )
-
- $currentPath = [System.Environment]::GetEnvironmentVariable('Path', 'User')
-
- if ($currentPath -like "*$pathToRemove*") {
- $newPath = $currentPath -replace [regex]::Escape(';' + $pathToRemove), ''
- [System.Environment]::SetEnvironmentVariable('Path', $newPath, 'User')
- Write-Host "Removed Path '$pathToRemove'"
- } else {
- Write-Host "Path '$pathToRemove' not in Path"
- }
-}
-
-# working dir
-$WorkingDir = (Split-Path -Parent (Split-Path -Parent $MyInvocation.MyCommand.Definition))
-
-if ($action -eq 'add-path') {
- AddToPath ($WorkingDir + '\runtime')
- exit 0
-} elseif ($action -eq 'remove-path') {
- RemoveFromPath ($WorkingDir + '\runtime')
- exit 0
-} elseif (-not($action -eq '')) {
- Write-Host ("Invalid action: " + $action) -ForegroundColor Red
- exit 1
-}
-
-# get php 8.1 specific version
-
-# php windows download
-$PHPRuntimeUrl = "https://windows.php.net/downloads/releases/archives/php-8.4.4-nts-Win32-vs17-x64.zip"
-Write-Host "Downloading PHP from: " -NoNewline
-Write-Host $PHPRuntimeUrl -ForegroundColor Cyan
-$ComposerUrl = "https://getcomposer.org/download/latest-stable/composer.phar"
-
-# create dir
-New-Item -Path "downloads" -ItemType Directory -Force | Out-Null
-
-# download php
-if (-not(Test-Path "downloads\php.zip"))
-{
- Write-Host "Downloading PHP ..."
- Invoke-WebRequest $PHPRuntimeUrl -OutFile "downloads\php.zip"
-}
-
-# extract php
-New-Item -Path "runtime" -ItemType Directory -Force | Out-Null
-Write-Host "Extracting php.zip ..."
-Expand-Archive -Path "downloads/php.zip" -DestinationPath "runtime" -Force
-# make php.ini
-Move-Item -Path "runtime\php.ini-production" -Destination "runtime\php.ini" -Force
-$OriginINI = Get-Content -Path "runtime\php.ini" -Raw
-$OriginINI = $OriginINI -replace ';extension=openssl', 'extension=openssl'
-$OriginINI = $OriginINI -replace ';extension=curl', 'extension=curl'
-$OriginINI = $OriginINI -replace ';extension=mbstring', 'extension=mbstring'
-$OriginINI = $OriginINI -replace ';extension=sodium', 'extension=sodium'
-$OriginINI = $OriginINI -replace ';extension_dir = "./"', ('extension_dir = "' + (Split-Path -Parent $MyInvocation.MyCommand.Definition) + '\..\runtime\ext"')
-$OriginINI | Set-Content -Path "runtime\php.ini"
-
-# download composer
-if (-not(Test-Path "runtime\composer.phar"))
-{
- Write-Host "Downloading composer ..."
- Invoke-WebRequest $ComposerUrl -OutFile "downloads\composer.phar"
- Move-Item -Path "downloads\composer.phar" -Destination "runtime\composer.phar" -Force
-}
-
-# create runtime\composer.ps1
-$ComposerContent = '
-$WorkingDir = (Split-Path -Parent $MyInvocation.MyCommand.Definition)
-& ($WorkingDir + "\php.exe") (Join-Path $WorkingDir "\composer.phar") @args
-'
-$ComposerContent | Set-Content -Path 'runtime\composer.ps1' -Encoding UTF8
-
-Write-Host "Successfully downloaded PHP and Composer !" -ForegroundColor Green
-Write-Host "Use static-php-cli: " -NoNewline
-Write-Host "bin/spc" -ForegroundColor Cyan
-Write-Host "Use php: " -NoNewline
-Write-Host "runtime/php" -ForegroundColor Cyan
-Write-Host "Use composer: " -NoNewline
-Write-Host "runtime/composer" -ForegroundColor Cyan
-Write-Host ""
-Write-Host "Don't forget installing composer dependencies '" -NoNewline
-Write-Host "runtime/composer install" -ForegroundColor Cyan -NoNewline
-Write-Host "' before using static-php-cli !"
-Write-Host ""
-Write-Host "If you want to use this PHP for quality tools (like phpstan, php-cs-fixer) or other project,"
-Write-Host "or use PHP, Composer as system executable,"
-Write-Host "use '" -NoNewline
-Write-Host "bin/setup-runtime add-path" -ForegroundColor Cyan -NoNewline
-Write-Host "' to add runtime dir in Path."
+param (
+ [string] ${action}
+)
+
+function AddToPath {
+ param (
+ [string]$pathToAdd
+ )
+
+ $currentPath = [System.Environment]::GetEnvironmentVariable('Path', 'User')
+
+ if ($currentPath -notlike "*$pathToAdd*") {
+ $newPath = $currentPath + ";$pathToAdd"
+ [System.Environment]::SetEnvironmentVariable('Path', $newPath, 'User')
+ Write-Host "Added '$pathToAdd' to Path."
+ Write-Host "To remove path, use: " -NoNewline
+ Write-Host "bin/setup-runtime remove-path" -ForegroundColor Cyan
+ } else {
+ Write-Host "Path already exists."
+ }
+}
+
+function RemoveFromPath {
+ param (
+ [string]$pathToRemove
+ )
+
+ $currentPath = [System.Environment]::GetEnvironmentVariable('Path', 'User')
+
+ if ($currentPath -like "*$pathToRemove*") {
+ $newPath = $currentPath -replace [regex]::Escape(';' + $pathToRemove), ''
+ [System.Environment]::SetEnvironmentVariable('Path', $newPath, 'User')
+ Write-Host "Removed Path '$pathToRemove'"
+ } else {
+ Write-Host "Path '$pathToRemove' not in Path"
+ }
+}
+
+# working dir
+$WorkingDir = (Split-Path -Parent (Split-Path -Parent $MyInvocation.MyCommand.Definition))
+
+if ($action -eq 'add-path') {
+ AddToPath ($WorkingDir + '\runtime')
+ exit 0
+} elseif ($action -eq 'remove-path') {
+ RemoveFromPath ($WorkingDir + '\runtime')
+ exit 0
+} elseif (-not($action -eq '')) {
+ Write-Host ("Invalid action: " + $action) -ForegroundColor Red
+ exit 1
+}
+
+# get php 8.1 specific version
+
+# php windows download
+$PHPRuntimeUrl = "https://windows.php.net/downloads/releases/archives/php-8.4.4-nts-Win32-vs17-x64.zip"
+Write-Host "Downloading PHP from: " -NoNewline
+Write-Host $PHPRuntimeUrl -ForegroundColor Cyan
+$ComposerUrl = "https://getcomposer.org/download/latest-stable/composer.phar"
+
+# create dir
+New-Item -Path "downloads" -ItemType Directory -Force | Out-Null
+
+# download php
+if (-not(Test-Path "downloads\php.zip"))
+{
+ Write-Host "Downloading PHP ..."
+ Invoke-WebRequest $PHPRuntimeUrl -OutFile "downloads\php.zip"
+}
+
+# extract php
+New-Item -Path "runtime" -ItemType Directory -Force | Out-Null
+Write-Host "Extracting php.zip ..."
+Expand-Archive -Path "downloads/php.zip" -DestinationPath "runtime" -Force
+# make php.ini
+Move-Item -Path "runtime\php.ini-production" -Destination "runtime\php.ini" -Force
+$OriginINI = Get-Content -Path "runtime\php.ini" -Raw
+$OriginINI = $OriginINI -replace ';extension=openssl', 'extension=openssl'
+$OriginINI = $OriginINI -replace ';extension=curl', 'extension=curl'
+$OriginINI = $OriginINI -replace ';extension=mbstring', 'extension=mbstring'
+$OriginINI = $OriginINI -replace ';extension=sodium', 'extension=sodium'
+$OriginINI = $OriginINI -replace ';extension_dir = "./"', ('extension_dir = "' + (Split-Path -Parent $MyInvocation.MyCommand.Definition) + '\..\runtime\ext"')
+$OriginINI | Set-Content -Path "runtime\php.ini"
+
+# download composer
+if (-not(Test-Path "runtime\composer.phar"))
+{
+ Write-Host "Downloading composer ..."
+ Invoke-WebRequest $ComposerUrl -OutFile "downloads\composer.phar"
+ Move-Item -Path "downloads\composer.phar" -Destination "runtime\composer.phar" -Force
+}
+
+# create runtime\composer.ps1
+$ComposerContent = '
+$WorkingDir = (Split-Path -Parent $MyInvocation.MyCommand.Definition)
+& ($WorkingDir + "\php.exe") (Join-Path $WorkingDir "\composer.phar") @args
+'
+$ComposerContent | Set-Content -Path 'runtime\composer.ps1' -Encoding UTF8
+
+Write-Host "Successfully downloaded PHP and Composer !" -ForegroundColor Green
+Write-Host "Use static-php-cli: " -NoNewline
+Write-Host "bin/spc" -ForegroundColor Cyan
+Write-Host "Use php: " -NoNewline
+Write-Host "runtime/php" -ForegroundColor Cyan
+Write-Host "Use composer: " -NoNewline
+Write-Host "runtime/composer" -ForegroundColor Cyan
+Write-Host ""
+Write-Host "Don't forget installing composer dependencies '" -NoNewline
+Write-Host "runtime/composer install" -ForegroundColor Cyan -NoNewline
+Write-Host "' before using static-php-cli !"
+Write-Host ""
+Write-Host "If you want to use this PHP for quality tools (like phpstan, php-cs-fixer) or other project,"
+Write-Host "or use PHP, Composer as system executable,"
+Write-Host "use '" -NoNewline
+Write-Host "bin/setup-runtime add-path" -ForegroundColor Cyan -NoNewline
+Write-Host "' to add runtime dir in Path."
diff --git a/bin/spc-debug.ps1 b/bin/spc-debug.ps1
index 015dae9c..4ff91d17 100644
--- a/bin/spc-debug.ps1
+++ b/bin/spc-debug.ps1
@@ -1,12 +1,12 @@
-$PHP_Exec = ".\runtime\php.exe"
-
-if (-not(Test-Path $PHP_Exec)) {
- $PHP_Exec = Get-Command php.exe -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Definition
- if (-not $PHP_Exec) {
- Write-Host "Error: PHP not found, you need to install PHP on your system or use 'bin/setup-runtime'." -ForegroundColor Red
- exit 1
- }
-}
-
-& "$PHP_Exec" -d xdebug.mode=debug -d xdebug.client_host=127.0.0.1 -d xdebug.client_port=9003 -d xdebug.start_with_request=yes ("bin/spc") @args
-exit $LASTEXITCODE
+$PHP_Exec = ".\runtime\php.exe"
+
+if (-not(Test-Path $PHP_Exec)) {
+ $PHP_Exec = Get-Command php.exe -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Definition
+ if (-not $PHP_Exec) {
+ Write-Host "Error: PHP not found, you need to install PHP on your system or use 'bin/setup-runtime'." -ForegroundColor Red
+ exit 1
+ }
+}
+
+& "$PHP_Exec" -d xdebug.mode=debug -d xdebug.client_host=127.0.0.1 -d xdebug.client_port=9003 -d xdebug.start_with_request=yes ("bin/spc") @args
+exit $LASTEXITCODE
diff --git a/bin/spc.ps1 b/bin/spc.ps1
index 2efd09ea..cf7769f9 100644
--- a/bin/spc.ps1
+++ b/bin/spc.ps1
@@ -1,12 +1,12 @@
-$PHP_Exec = ".\runtime\php.exe"
-
-if (-not(Test-Path $PHP_Exec)) {
- $PHP_Exec = Get-Command php.exe -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Definition
- if (-not $PHP_Exec) {
- Write-Host "Error: PHP not found, you need to install PHP on your system or use 'bin/setup-runtime'." -ForegroundColor Red
- exit 1
- }
-}
-
-& "$PHP_Exec" ("bin/spc") @args
-exit $LASTEXITCODE
+$PHP_Exec = ".\runtime\php.exe"
+
+if (-not(Test-Path $PHP_Exec)) {
+ $PHP_Exec = Get-Command php.exe -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Definition
+ if (-not $PHP_Exec) {
+ Write-Host "Error: PHP not found, you need to install PHP on your system or use 'bin/setup-runtime'." -ForegroundColor Red
+ exit 1
+ }
+}
+
+& "$PHP_Exec" ("bin/spc") @args
+exit $LASTEXITCODE
diff --git a/src/globals/extra/Makefile-sqlite b/src/globals/extra/Makefile-sqlite
index 4bf0cee2..e6d2b699 100644
--- a/src/globals/extra/Makefile-sqlite
+++ b/src/globals/extra/Makefile-sqlite
@@ -1,69 +1,69 @@
-
-CC=cl.exe /nologo
-AR=lib.exe /nologo
-LINK=link.exe /nologo
-
-!IF "" == "$(MACHINE)"
-MACHINE=x64
-!ENDIF
-
-!IF "" == "$(CRT)"
-CRT=vc15
-!ENDIF
-
-!IF "" == "$(PREFIX)"
-PREFIX="$(CRT)-$(MACHINE)"
-!ENDIF
-
-COMMON_CFLAGS=/D SQLITE_THREADSAFE=1 /DSQLITE_ENABLE_FTS3=1 /D SQLITE_ENABLE_FTS4=1 /D SQLITE_ENABLE_FTS5=1 /D SQLITE_ENABLE_JSON1=1 /D SQLITE_ENABLE_COLUMN_METADATA=1 /D SQLITE_CORE=1
-!IF "$(DEBUG)"=="1"
-SQLITE3_STATIC_BASE=libsqlite3_a_debug
-SQLITE3_DLL_BASE=libsqlite3_debug
-SQLITE3_EXE_BASE=sqlite3
-CFLAGS=$(COMMON_CFLAGS) /Zi /MDd /Od /W3
-LDFLAGS=/DEBUG /GUARD:CF /INCREMENTAL:NO
-!ELSE
-SQLITE3_STATIC_BASE=libsqlite3_a
-SQLITE3_DLL_BASE=libsqlite3
-SQLITE3_EXE_BASE=sqlite3
-CFLAGS=$(COMMON_CFLAGS) /Zi /MT /guard:cf /Zc:inline /Qspectre /Ox /W3 /GF /Gw
-LDFLAGS=/GUARD:CF /INCREMENTAL:NO /NXCOMPAT /DYNAMICBASE
-!ENDIF
-
-
-all: $(SQLITE3_STATIC_BASE).lib $(SQLITE3_EXE_BASE).exe $(SQLITE3_DLL_BASE).dll
-
-install: all
- if not exist $(PREFIX)\bin mkdir $(PREFIX)\bin
- if not exist $(PREFIX)\include mkdir $(PREFIX)\include
- if not exist $(PREFIX)\lib mkdir $(PREFIX)\lib
- copy /Y sqlite3.h $(PREFIX)\include
- copy /Y sqlite3ext.h $(PREFIX)\include
- copy /Y $(SQLITE3_STATIC_BASE).lib $(PREFIX)\lib
- copy /Y $(SQLITE3_STATIC_BASE).pdb $(PREFIX)\lib
- copy /Y $(SQLITE3_DLL_BASE).lib $(PREFIX)\lib
- copy /Y $(SQLITE3_DLL_BASE).pdb $(PREFIX)\bin
- copy /Y $(SQLITE3_DLL_BASE).dll $(PREFIX)\bin
- copy /Y $(SQLITE3_EXE_BASE).exe $(PREFIX)\bin
- copy /Y $(SQLITE3_EXE_BASE).pdb $(PREFIX)\bin
-
-install-static: $(SQLITE3_STATIC_BASE).lib
- if not exist $(PREFIX)\include mkdir $(PREFIX)\include
- if not exist $(PREFIX)\lib mkdir $(PREFIX)\lib
- copy /Y sqlite3.h $(PREFIX)\include
- copy /Y sqlite3ext.h $(PREFIX)\include
- copy /Y $(SQLITE3_STATIC_BASE).lib $(PREFIX)\lib
-
-clean:
- del *.obj *.lib *.exe *.pdb *.dll *.exp
-
-$(SQLITE3_STATIC_BASE).lib: sqlite3.c sqlite3.h
- $(CC) $(CFLAGS) /Fd$(SQLITE3_STATIC_BASE).pdb /c sqlite3.c
- $(AR) sqlite3.obj /OUT:$(SQLITE3_STATIC_BASE).lib
-
-$(SQLITE3_EXE_BASE).exe: shell.c sqlite3.c sqlite3.h
- $(CC) $(CFLAGS) shell.c sqlite3.c /Fd$(SQLITE3_EXE_BASE).pdb /Fe$(SQLITE3_EXE_BASE).exe
-
-$(SQLITE3_DLL_BASE).dll: sqlite3.c sqlite3.h
- $(CC) $(CFLAGS) /DSQLITE_API=__declspec(dllexport) /Fd$(SQLITE3_DLL_BASE).pdb /c sqlite3.c
+
+CC=cl.exe /nologo
+AR=lib.exe /nologo
+LINK=link.exe /nologo
+
+!IF "" == "$(MACHINE)"
+MACHINE=x64
+!ENDIF
+
+!IF "" == "$(CRT)"
+CRT=vc15
+!ENDIF
+
+!IF "" == "$(PREFIX)"
+PREFIX="$(CRT)-$(MACHINE)"
+!ENDIF
+
+COMMON_CFLAGS=/D SQLITE_THREADSAFE=1 /DSQLITE_ENABLE_FTS3=1 /D SQLITE_ENABLE_FTS4=1 /D SQLITE_ENABLE_FTS5=1 /D SQLITE_ENABLE_JSON1=1 /D SQLITE_ENABLE_COLUMN_METADATA=1 /D SQLITE_CORE=1
+!IF "$(DEBUG)"=="1"
+SQLITE3_STATIC_BASE=libsqlite3_a_debug
+SQLITE3_DLL_BASE=libsqlite3_debug
+SQLITE3_EXE_BASE=sqlite3
+CFLAGS=$(COMMON_CFLAGS) /Zi /MDd /Od /W3
+LDFLAGS=/DEBUG /GUARD:CF /INCREMENTAL:NO
+!ELSE
+SQLITE3_STATIC_BASE=libsqlite3_a
+SQLITE3_DLL_BASE=libsqlite3
+SQLITE3_EXE_BASE=sqlite3
+CFLAGS=$(COMMON_CFLAGS) /Zi /MT /guard:cf /Zc:inline /Qspectre /Ox /W3 /GF /Gw
+LDFLAGS=/GUARD:CF /INCREMENTAL:NO /NXCOMPAT /DYNAMICBASE
+!ENDIF
+
+
+all: $(SQLITE3_STATIC_BASE).lib $(SQLITE3_EXE_BASE).exe $(SQLITE3_DLL_BASE).dll
+
+install: all
+ if not exist $(PREFIX)\bin mkdir $(PREFIX)\bin
+ if not exist $(PREFIX)\include mkdir $(PREFIX)\include
+ if not exist $(PREFIX)\lib mkdir $(PREFIX)\lib
+ copy /Y sqlite3.h $(PREFIX)\include
+ copy /Y sqlite3ext.h $(PREFIX)\include
+ copy /Y $(SQLITE3_STATIC_BASE).lib $(PREFIX)\lib
+ copy /Y $(SQLITE3_STATIC_BASE).pdb $(PREFIX)\lib
+ copy /Y $(SQLITE3_DLL_BASE).lib $(PREFIX)\lib
+ copy /Y $(SQLITE3_DLL_BASE).pdb $(PREFIX)\bin
+ copy /Y $(SQLITE3_DLL_BASE).dll $(PREFIX)\bin
+ copy /Y $(SQLITE3_EXE_BASE).exe $(PREFIX)\bin
+ copy /Y $(SQLITE3_EXE_BASE).pdb $(PREFIX)\bin
+
+install-static: $(SQLITE3_STATIC_BASE).lib
+ if not exist $(PREFIX)\include mkdir $(PREFIX)\include
+ if not exist $(PREFIX)\lib mkdir $(PREFIX)\lib
+ copy /Y sqlite3.h $(PREFIX)\include
+ copy /Y sqlite3ext.h $(PREFIX)\include
+ copy /Y $(SQLITE3_STATIC_BASE).lib $(PREFIX)\lib
+
+clean:
+ del *.obj *.lib *.exe *.pdb *.dll *.exp
+
+$(SQLITE3_STATIC_BASE).lib: sqlite3.c sqlite3.h
+ $(CC) $(CFLAGS) /Fd$(SQLITE3_STATIC_BASE).pdb /c sqlite3.c
+ $(AR) sqlite3.obj /OUT:$(SQLITE3_STATIC_BASE).lib
+
+$(SQLITE3_EXE_BASE).exe: shell.c sqlite3.c sqlite3.h
+ $(CC) $(CFLAGS) shell.c sqlite3.c /Fd$(SQLITE3_EXE_BASE).pdb /Fe$(SQLITE3_EXE_BASE).exe
+
+$(SQLITE3_DLL_BASE).dll: sqlite3.c sqlite3.h
+ $(CC) $(CFLAGS) /DSQLITE_API=__declspec(dllexport) /Fd$(SQLITE3_DLL_BASE).pdb /c sqlite3.c
$(LINK) /DLL /OUT:$(SQLITE3_DLL_BASE).dll sqlite3.obj
\ No newline at end of file
diff --git a/src/globals/extra/gd_config_80.w32 b/src/globals/extra/gd_config_80.w32
index ea7582b8..528c2113 100644
--- a/src/globals/extra/gd_config_80.w32
+++ b/src/globals/extra/gd_config_80.w32
@@ -1,86 +1,86 @@
-// 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 is not supported on php <= 8.0
-
- 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_pixelate.c gd_rotate.c gd_color_match.c gd_webp.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");
-}
+// 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 is not supported on php <= 8.0
+
+ 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_pixelate.c gd_rotate.c gd_color_match.c gd_webp.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");
+}
diff --git a/src/globals/extra/gd_config_81.w32 b/src/globals/extra/gd_config_81.w32
index 528de319..5f07da8a 100644
--- a/src/globals/extra/gd_config_81.w32
+++ b/src/globals/extra/gd_config_81.w32
@@ -1,94 +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_pixelate.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");
-}
+// 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_pixelate.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");
+}
diff --git a/src/globals/extra/gd_config_85.w32 b/src/globals/extra/gd_config_85.w32
index e980b003..033a3857 100644
--- a/src/globals/extra/gd_config_85.w32
+++ b/src/globals/extra/gd_config_85.w32
@@ -1,94 +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");
-}
+// 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");
+}
diff --git a/src/globals/licenses/postgresql.txt b/src/globals/licenses/postgresql.txt
index 2f33cebb..0a397648 100644
--- a/src/globals/licenses/postgresql.txt
+++ b/src/globals/licenses/postgresql.txt
@@ -1,23 +1,23 @@
-PostgreSQL Database Management System
-(also known as Postgres, formerly known as Postgres95)
-
-Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
-
-Portions Copyright (c) 1994, The Regents of the University of California
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose, without fee, and without a written agreement
-is hereby granted, provided that the above copyright notice and this
-paragraph and the following two paragraphs appear in all copies.
-
-IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
-DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING
-LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
-DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-
-THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
-ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO
-PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+PostgreSQL Database Management System
+(also known as Postgres, formerly known as Postgres95)
+
+Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+
+Portions Copyright (c) 1994, The Regents of the University of California
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose, without fee, and without a written agreement
+is hereby granted, provided that the above copyright notice and this
+paragraph and the following two paragraphs appear in all copies.
+
+IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
+DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING
+LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
+DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO
+PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
diff --git a/tests/StaticPHP/Registry/PackageLoaderTest.php b/tests/StaticPHP/Registry/PackageLoaderTest.php
index d850a334..cb78cd18 100644
--- a/tests/StaticPHP/Registry/PackageLoaderTest.php
+++ b/tests/StaticPHP/Registry/PackageLoaderTest.php
@@ -517,13 +517,13 @@ class PackageLoaderTest extends TestCase
mkdir($psr4Dir, 0755, true);
// Create test class file
- $classContent = '