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 - -[![Chinese readme](https://img.shields.io/badge/README-%E4%B8%AD%E6%96%87%20%F0%9F%87%A8%F0%9F%87%B3-moccasin?style=flat-square)](README-zh.md) -[![English readme](https://img.shields.io/badge/README-English%20%F0%9F%87%AC%F0%9F%87%A7-moccasin?style=flat-square)](README.md) -[![Releases](https://img.shields.io/packagist/v/crazywhalecc/static-php-cli?include_prereleases&label=Release&style=flat-square)](https://github.com/crazywhalecc/static-php-cli/releases) -[![CI](https://img.shields.io/github/actions/workflow/status/crazywhalecc/static-php-cli/tests.yml?branch=main&label=Build%20Test&style=flat-square)](https://github.com/crazywhalecc/static-php-cli/actions/workflows/tests.yml) -[![License](https://img.shields.io/badge/License-MIT-blue.svg?style=flat-square)](https://github.com/crazywhalecc/static-php-cli/blob/main/LICENSE) -[![Discord](https://img.shields.io/discord/nrSRbpMJ?label=Discord&logo=discord&style=flat-square)](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:** - -out1 - -**使用 phpmicro 将 PHP 代码与 PHP 解释器结合:** - -out2 - -## 快速开始 - -### 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** 服务器。 - -**特别感谢以下赞助商:** - -Beyond Code Logo - -NativePHP Logo - -## 开源许可证 - -本项目本身采用 MIT 许可证。 -一些新添加的扩展和依赖可能来自其他项目。 -这些源码文件头部也可能包含额外的 LICENSE 和 AUTHOR 信息。 - -请在编译后使用 `bin/spc dump-license` 命令导出项目中使用的开源许可证, -并遵守对应项目的 LICENSE。 +# StaticPHP + +[![Chinese readme](https://img.shields.io/badge/README-%E4%B8%AD%E6%96%87%20%F0%9F%87%A8%F0%9F%87%B3-moccasin?style=flat-square)](README-zh.md) +[![English readme](https://img.shields.io/badge/README-English%20%F0%9F%87%AC%F0%9F%87%A7-moccasin?style=flat-square)](README.md) +[![Releases](https://img.shields.io/packagist/v/crazywhalecc/static-php-cli?include_prereleases&label=Release&style=flat-square)](https://github.com/crazywhalecc/static-php-cli/releases) +[![CI](https://img.shields.io/github/actions/workflow/status/crazywhalecc/static-php-cli/tests.yml?branch=main&label=Build%20Test&style=flat-square)](https://github.com/crazywhalecc/static-php-cli/actions/workflows/tests.yml) +[![License](https://img.shields.io/badge/License-MIT-blue.svg?style=flat-square)](https://github.com/crazywhalecc/static-php-cli/blob/main/LICENSE) +[![Discord](https://img.shields.io/discord/nrSRbpMJ?label=Discord&logo=discord&style=flat-square)](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:** + +out1 + +**使用 phpmicro 将 PHP 代码与 PHP 解释器结合:** + +out2 + +## 快速开始 + +### 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** 服务器。 + +**特别感谢以下赞助商:** + +Beyond Code Logo + +NativePHP Logo + +## 开源许可证 + +本项目本身采用 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 = '