Compare commits

..

2 Commits
v3 ... ttt

Author SHA1 Message Date
crazywhalecc
a3003d363e ttt 2026-04-02 08:43:31 +08:00
crazywhalecc
b5b4e8f622 ttt 2026-04-02 08:43:26 +08:00
772 changed files with 37654 additions and 14375 deletions

View File

@@ -1,12 +1,17 @@
## What does this PR do? ## What does this PR do?
<!-- Please describe the changes made in this PR here. -->
## Checklist before merging ## Checklist before merging
- If you modified `*.php` or `*.yml`, run them locally to ensure your changes are valid: > If your PR involves the changes mentioned below and completed the action, please tick the corresponding option.
> If a modification is not involved, please skip it directly.
- If you modified `*.php` or `*.json`, run them locally to ensure your changes are valid:
- [ ] `composer cs-fix` - [ ] `composer cs-fix`
- [ ] `composer analyse` - [ ] `composer analyse`
- [ ] `composer test` - [ ] `composer test`
- [ ] `bin/spc dev:lint-config` - [ ] `bin/spc dev:sort-config`
- If it's an extension or dependency update, please ensure the following:
- [ ] Add your test combination to `src/globals/test-extensions.php`.
- [ ] If adding new or fixing bugs, add commit message containing `extension test` or `test extensions` to trigger full test suite.

View File

@@ -276,7 +276,7 @@ jobs:
# Upload debug logs # Upload debug logs
- if: ${{ inputs.debug && failure() }} - if: ${{ inputs.debug && failure() }}
name: "Upload build logs on failure" name: "Upload build logs on failure"
uses: actions/upload-artifact@v7 uses: actions/upload-artifact@v4
with: with:
name: spc-logs-${{ inputs.php-version }}-${{ inputs.os }} name: spc-logs-${{ inputs.php-version }}-${{ inputs.os }}
path: log/*.log path: log/*.log
@@ -284,7 +284,7 @@ jobs:
# Upload cli executable # Upload cli executable
- if: ${{ inputs.build-cli == true }} - if: ${{ inputs.build-cli == true }}
name: "Upload PHP cli SAPI" name: "Upload PHP cli SAPI"
uses: actions/upload-artifact@v7 uses: actions/upload-artifact@v4
with: with:
name: php-cli-${{ inputs.php-version }}-${{ inputs.os }} name: php-cli-${{ inputs.php-version }}-${{ inputs.os }}
path: buildroot/bin/php path: buildroot/bin/php
@@ -292,7 +292,7 @@ jobs:
# Upload micro self-extracted executable # Upload micro self-extracted executable
- if: ${{ inputs.build-micro == true }} - if: ${{ inputs.build-micro == true }}
name: "Upload PHP micro SAPI" name: "Upload PHP micro SAPI"
uses: actions/upload-artifact@v7 uses: actions/upload-artifact@v4
with: with:
name: php-micro-${{ inputs.php-version }}-${{ inputs.os }} name: php-micro-${{ inputs.php-version }}-${{ inputs.os }}
path: buildroot/bin/micro.sfx path: buildroot/bin/micro.sfx
@@ -300,7 +300,7 @@ jobs:
# Upload fpm executable # Upload fpm executable
- if: ${{ inputs.build-fpm == true }} - if: ${{ inputs.build-fpm == true }}
name: "Upload PHP fpm SAPI" name: "Upload PHP fpm SAPI"
uses: actions/upload-artifact@v7 uses: actions/upload-artifact@v4
with: with:
name: php-fpm-${{ inputs.php-version }}-${{ inputs.os }} name: php-fpm-${{ inputs.php-version }}-${{ inputs.os }}
path: buildroot/bin/php-fpm path: buildroot/bin/php-fpm
@@ -308,7 +308,7 @@ jobs:
# Upload frankenphp executable # Upload frankenphp executable
- if: ${{ inputs['build-frankenphp'] == true }} - if: ${{ inputs['build-frankenphp'] == true }}
name: "Upload FrankenPHP SAPI" name: "Upload FrankenPHP SAPI"
uses: actions/upload-artifact@v7 uses: actions/upload-artifact@v4
with: with:
name: php-frankenphp-${{ inputs.php-version }}-${{ inputs.os }} name: php-frankenphp-${{ inputs.php-version }}-${{ inputs.os }}
path: buildroot/bin/frankenphp path: buildroot/bin/frankenphp
@@ -316,17 +316,17 @@ jobs:
# Upload extensions metadata # Upload extensions metadata
- if: ${{ inputs['shared-extensions'] != '' }} - if: ${{ inputs['shared-extensions'] != '' }}
name: "Upload shared extensions" name: "Upload shared extensions"
uses: actions/upload-artifact@v7 uses: actions/upload-artifact@v4
with: with:
name: php-shared-ext-${{ inputs.php-version }}-${{ inputs.os }} name: php-shared-ext-${{ inputs.php-version }}-${{ inputs.os }}
path: | path: |
buildroot/modules/*.so buildroot/modules/*.so
- uses: actions/upload-artifact@v7 - uses: actions/upload-artifact@v4
name: "Upload License Files" name: "Upload License Files"
with: with:
name: license-files-${{ inputs.php-version }}-${{ inputs.os }} name: license-files-${{ inputs.php-version }}-${{ inputs.os }}
path: buildroot/license/ path: buildroot/license/
- uses: actions/upload-artifact@v7 - uses: actions/upload-artifact@v4
name: "Upload Build Metadata" name: "Upload Build Metadata"
with: with:
name: build-meta-${{ inputs.php-version }}-${{ inputs.os }} name: build-meta-${{ inputs.php-version }}-${{ inputs.os }}

View File

@@ -94,24 +94,24 @@ jobs:
# Upload cli executable # Upload cli executable
- if: ${{ inputs.build-cli == true }} - if: ${{ inputs.build-cli == true }}
uses: actions/upload-artifact@v7 uses: actions/upload-artifact@v4
with: with:
name: php-${{ inputs.version }} name: php-${{ inputs.version }}
path: buildroot/bin/php.exe path: buildroot/bin/php.exe
# Upload micro self-extracted executable # Upload micro self-extracted executable
- if: ${{ inputs.build-micro == true }} - if: ${{ inputs.build-micro == true }}
uses: actions/upload-artifact@v7 uses: actions/upload-artifact@v4
with: with:
name: micro-${{ inputs.version }} name: micro-${{ inputs.version }}
path: buildroot/bin/micro.sfx path: buildroot/bin/micro.sfx
# Upload extensions metadata # Upload extensions metadata
- uses: actions/upload-artifact@v7 - uses: actions/upload-artifact@v4
with: with:
name: license-files name: license-files
path: buildroot/license/ path: buildroot/license/
- uses: actions/upload-artifact@v7 - uses: actions/upload-artifact@v4
with: with:
name: build-meta name: build-meta
path: | path: |

View File

@@ -2,9 +2,9 @@ name: Build SPC Binary
on: on:
push: push:
branches: [ "main", "v3" ] branches: [ "main" ]
pull_request: pull_request:
branches: [ "main", "v3" ] branches: [ "main" ]
paths: paths:
- '.github/workflows/release-build.yml' - '.github/workflows/release-build.yml'
release: release:
@@ -38,12 +38,9 @@ jobs:
- name: "windows-x64" - name: "windows-x64"
os: "ubuntu-latest" os: "ubuntu-latest"
filename: "spc-windows-x64.exe" filename: "spc-windows-x64.exe"
permissions:
id-token: write
attestations: write
steps: steps:
- name: "Checkout" - name: "Checkout"
uses: "actions/checkout@v5" uses: "actions/checkout@v4"
- if: inputs.debug == true - if: inputs.debug == true
run: echo "SPC_BUILD_DEBUG=--debug" >> $GITHUB_ENV run: echo "SPC_BUILD_DEBUG=--debug" >> $GITHUB_ENV
@@ -63,7 +60,7 @@ jobs:
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
- name: "Cache Composer dependencies" - name: "Cache Composer dependencies"
uses: "actions/cache@v5" uses: "actions/cache@v4"
with: with:
path: "${{ steps.composer-cache.outputs.dir }}" path: "${{ steps.composer-cache.outputs.dir }}"
key: "php-${{ env.PHP_VERSION }}-locked-composer-${{ hashFiles('**/composer.lock') }}" key: "php-${{ env.PHP_VERSION }}-locked-composer-${{ hashFiles('**/composer.lock') }}"
@@ -104,16 +101,10 @@ jobs:
tar -czf ${{ matrix.operating-system.filename }} spc tar -czf ${{ matrix.operating-system.filename }} spc
# validate spc binary # validate spc binary
if [ "${{ matrix.operating-system.name }}" == "linux-x86_64" ]; then if [ "${{ matrix.operating-system.name }}" == "linux-x86_64" ]; then
./spc dev:info php ./spc dev:extensions
fi fi
fi fi
- name: "Generate build provenance attestation"
if: github.event_name != 'pull_request'
uses: actions/attest-build-provenance@v4
with:
subject-path: "${{ github.workspace }}/${{ matrix.operating-system.name == 'windows-x64' && 'spc.exe' || 'spc' }}"
- name: "Copy file" - name: "Copy file"
run: | run: |
if [ "${{ matrix.operating-system.name }}" != "windows-x64" ]; then if [ "${{ matrix.operating-system.name }}" != "windows-x64" ]; then
@@ -129,44 +120,20 @@ jobs:
with: with:
files: dist/${{ matrix.operating-system.filename }} files: dist/${{ matrix.operating-system.filename }}
- name: "Deploy to self-hosted OSS (nightly)" - name: "Deploy to self-hosted OSS"
# only run this step if the repository is static-php-cli and is push to v3 branch # only run this step if the repository is static-php-cli and the branch is main
if: ${{ github.repository == 'crazywhalecc/static-php-cli' && github.ref == 'refs/heads/v3' }} if: github.repository == 'crazywhalecc/static-php-cli' && github.ref == 'refs/heads/main'
uses: static-php/upload-s3-action@v1.0.0 uses: static-php/upload-s3-action@v1.0.0
with: with:
aws_key_id: ${{ secrets.AWS_KEY_ID }} aws_key_id: ${{ secrets.AWS_KEY_ID }}
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws_bucket: ${{ secrets.AWS_BUCKET }} aws_bucket: ${{ secrets.AWS_BUCKET }}
source_dir: "dist/" source_dir: "dist/"
destination_dir: v3/spc-bin/nightly/ destination_dir: static-php-cli/spc-bin/nightly/
endpoint: ${{ secrets.AWS_ENDPOINT }}
- name: "Deploy to self-hosted OSS (latest)"
# only run this step if the repository is static-php-cli and is release tag
if: ${{ github.repository == 'crazywhalecc/static-php-cli' && startsWith(github.ref, 'refs/tags/') }}
uses: static-php/upload-s3-action@v1.0.0
with:
aws_key_id: ${{ secrets.AWS_KEY_ID }}
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws_bucket: ${{ secrets.AWS_BUCKET }}
source_dir: "dist/"
destination_dir: v3/spc-bin/latest/
endpoint: ${{ secrets.AWS_ENDPOINT }}
- name: "Deploy to self-hosted OSS (versioned)"
# only run this step if the repository is static-php-cli and is release tag
if: ${{ github.repository == 'crazywhalecc/static-php-cli' && startsWith(github.ref, 'refs/tags/') }}
uses: static-php/upload-s3-action@v1.0.0
with:
aws_key_id: ${{ secrets.AWS_KEY_ID }}
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws_bucket: ${{ secrets.AWS_BUCKET }}
source_dir: "dist/"
destination_dir: v3/spc-bin/${{ github.ref_name }}/
endpoint: ${{ secrets.AWS_ENDPOINT }} endpoint: ${{ secrets.AWS_ENDPOINT }}
- name: "Upload Artifact" - name: "Upload Artifact"
uses: actions/upload-artifact@v7 uses: actions/upload-artifact@v4
with: with:
path: spc${{ env.SUFFIX }} path: spc${{ env.SUFFIX }}
name: spc-${{ matrix.operating-system.name }}${{ env.SUFFIX }} name: spc-${{ matrix.operating-system.name }}${{ env.SUFFIX }}
@@ -189,10 +156,10 @@ jobs:
os: "windows-latest" os: "windows-latest"
steps: steps:
- name: "Checkout" - name: "Checkout"
uses: actions/checkout@v5 uses: actions/checkout@v4
- name: "Download Artifact" - name: "Download Artifact"
uses: actions/download-artifact@v5 uses: actions/download-artifact@v4
env: env:
SUFFIX: ${{ matrix.operating-system.name == 'windows-x64' && '.exe' || '' }} SUFFIX: ${{ matrix.operating-system.name == 'windows-x64' && '.exe' || '' }}
with: with:
@@ -205,4 +172,4 @@ jobs:
- name: "Run SPC Tests" - name: "Run SPC Tests"
env: env:
SUFFIX: ${{ matrix.operating-system.name == 'windows-x64' && '.exe' || '' }} SUFFIX: ${{ matrix.operating-system.name == 'windows-x64' && '.exe' || '' }}
run: ./spc${{ env.SUFFIX }} dev:info php run: ./spc${{ env.SUFFIX }} dev:extensions

View File

@@ -1,9 +1,9 @@
name: v3 Tests name: Tests
on: on:
pull_request: pull_request:
branches: [ "v3" ] branches: [ "main", "v3" ]
types: [ opened, synchronize, reopened, labeled, unlabeled ] types: [ opened, synchronize, reopened ]
paths: paths:
- 'src/**' - 'src/**'
- 'config/**' - 'config/**'
@@ -15,10 +15,6 @@ on:
permissions: read-all permissions: read-all
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number }}
cancel-in-progress: true
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -107,171 +103,112 @@ jobs:
run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist
- name: "Run PHPUnit Tests" - name: "Run PHPUnit Tests"
run: vendor/bin/phpunit tests/ --no-coverage run: SPC_LIBC=glibc vendor/bin/phpunit tests/ --no-coverage
check-gate: define-matrix:
name: "Check: need-test label" name: "Define Matrix"
runs-on: ubuntu-latest runs-on: ubuntu-latest
outputs: outputs:
enabled: ${{ steps.gate.outputs.enabled }} php: ${{ steps.gendef.outputs.php }}
os: ${{ steps.gendef.outputs.os }}
steps: steps:
- name: Check label - name: "Checkout"
id: gate uses: actions/checkout@v4
run: |
LABELS='${{ toJSON(github.event.pull_request.labels.*.name) }}'
if echo "$LABELS" | grep -q '"need-test"'; then
echo "enabled=true" >> "$GITHUB_OUTPUT"
else
echo "enabled=false" >> "$GITHUB_OUTPUT"
fi
test-bot: - name: "Setup PHP"
name: "Test Bot: analyze PR"
needs: check-gate
if: needs.check-gate.outputs.enabled == 'true'
runs-on: ubuntu-latest
permissions:
pull-requests: write
contents: read
outputs:
need_test: ${{ steps.bot.outputs.need_test }}
gen_matrix_args: ${{ steps.bot.outputs.gen_matrix_args }}
gen_matrix_args_tier2: ${{ steps.bot.outputs.gen_matrix_args_tier2 }}
php_versions: ${{ steps.bot.outputs.php_versions }}
tier2: ${{ steps.bot.outputs.tier2 }}
steps:
- uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.4'
extensions: curl, openssl, mbstring
ini-values: memory_limit=-1
tools: composer
- name: Install dependencies
run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist --no-dev
- name: Run dev:test-bot
id: bot
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
BOT_JSON=$(php -d opcache.enable_cli=0 bin/spc dev:test-bot \
--pr=${{ github.event.pull_request.number }} \
--repo=${{ github.repository }} 2>/dev/null)
echo "need_test=$(echo "$BOT_JSON" | jq -r '.need_test')" >> "$GITHUB_OUTPUT"
echo "gen_matrix_args=$(echo "$BOT_JSON" | jq -r '.gen_matrix_args')" >> "$GITHUB_OUTPUT"
echo "gen_matrix_args_tier2=$(echo "$BOT_JSON" | jq -r '.gen_matrix_args_tier2')" >> "$GITHUB_OUTPUT"
echo "php_versions=$(echo "$BOT_JSON" | jq -c '.php_versions')" >> "$GITHUB_OUTPUT"
echo "tier2=$(echo "$BOT_JSON" | jq -r '.tier2')" >> "$GITHUB_OUTPUT"
COMMENT_BODY=$(echo "$BOT_JSON" | jq -r '.comment_body')
MARKER="<!-- spc-test-bot -->"
# Find existing bot comment id
EXISTING_ID=$(gh api \
repos/${{ github.repository }}/issues/${{ github.event.pull_request.number }}/comments \
--jq "[.[] | select(.body | startswith(\"$MARKER\")) | .id] | first // empty")
if [ -n "$EXISTING_ID" ]; then
gh api --method PATCH \
repos/${{ github.repository }}/issues/comments/"$EXISTING_ID" \
-f body="$COMMENT_BODY"
else
gh pr comment ${{ github.event.pull_request.number }} \
--repo ${{ github.repository }} \
--body "$COMMENT_BODY"
fi
gen-matrix:
name: "Generate test matrix"
needs: test-bot
if: needs.test-bot.outputs.need_test == 'true'
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.build.outputs.matrix }}
steps:
- uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.4'
extensions: curl, openssl, mbstring
ini-values: memory_limit=-1
tools: composer
- name: Install dependencies
run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist --no-dev
- name: Build matrix
id: build
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GEN_MATRIX_ARGS: ${{ needs.test-bot.outputs.gen_matrix_args }}
GEN_MATRIX_ARGS_TIER2: ${{ needs.test-bot.outputs.gen_matrix_args_tier2 }}
PHP_VERSIONS: ${{ needs.test-bot.outputs.php_versions }}
TIER2: ${{ needs.test-bot.outputs.tier2 }}
run: |
# Tier1 matrix
MATRIX1=$(bin/spc dev:gen-ext-test-matrix $GEN_MATRIX_ARGS 2>/dev/null)
# Merge Tier2 if requested
if [ "$TIER2" = "true" ] && [ -n "$GEN_MATRIX_ARGS_TIER2" ]; then
MATRIX2=$(bin/spc dev:gen-ext-test-matrix $GEN_MATRIX_ARGS_TIER2 2>/dev/null)
COMBINED=$(jq -n --argjson m1 "$MATRIX1" --argjson m2 "$MATRIX2" '$m1 + $m2')
else
COMBINED=$MATRIX1
fi
# Expand PHP versions: cartesian product of entries × php_versions
FINAL=$(echo "$COMBINED" | jq --argjson versions "$PHP_VERSIONS" \
'[.[] | . as $entry | $versions[] | $entry + {"php-version": .}]')
echo "matrix=$(echo "$FINAL" | jq -c '{"combo": .}')" >> "$GITHUB_OUTPUT"
ext-test:
name: "Ext test: ${{ matrix.combo.extension }} (PHP ${{ matrix.combo.php-version }} · ${{ matrix.combo.os }}-${{ matrix.combo.arch }})"
needs: gen-matrix
runs-on: ${{ matrix.combo.runner }}
timeout-minutes: 120
strategy:
fail-fast: false
matrix: ${{ fromJSON(needs.gen-matrix.outputs.matrix) }}
steps:
- uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: 8.4 php-version: 8.4
extensions: curl, openssl, mbstring extensions: curl, openssl, mbstring
- name: Define
id: gendef
run: |
PHP_VERSIONS=$(php src/globals/test-extensions.php php)
OS_VERSIONS=$(php src/globals/test-extensions.php os)
echo 'php='"$PHP_VERSIONS" >> "$GITHUB_OUTPUT"
echo 'os='"$OS_VERSIONS" >> "$GITHUB_OUTPUT"
build:
name: "Build PHP Test (PHP ${{ matrix.php }} ${{ matrix.os }})"
runs-on: ${{ matrix.os }}
needs: [define-matrix, php-cs-fixer, phpstan, phpunit]
timeout-minutes: 120
strategy:
matrix:
php: ${{ fromJSON(needs.define-matrix.outputs.php) }}
os: ${{ fromJSON(needs.define-matrix.outputs.os) }}
fail-fast: false
steps:
- name: "Update runner packages"
if: ${{ startsWith(matrix.os, 'ubuntu-') }}
run: sudo apt-get update && sudo apt-get install -y ca-certificates
- name: "Checkout"
uses: actions/checkout@v4
- name: "Setup PHP"
uses: shivammathur/setup-php@v2
with:
php-version: 8.4
tools: pecl, composer
extensions: curl, openssl, mbstring
ini-values: memory_limit=-1 ini-values: memory_limit=-1
tools: composer
env: env:
phpts: nts phpts: nts
- name: Install dependencies - name: "Cache composer packages"
run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist --no-dev id: composer-cache
uses: actions/cache@v4
with:
path: vendor
key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }}
restore-keys: |
${{ runner.os }}-php-
- name: Build # Cache downloaded source
env: - id: cache-download
SPC_USE_SUDO: "yes" uses: actions/cache@v4
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with:
path: downloads
key: php-dependencies-${{ matrix.os }}
- name: "Install Dependencies"
run: composer update -vvv --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist --no-plugins
- name: "Run Build Tests (doctor)"
run: php src/globals/test-extensions.php doctor_cmd ${{ matrix.os }} ${{ matrix.php }}
- name: "Prepare UPX for Windows"
if: ${{ startsWith(matrix.os, 'windows-') }}
run: | run: |
./bin/spc doctor --auto-fix php src/globals/test-extensions.php install_upx_cmd ${{ matrix.os }} ${{ matrix.php }}
${{ matrix.combo.build-args }} --dl-with-php=${{ matrix.combo.php-version }} echo "UPX_CMD=$(php src/globals/test-extensions.php upx)" >> $env:GITHUB_ENV
# - name: Setup upterm session - name: "Prepare UPX for Linux"
# if: ${{ failure() }} if: ${{ startsWith(matrix.os, 'ubuntu-') }}
# uses: owenthereal/action-upterm@v1 run: |
php src/globals/test-extensions.php install_upx_cmd ${{ matrix.os }} ${{ matrix.php }}
echo "UPX_CMD=$(php src/globals/test-extensions.php upx)" >> $GITHUB_ENV
- name: Upload logs - name: "Run Build Tests (download)"
if: always() && hashFiles('log/**') != '' run: php src/globals/test-extensions.php download_cmd ${{ matrix.os }} ${{ matrix.php }}
- name: "Run Build Tests (build)"
run: php src/globals/test-extensions.php build_cmd ${{ matrix.os }} ${{ matrix.php }}
- name: "Run Build Tests (build - embed for non-windows)"
if: ${{ !startsWith(matrix.os, 'windows-') }}
run: php src/globals/test-extensions.php build_embed_cmd ${{ matrix.os }} ${{ matrix.php }}
- name: "Upload logs"
if: ${{ always() && hashFiles('log/**') != '' }}
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
name: logs-${{ matrix.combo.os }}-${{ matrix.combo.arch }}-${{ matrix.combo.extension }}-php${{ matrix.combo.php-version }} name: build-logs-${{ matrix.os }}-${{ matrix.php }}
path: log path: log
# - name: Setup tmate session
# if: ${{ failure() }}
# uses: mxschmitt/action-tmate@v3

View File

@@ -1,68 +1,71 @@
name: Docs build test and auto deploy name: Docs Auto Deploy
on: on:
pull_request: push:
branches: [ "v3" ] branches:
types: [ opened, synchronize, reopened ] - main
paths: paths:
- 'config/**.yml' - 'config/**.json'
- 'docs/**' - 'docs/**'
- 'package.json' - 'package.json'
- 'yarn.lock' - 'yarn.lock'
- '.github/workflows/vitepress-deploy.yml' - '.github/workflows/vitepress-deploy.yml'
push:
branches: [ "v3" ] jobs:
paths: build:
- 'config/**.yml' name: Deploy docs
- 'docs/**' runs-on: ubuntu-latest
- 'package.json' if: github.repository == 'crazywhalecc/static-php-cli'
- 'yarn.lock' steps:
- '.github/workflows/vitepress-deploy.yml' - name: Checkout master
uses: actions/checkout@v4
jobs:
build: - uses: actions/setup-node@v3
name: Deploy docs with:
runs-on: ubuntu-latest cache: yarn
if: github.repository == 'crazywhalecc/static-php-cli'
steps: - run: yarn install --frozen-lockfile
- name: Checkout
uses: actions/checkout@v4 - name: "Copy Config Files"
run: |
- uses: actions/setup-node@v3 mkdir -p docs/.vitepress/config
cp -r config/* docs/.vitepress/config/
- run: npm install
- name: "Install PHP for official runners"
- name: "Install PHP for official runners" uses: shivammathur/setup-php@v2
uses: shivammathur/setup-php@v2 with:
with: coverage: none
coverage: none tools: composer:v2
tools: composer:v2 php-version: 8.4
php-version: 8.4 ini-values: memory_limit=-1
ini-values: memory_limit=-1 extensions: curl, openssl, mbstring
extensions: curl, openssl, mbstring
- name: "Get Composer Cache Directory"
- name: "Get Composer Cache Directory" id: composer-cache
id: composer-cache run: |
run: | echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
- name: "Cache Composer dependencies"
- name: "Cache Composer dependencies" uses: "actions/cache@v4"
uses: "actions/cache@v4" with:
with: path: "${{ steps.composer-cache.outputs.dir }}"
path: "${{ steps.composer-cache.outputs.dir }}" key: "php-8.2-locked-composer-${{ hashFiles('**/composer.lock') }}"
key: "php-8.2-locked-composer-${{ hashFiles('**/composer.lock') }}" restore-keys: |
restore-keys: | php-8.2-locked-composer
php-8.2-locked-composer
- name: "Install Locked Dependencies"
- name: "Install Locked Dependencies" run: "composer install --no-interaction --no-progress"
run: "composer install --no-interaction --no-progress"
- name: "Generate Extension Support List"
- name: Build run: |
run: npm run docs:build bin/spc dev:gen-ext-docs > docs/extensions.md
bin/spc dev:gen-ext-dep-docs > docs/deps-map-ext.md
# Deploy to GitHub Pages only when the workflow is triggered by a push to the v3 branch bin/spc dev:gen-lib-dep-docs > docs/deps-map-lib.md
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3 - name: Build
if: github.event_name == 'push' && github.ref == 'refs/heads/v3' run: yarn docs:build
with:
github_token: ${{ secrets.GITHUB_TOKEN }} - name: Deploy to GitHub Pages
publish_dir: docs/.vitepress/dist uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: docs/.vitepress/dist

5
.gitignore vendored
View File

@@ -52,8 +52,6 @@ packlib_files.txt
/node_modules/ /node_modules/
/docs/.vitepress/dist/ /docs/.vitepress/dist/
/docs/.vitepress/cache/ /docs/.vitepress/cache/
/docs/.vitepress/ext-data.json
/docs/.vitepress/deps-data.json
package-lock.json package-lock.json
pnpm-lock.yaml pnpm-lock.yaml
@@ -69,6 +67,3 @@ spc.exe
# dumped files from StaticPHP v3 # dumped files from StaticPHP v3
/dump-*.json /dump-*.json
# config parse cache
/.spc.cache.php

View File

@@ -1,156 +1,172 @@
# StaticPHP # 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)
[![English readme](https://img.shields.io/badge/README-English%20%F0%9F%87%AC%F0%9F%87%A7-moccasin?style=flat-square)](README.md) [![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)
[![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) [![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) [![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) [![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、扩展等的强大工具。
**StaticPHP** 是一个强大的工具,用于构建可移植的可执行文件,包括 PHP、扩展等。
## 特性
> [!IMPORTANT]
> 我们正准备发布 **v3** 版本,届时项目名称将从 **static-php-cli** 更改为 **StaticPHP**。 - :elephant: **支持多 PHP 版本** - 支持 PHP 8.1, 8.2, 8.3, 8.4, 8.5
> 此分支对应 v3 版本。v2 版本请查看 [v2 分支](https://github.com/crazywhalecc/static-php-cli/tree/main)。 - :handbag: **单文件 PHP 可执行文件** - 构建零依赖的独立 PHP
> 请更新您的参考资料,并关注正式版发布。 - :hamburger: **phpmicro 集成** - 构建 **[phpmicro](https://github.com/dixyes/phpmicro)** 自解压可执行文件(将 PHP 二进制文件和源代码合并为一个文件)
- :pill: **智能环境检查器** - 自动构建环境检查器,具备自动修复功能
## 特性 - :zap: **跨平台支持** - 支持 Linux、macOS、FreeBSD 和 Windows
- :wrench: **可配置补丁** - 可自定义的源代码补丁系统
- :elephant: 支持多个 PHP 版本 - PHP 8.1, 8.2, 8.3, 8.4, 8.5 - :books: **智能依赖管理** - 自动处理构建依赖
- :handbag: 构建零依赖的单文件 PHP 可执行程序 - 📦 **自包含工具** - 提供使用 [box](https://github.com/box-project/box) 构建的 `spc` 可执行文件
- :hamburger: 构建 **[phpmicro](https://github.com/static-php/phpmicro)** 自解压可执行文件(将 PHP 二进制和源码合并为单个文件) - :fire: **广泛的扩展支持** - 支持 75+ 流行 [扩展](https://static-php.dev/zh/guide/extensions.html)
- :pill: 自动构建环境检查器,支持自动修复 - :floppy_disk: **UPX 压缩** - 减小二进制文件大小 30-50%(仅 Linux/Windows
- :zap: 支持 `Linux``macOS``Windows`
- :wrench: 通过 vendor 模式和自定义注册表实现便捷扩展 **单文件独立 php-cli**
- :books: 智能依赖管理
- 📦 自包含 `spc` 可执行文件,便于自安装 <img width="700" alt="out1" src="https://github.com/crazywhalecc/static-php-cli/assets/20330940/01a2e60f-13b0-4242-a645-f7afa4936396">
- :fire: 支持 100+ 热门 [PHP 扩展](https://static-php.dev/en/guide/extensions.html)
- :floppy_disk: 支持 UPX 压缩(二进制体积可缩小 30-50% **使用 phpmicro 将 PHP 代码与 PHP 解释器结合:**
**单文件独立 php-cli** <img width="700" alt="out2" src="https://github.com/crazywhalecc/static-php-cli/assets/20330940/46b7128d-fb72-4169-957e-48564c3ff3e2">
<img width="700" alt="out1" src="https://github.com/crazywhalecc/static-php-cli/assets/20330940/01a2e60f-13b0-4242-a645-f7afa4936396"> ## 快速开始
**使用 phpmicro 将 PHP 代码与 PHP 解释器结合:** ### 1. 下载 spc 二进制文件
<img width="700" alt="out2" src="https://github.com/crazywhalecc/static-php-cli/assets/20330940/46b7128d-fb72-4169-957e-48564c3ff3e2"> ```bash
# Linux x86_64
## 快速开始 curl -fsSL -o spc https://dl.static-php.dev/static-php-cli/spc-bin/nightly/spc-linux-x86_64
# Linux aarch64
### 1. 下载 spc 二进制 curl -fsSL -o spc https://dl.static-php.dev/static-php-cli/spc-bin/nightly/spc-linux-aarch64
# macOS x86_64 (Intel)
```bash curl -fsSL -o spc https://dl.static-php.dev/static-php-cli/spc-bin/nightly/spc-macos-x86_64
# For Linux x86_64 # macOS aarch64 (Apple)
curl -fsSL -o spc https://dl.static-php.dev/v3/spc-bin/nightly/spc-linux-x86_64 curl -fsSL -o spc https://dl.static-php.dev/static-php-cli/spc-bin/nightly/spc-macos-aarch64
# For Linux aarch64 # Windows (x86_64, win10 build 17063 或更高版本,请先安装 VS2022)
curl -fsSL -o spc https://dl.static-php.dev/v3/spc-bin/nightly/spc-linux-aarch64 curl.exe -fsSL -o spc.exe https://dl.static-php.dev/static-php-cli/spc-bin/nightly/spc-windows-x64.exe
# macOS x86_64 (Intel) ```
curl -fsSL -o spc https://dl.static-php.dev/v3/spc-bin/nightly/spc-macos-x86_64
# macOS aarch64 (Apple) 对于 macOS 和 Linux请先添加执行权限
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) ```bash
curl.exe -fsSL -o spc.exe https://dl.static-php.dev/v3/spc-bin/nightly/spc-windows-x64.exe chmod +x ./spc
``` ```
对于 macOS 和 Linux请先添加可执行权限 ### 2. 构建静态 PHP
```bash 首先,创建一个 `craft.yml` 文件,并从 [扩展列表](https://static-php.dev/zh/guide/extensions.html) 或 [命令生成器](https://static-php.dev/zh/guide/cli-generator.html) 中指定要包含的扩展:
chmod +x ./spc
``` ```yml
# PHP 版本支持8.1, 8.2, 8.3, 8.4, 8.5
### 2. 构建静态 PHP php-version: 8.4
# 在此处放置您的扩展列表
首先,创建 `craft.yml` 文件,并从 [扩展列表](https://static-php.dev/en/guide/extensions.html) 或 [命令生成器](https://static-php.dev/en/guide/cli-generator.html) 指定要包含的扩展: 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:
```yml - cli
# PHP version support: 8.1, 8.2, 8.3, 8.4, 8.5 - micro
php-version: 8.5 - fpm
# Put your extension list here download-options:
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" prefer-pre-built: true
sapi: ```
- cli
- micro 运行命令:
download-options:
parallel: 10 ```bash
``` ./spc craft
运行命令: # 输出完整控制台日志
./spc craft --debug
```bash ```
./spc craft
### 3. 静态 PHP 使用
# 输出完整控制台日志
./spc craft -vvv 现在您可以将 StaticPHP 构建的二进制文件复制到另一台机器上,无需依赖即可运行:
```
```
### 3. 静态 PHP 使用 # php-cli
buildroot/bin/php -v
现在你可以将 StaticPHP 构建的二进制复制到另一台机器并在无依赖环境下运行:
# phpmicro
``` echo '<?php echo "Hello world!\n";' > a.php
# php-cli ./spc micro:combine a.php -O my-app
buildroot/bin/php -v ./my-app
# phpmicro # php-fpm
echo '<?php echo "Hello world!\n";' > a.php buildroot/bin/php-fpm -v
./spc micro:combine a.php -O my-app ```
./my-app
``` ## 文档
## 文档 当前 README 包含基本用法。有关 StaticPHP 的所有功能,
请访问 <https://static-php.dev>。
当前 README 包含基础用法。有关 StaticPHP 的完整功能集,
请访问 <https://static-php.dev>。 ## 直接下载
## 直接下载 如果您不想构建或想先测试,可以从 [Actions](https://github.com/static-php/static-php-cli-hosted/actions/workflows/build-php-bulk.yml) 下载示例预编译工件,或从自托管服务器下载。
如果你暂时不想构建,或只想先测试,可以从 [Actions](https://github.com/static-php/static-php-cli-hosted/actions/workflows/build-php-bulk.yml) 下载示例预编译产物,或从自托管服务器下载。 以下是几个具有不同扩展组合的预编译静态 PHP 二进制文件,
您可以根据需要直接下载。
我们为每个 PHP 版本提供 2 种扩展集合:
| 组合名称 | 扩展数量 | 系统 | 备注 |
- **gigantic**:尽可能包含更多扩展,二进制大小约 100-150MB。 |----------------------------------------------------------------------|----------------------------------------------------------------------------|--------------|--------------------|
- **base**:仅包含 StaticPHP 自身使用的少量扩展,二进制大小约 10MB。 | [common](https://dl.static-php.dev/static-php-cli/common/) | [30+](https://dl.static-php.dev/static-php-cli/common/README.txt) | Linux, macOS | 二进制文件大小约为 7.5MB |
| [bulk](https://dl.static-php.dev/static-php-cli/bulk/) | [50+](https://dl.static-php.dev/static-php-cli/bulk/README.txt) | Linux, macOS | 二进制文件大小约为 25MB |
> WIP | [gnu-bulk](https://dl.static-php.dev/static-php-cli/gnu-bulk/) | [50+](https://dl.static-php.dev/static-php-cli/bulk/README.txt) | Linux, macOS | 使用 glibc 的 bulk 组合 |
| [minimal](https://dl.static-php.dev/static-php-cli/minimal/) | [5](https://dl.static-php.dev/static-php-cli/minimal/README.txt) | Linux, macOS | 二进制文件大小约为 3MB |
### 在线构建(使用 GitHub Actions | [spc-min](https://dl.static-php.dev/static-php-cli/windows/spc-min/) | [5](https://dl.static-php.dev/static-php-cli/windows/spc-min/README.txt) | Windows | 二进制文件大小约为 3MB |
| [spc-max](https://dl.static-php.dev/static-php-cli/windows/spc-max/) | [40+](https://dl.static-php.dev/static-php-cli/windows/spc-max/README.txt) | Windows | 二进制文件大小约为 8.5MB |
当上方直接下载的二进制无法满足你的需求时,
你可以使用 GitHub Actions 轻松构建静态编译的 PHP > Linux 和 Windows 支持对二进制文件进行 UPX 压缩,可以将二进制文件大小减少 30% 到 50%。
并同时自定义要编译的扩展列表 > macOS 不支持 UPX 压缩,因此 mac 的预构建二进制文件大小较大
1. Fork 此仓库。 ### 在线构建(使用 GitHub Actions
2. 进入项目的 Actions 并选择 `CI`
3. 选择 `Run workflow`,填写你要编译的 PHP 版本、目标类型和扩展列表。(扩展用逗号分隔,例如 `bcmath,curl,mbstring` 上方直接下载的二进制不能满足需求时,可使用 GitHub Action 可以轻松构建静态编译的 PHP
4. 等待工作流执行完成后,进入对应运行记录并下载 `Artifacts` 同时自行定义要编译的扩展
如果你启用 `debug`,构建时将输出所有日志,包括编译日志,便于排查问题 1. Fork 本项目
2. 进入项目的 Actions 并选择 `CI`
> 我们也计划在未来提供可复用的 GitHub Actions 工作流, 3. 选择 `Run workflow`,填入您要编译的 PHP 版本、目标类型和扩展列表。(扩展用逗号分隔,例如 `bcmath,curl,mbstring`
> 这样你无需 fork 本项目,也能在自己的仓库中轻松构建 static PHP 4. 等待一段时间后,进入相应的任务并获取 `Artifacts`
## 贡献 如果您启用 `debug`,构建时将输出所有日志,包括编译日志,以便故障排除。
如果你需要的扩展缺失,可以创建 issue。 ## 贡献
如果你熟悉本项目,也欢迎发起 pull request。
如果您需要的扩展缺失,可以创建 issue。
如果你想贡献文档,请直接编辑 `docs/` 如果您熟悉本项目,也欢迎发起 pull request
## 赞助本项目 如果您想贡献文档,请直接编辑 `docs/` 目录。
你可以通过 [GitHub Sponsor](https://github.com/crazywhalecc) 赞助我或我的项目。你捐赠的一部分将用于维护 **static-php.dev** 服务器 现在有一个 [static-php](https://github.com/static-php) 组织,用于存储与项目相关的仓库
**特别感谢以下赞助商:** ## 赞助本项目
<a href="https://beyondco.de/"><img src="/docs/public/images/beyondcode-seeklogo.png" width="300" alt="Beyond Code Logo" /></a> 您可以从 [GitHub Sponsor](https://github.com/crazywhalecc) 赞助我或我的项目。您捐赠的一部分将用于维护 **static-php.dev** 服务器。
<a href="https://nativephp.com/"><img src="/docs/public/images/nativephp-logo.svg" width="300" alt="NativePHP Logo" /></a> **特别感谢以下赞助商**
## 开源许可证 <a href="https://beyondco.de/"><img src="/docs/public/images/beyondcode-seeklogo.png" width="300" alt="Beyond Code Logo" /></a>
本项目本身采用 MIT 许可证。 <a href="https://nativephp.com/"><img src="/docs/public/images/nativephp-logo.svg" width="300" alt="NativePHP Logo" /></a>
一些新添加的扩展和依赖可能来自其他项目。
这些源码文件头部也可能包含额外的 LICENSE 和 AUTHOR 信息。 ## 开源许可证
请在编译后使用 `bin/spc dump-license` 命令导出项目中使用的开源许可证, 本项目本身基于 MIT 许可证,
并遵守对应项目的 LICENSE。 一些新添加的扩展和依赖可能来自其他项目,
这些代码文件的头部也会给出额外的许可证和作者说明。
这些是类似的项目:
- [dixyes/lwmbs](https://github.com/dixyes/lwmbs)
- [swoole/swoole-cli](https://github.com/swoole/swoole-cli)
本项目使用了 [dixyes/lwmbs](https://github.com/dixyes/lwmbs) 的一些代码,例如 Windows 静态构建目标和 libiconv 支持。
lwmbs 基于 [Mulan PSL 2](http://license.coscl.org.cn/MulanPSL2) 许可证。
由于本项目的特殊性,
项目编译过程中会使用许多其他开源项目,如 curl 和 protobuf
它们都有自己的开源许可证。
请在编译后使用 `bin/spc dump-license` 命令导出项目中使用的开源许可证,
并遵守相应项目的 LICENSE。

View File

@@ -5,26 +5,20 @@
[![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) [![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) [![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) [![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** is a powerful tool designed for building portable executables including PHP, extensions, and more. **StaticPHP** is a powerful tool designed for building portable executables including PHP, extensions, and more.
> [!IMPORTANT]
> We are preparing to release **v3**, which will include a project rename from **static-php-cli** to **StaticPHP**.
> And this branch is for v3. For v2, please check the [v2 branch](https://github.com/crazywhalecc/static-php-cli/tree/main).
> Please update your references and stay tuned for the official release.
## Features ## Features
- :elephant: Support multiple PHP versions - PHP 8.1, 8.2, 8.3, 8.4, 8.5 - :elephant: Support multiple PHP versions - PHP 8.1, 8.2, 8.3, 8.4, 8.5
- :handbag: Build single-file PHP executable with zero dependencies - :handbag: Build single-file PHP executable with zero dependencies
- :hamburger: Build **[phpmicro](https://github.com/static-php/phpmicro)** self-extracting executables (combines PHP binary and source code into one file) - :hamburger:Build **[phpmicro](https://github.com/dixyes/phpmicro)** self-extracting executables (combines PHP binary and source code into one file)
- :pill: Automatic build environment checker with auto-fix capabilities - :pill: Automatic build environment checker with auto-fix capabilities
- :zap: `Linux`, `macOS`, `Windows` support - :zap: `Linux`, `macOS`, `FreeBSD`, `Windows` support
- :wrench: Easy to extend with vendor mode and custom registries - :wrench: Configurable source code patching
- :books: Intelligent dependency management - :books: Intelligent dependency management
- 📦 Self-contained `spc` executable for easy self-installation - 📦 Self-contained `spc` executable (built with [box](https://github.com/box-project/box))
- :fire: Support 100+ popular [PHP extensions](https://static-php.dev/en/guide/extensions.html) - :fire: Support 100+ popular [extensions](https://static-php.dev/en/guide/extensions.html)
- :floppy_disk: UPX compression support (reduces binary size by 30-50%) - :floppy_disk: UPX compression support (reduces binary size by 30-50%)
**Single-file standalone php-cli:** **Single-file standalone php-cli:**
@@ -41,15 +35,15 @@
```bash ```bash
# For Linux x86_64 # For Linux x86_64
curl -fsSL -o spc https://dl.static-php.dev/v3/spc-bin/nightly/spc-linux-x86_64 curl -fsSL -o spc https://dl.static-php.dev/static-php-cli/spc-bin/nightly/spc-linux-x86_64
# For Linux aarch64 # For Linux aarch64
curl -fsSL -o spc https://dl.static-php.dev/v3/spc-bin/nightly/spc-linux-aarch64 curl -fsSL -o spc https://dl.static-php.dev/static-php-cli/spc-bin/nightly/spc-linux-aarch64
# macOS x86_64 (Intel) # macOS x86_64 (Intel)
curl -fsSL -o spc https://dl.static-php.dev/v3/spc-bin/nightly/spc-macos-x86_64 curl -fsSL -o spc https://dl.static-php.dev/static-php-cli/spc-bin/nightly/spc-macos-x86_64
# macOS aarch64 (Apple) # macOS aarch64 (Apple)
curl -fsSL -o spc https://dl.static-php.dev/v3/spc-bin/nightly/spc-macos-aarch64 curl -fsSL -o spc https://dl.static-php.dev/static-php-cli/spc-bin/nightly/spc-macos-aarch64
# Windows (x86_64, win10 build 17063 or later, please install VS2022 first) # 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 curl.exe -fsSL -o spc.exe https://dl.static-php.dev/static-php-cli/spc-bin/nightly/spc-windows-x64.exe
``` ```
For macOS and Linux, add execute permission first: For macOS and Linux, add execute permission first:
@@ -64,14 +58,15 @@ First, create a `craft.yml` file and specify which extensions you want to includ
```yml ```yml
# PHP version support: 8.1, 8.2, 8.3, 8.4, 8.5 # PHP version support: 8.1, 8.2, 8.3, 8.4, 8.5
php-version: 8.5 php-version: 8.4
# Put your extension list here # 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" 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: sapi:
- cli - cli
- micro - micro
- fpm
download-options: download-options:
parallel: 10 prefer-pre-built: true
``` ```
Run command: Run command:
@@ -80,7 +75,7 @@ Run command:
./spc craft ./spc craft
# Output full console log # Output full console log
./spc craft -vvv ./spc craft --debug
``` ```
### 3. Static PHP usage ### 3. Static PHP usage
@@ -95,40 +90,48 @@ buildroot/bin/php -v
echo '<?php echo "Hello world!\n";' > a.php echo '<?php echo "Hello world!\n";' > a.php
./spc micro:combine a.php -O my-app ./spc micro:combine a.php -O my-app
./my-app ./my-app
# php-fpm
buildroot/bin/php-fpm -v
``` ```
## Documentation ## Documentation
The current README contains basic usage. For the complete feature set of StaticPHP, The current README contains basic usage. For all the features of StaticPHP,
see <https://static-php.dev>. see <https://static-php.dev> .
## Direct Download ## Direct Download
If you do not want to build yet or just want to test first, you can download example pre-compiled artifacts from [Actions](https://github.com/static-php/static-php-cli-hosted/actions/workflows/build-php-bulk.yml) or from a self-hosted server. If you don't want to build or want to test first, you can download example pre-compiled artifact from [Actions](https://github.com/static-php/static-php-cli-hosted/actions/workflows/build-php-bulk.yml), or from self-hosted server.
We offer 2 types of extension sets for each PHP version: Below are several precompiled static-php binaries with different extension combinations,
which can be downloaded directly according to your needs.
- **gigantic**: Includes as many extensions as possible, the binary size is about 100-150MB. | Combination | Extension Count | OS | Comment |
- **base**: Only includes a few extensions used by StaticPHP itself, the binary size is about 10MB. |----------------------------------------------------------------------|----------------------------------------------------------------------------|--------------|--------------------------------|
| [common](https://dl.static-php.dev/static-php-cli/common/) | [30+](https://dl.static-php.dev/static-php-cli/common/README.txt) | Linux, macOS | The binary size is about 7.5MB |
| [bulk](https://dl.static-php.dev/static-php-cli/bulk/) | [50+](https://dl.static-php.dev/static-php-cli/bulk/README.txt) | Linux, macOS | The binary size is about 25MB |
| [gnu-bulk](https://dl.static-php.dev/static-php-cli/gnu-bulk/) | [50+](https://dl.static-php.dev/static-php-cli/bulk/README.txt) | Linux, macOS | Using shared glibc |
| [minimal](https://dl.static-php.dev/static-php-cli/minimal/) | [5](https://dl.static-php.dev/static-php-cli/minimal/README.txt) | Linux, macOS | The binary size is about 3MB |
| [spc-min](https://dl.static-php.dev/static-php-cli/windows/spc-min/) | [5](https://dl.static-php.dev/static-php-cli/windows/spc-min/README.txt) | Windows | The binary size is about 3MB |
| [spc-max](https://dl.static-php.dev/static-php-cli/windows/spc-max/) | [40+](https://dl.static-php.dev/static-php-cli/windows/spc-max/README.txt) | Windows | The binary size is about 8.5MB |
> WIP > Linux and Windows supports UPX compression for binaries, which can reduce the size of the binary by 30% to 50%.
> macOS does not support UPX compression, so the size of the pre-built binaries for mac is larger.
### Build Online (using GitHub Actions) ### Build Online (using GitHub Actions)
When the direct-download binaries above cannot meet your needs, When the above direct download binaries cannot meet your needs,
you can use GitHub Actions to easily build a statically compiled PHP you can use GitHub Action to easily build a statically compiled PHP,
while defining your own extension list. and at the same time define the extensions to be compiled by yourself.
1. Fork this repository. 1. Fork me.
2. Go to the Actions of the project and select `CI`. 2. Go to the Actions of the project and select `CI`.
3. Select `Run workflow`, fill in the PHP version you want to compile, the target type, and the list of extensions. (extensions comma separated, e.g. `bcmath,curl,mbstring`) 3. Select `Run workflow`, fill in the PHP version you want to compile, the target type, and the list of extensions. (extensions comma separated, e.g. `bcmath,curl,mbstring`)
4. After waiting for the workflow to finish, open the corresponding run and download `Artifacts`. 4. After waiting for about a period of time, enter the corresponding task and get `Artifacts`.
If you enable `debug`, all logs will be output at build time, including compiled logs, for troubleshooting. If you enable `debug`, all logs will be output at build time, including compiled logs, for troubleshooting.
> We are also planning to provide a reusable GitHub Actions workflow in the future,
> so that you can easily build static PHP in your own repository, without forking this project.
## Contribution ## Contribution
If the extension you need is missing, you can create an issue. If the extension you need is missing, you can create an issue.
@@ -136,6 +139,8 @@ If you are familiar with this project, you are also welcome to initiate a pull r
If you want to contribute documentation, please just edit in `docs/`. If you want to contribute documentation, please just edit in `docs/`.
Now there is a [static-php](https://github.com/static-php) organization, which is used to store the repo related to the project.
## Sponsor this project ## Sponsor this project
You can sponsor me or my project from [GitHub Sponsor](https://github.com/crazywhalecc). A portion of your donation will be used to maintain the **static-php.dev** server. You can sponsor me or my project from [GitHub Sponsor](https://github.com/crazywhalecc). A portion of your donation will be used to maintain the **static-php.dev** server.
@@ -148,9 +153,21 @@ You can sponsor me or my project from [GitHub Sponsor](https://github.com/crazyw
## Open-Source License ## Open-Source License
This project itself is licensed under MIT. This project itself is based on MIT License,
Some newly added extensions and dependencies may originate from other projects. some newly added extensions and dependencies may originate from the the other projects,
The headers of those source files may also include additional LICENSE and AUTHOR information. and the headers of these code files will also be given additional instructions LICENSE and AUTHOR.
These are similar projects:
- [dixyes/lwmbs](https://github.com/dixyes/lwmbs)
- [swoole/swoole-cli](https://github.com/swoole/swoole-cli)
The project uses some code from [dixyes/lwmbs](https://github.com/dixyes/lwmbs), such as windows static build target and libiconv support.
lwmbs is licensed under the [Mulan PSL 2](http://license.coscl.org.cn/MulanPSL2).
Due to the special nature of this project,
many other open source projects such as curl and protobuf will be used during the project compilation process,
and they all have their own open source licenses.
Please use the `bin/spc dump-license` command to export the open source licenses used in the project after compilation, Please use the `bin/spc dump-license` command to export the open source licenses used in the project after compilation,
and comply with the corresponding project's LICENSE. and comply with the corresponding project's LICENSE.

57
TODO.md Normal file
View File

@@ -0,0 +1,57 @@
# v3 TODO List
Tracking items identified during the v2 → v3 migration audit.
---
## Commands
- [ ] Implement `craft` command (drives full build from `craft.yml`; should be easier with v3 vendor/registry mode)
- [ ] Migrate `micro:combine` command (combine `micro.sfx` with PHP code + INI injection)
- [ ] Implement `dump-extensions` command (extract required extensions from `composer.json` / `composer.lock`)
- [ ] Design and implement v3 dev toolchain commands (WIP — needs design decision):
- [ ] `dev:extensions` / equivalent listing command
- [ ] `dev:php-version`, `dev:ext-version`, `dev:lib-version`
- [ ] Doc generation commands (`dev:gen-ext-docs`, `dev:gen-ext-dep-docs`, `dev:gen-lib-dep-docs`) — pending v3 doc design
---
## Source Patches (SourcePatcher → Artifact migration)
The following v2 `SourcePatcher` hooks are not yet migrated to v3 `src/Package/Artifact/` classes:
- [ ] Migrate `patchSQLSRVWin32` — removes `/sdl` compile flag to prevent Zend build failure on Windows
- [ ] Migrate `patchSQLSRVPhp85` — fixes `pdo_sqlsrv` directory layout for PHP 8.5
- [ ] Migrate `patchYamlWin32` — patches `config.w32` `_a.lib` detection logic for the `yaml` extension
- [ ] Migrate `patchImagickWith84` — applies PHP 8.4 compatibility patch for `imagick` based on version detection
---
## Extension Package Classes (Unix)
Extensions that had non-trivial v2 build logic and are missing a v3 `src/Package/Extension/` class:
- [x] `gettext` — macOS: fix `config.m4` bracket syntax for cross-version compatibility + append frameworks to linker flags (critical for macOS linking; this is a Unix-side gap, not Windows-only)
---
## Windows Extensions (Early Stage)
Windows extension support is still in early stage. The following extensions had Windows-specific configure args or patches in v2 and are pending v3 Windows implementation:
- [ ] `amqp` — Windows configure args
- [ ] `com_dotnet` — Windows-only extension
- [ ] `dom` — remove `dllmain.c` from `config.w32`
- [ ] `ev` — fix `PHP_EV_SHARED` in `config.w32`
- [ ] `gmssl` — add `CHECK_LIB("gmssl.lib")` to `config.w32`
- [ ] `intl` — fix `PHP_INTL_SHARED` in `config.w32`
- [ ] `lz4` — Windows configure args
- [ ] `mbregex` — Windows configure args
- [ ] `sqlsrv` / `pdo_sqlsrv` — complex conditional build logic (independent `sqlsrv` without `pdo_sqlsrv`)
- [ ] `xml` — remove `dllmain.c` from `config.w32`; handles `soap`, `xmlreader`, `xmlwriter`, `simplexml`
---
## Documentation
- [ ] Write v3 user documentation (currently zero v3 docs)

View File

@@ -122,7 +122,7 @@ COPY ./composer.* /app/
ADD ./bin /app/bin ADD ./bin /app/bin
RUN composer install --no-dev RUN composer install --no-dev
ADD ./config /app/config ADD ./config /app/config
ADD ./spc.registry.yml /app/spc.registry.yml ADD ./spc.registry.json /app/spc.registry.json
RUN bin/spc doctor --auto-fix RUN bin/spc doctor --auto-fix
RUN bin/spc install-pkg upx RUN bin/spc install-pkg upx

View File

@@ -1,12 +1,4 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Use SPC_XDEBUG=profile to enable Xdebug profiling mode, which will generate profiling files in /tmp.
# Otherwise, it will enable Xdebug debugging mode, which allows you to connect a debugger to port 9003.
if [ "$SPC_XDEBUG" = "profile" ]; then
XDEBUG_PREFIX="-d xdebug.mode=profile -d xdebug.start_with_request=yes -d xdebug.output_dir=/tmp -d xdebug.output_name=spc-profile.%t.%p.%r"
else
XDEBUG_PREFIX="-d xdebug.mode=debug -d xdebug.client_host=127.0.0.1 -d xdebug.client_port=9003 -d xdebug.start_with_request=yes"
fi
# This script runs the 'spc' command with Xdebug enabled for debugging purposes. # This script runs the 'spc' command with Xdebug enabled for debugging purposes.
php $XDEBUG_PREFIX "$(dirname "$0")/../bin/spc" "$@" php -d xdebug.mode=debug -d xdebug.client_host=127.0.0.1 -d xdebug.client_port=9003 -d xdebug.start_with_request=yes "$(dirname "$0")/../bin/spc" "$@"

236
bin/spc-gnu-docker Executable file
View File

@@ -0,0 +1,236 @@
#!/usr/bin/env bash
set -e
# This file is using docker to run commands
SPC_DOCKER_VERSION=v6
# Detect docker can run
if ! which docker >/dev/null; then
echo "Docker is not installed, please install docker first !"
exit 1
fi
DOCKER_EXECUTABLE="docker"
# shellcheck disable=SC2046
if [ $(id -u) -ne 0 ]; then
if ! docker info > /dev/null 2>&1; then
if [ "$SPC_USE_SUDO" != "yes" ] && [ "$SPC_DOCKER_DEBUG" != "yes" ]; then
echo "Docker command requires sudo"
# shellcheck disable=SC2039
echo -n 'To use sudo to run docker, run "export SPC_USE_SUDO=yes" and run command again'
exit 1
fi
DOCKER_EXECUTABLE="sudo docker"
fi
fi
# Convert uname to gnu arch
CURRENT_ARCH=$(uname -m)
if [ "$CURRENT_ARCH" = "arm64" ]; then
CURRENT_ARCH=aarch64
fi
if [ -z "$SPC_USE_ARCH" ]; then
SPC_USE_ARCH=$CURRENT_ARCH
fi
# parse SPC_USE_ARCH
case $SPC_USE_ARCH in
x86_64|amd64)
SPC_USE_ARCH=x86_64
SPC_USE_ARCH_DOCKER=amd64
if [ "$CURRENT_ARCH" != "x86_64" ]; then
PLATFORM_ARG="--platform linux/amd64"
fi
;;
aarch64|arm64)
SPC_USE_ARCH=aarch64
SPC_USE_ARCH_DOCKER=arm64
if [ "$CURRENT_ARCH" != "aarch64" ]; then
PLATFORM_ARG="--platform linux/arm64"
fi
;;
*)
echo "Current arch is not supported to run in docker: $SPC_USE_ARCH"
exit 1
;;
esac
# detect if we need to use qemu-static
if [ "$SPC_USE_ARCH" != "$CURRENT_ARCH" ]; then
if [ "$(uname -s)" = "Linux" ]; then
echo "* Using different arch needs to setup qemu-static for docker !"
$DOCKER_EXECUTABLE run --rm --privileged multiarch/qemu-user-static --reset -p yes > /dev/null
fi
fi
# Detect docker env is setup
if ! $DOCKER_EXECUTABLE images | grep -q cwcc-spc-gnu-$SPC_USE_ARCH-$SPC_DOCKER_VERSION; then
echo "Docker container does not exist. Building docker image ..."
$DOCKER_EXECUTABLE buildx build $PLATFORM_ARG -t cwcc-spc-gnu-$SPC_USE_ARCH-$SPC_DOCKER_VERSION -f- . <<EOF
FROM centos:7
RUN sed -i 's/mirror.centos.org/vault.centos.org/g' /etc/yum.repos.d/*.repo && \
sed -i 's/^#.*baseurl=http/baseurl=http/g' /etc/yum.repos.d/*.repo && \
sed -i 's/^mirrorlist=http/#mirrorlist=http/g' /etc/yum.repos.d/*.repo
RUN yum clean all && \
yum makecache && \
yum update -y && \
localedef -c -i en_US -f UTF-8 en_US.UTF-8
RUN yum install -y centos-release-scl
RUN if [ "$SPC_USE_ARCH" = "aarch64" ]; then \
sed -i 's|mirror.centos.org/centos|vault.centos.org/altarch|g' /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo ; \
sed -i 's|mirror.centos.org/centos|vault.centos.org/altarch|g' /etc/yum.repos.d/CentOS-SCLo-scl.repo ; \
else \
sed -i 's/mirror.centos.org/vault.centos.org/g' /etc/yum.repos.d/*.repo ; \
fi
RUN sed -i 's/^#.*baseurl=http/baseurl=http/g' /etc/yum.repos.d/*.repo && \
sed -i 's/^mirrorlist=http/#mirrorlist=http/g' /etc/yum.repos.d/*.repo && \
sed -i 's|http://|https://|g' /etc/yum.repos.d/*.repo
RUN yum update -y && \
yum install -y devtoolset-10-gcc-* devtoolset-10-libatomic-devel
RUN echo "source scl_source enable devtoolset-10" >> /etc/bashrc
RUN source /etc/bashrc
RUN yum install -y which
RUN curl -o cmake.tgz -#fSL https://github.com/Kitware/CMake/releases/download/v3.31.4/cmake-3.31.4-linux-$SPC_USE_ARCH.tar.gz && \
mkdir /cmake && \
tar -xzf cmake.tgz -C /cmake --strip-components 1
WORKDIR /app
COPY ./composer.* /app/
ADD ./bin/setup-runtime /app/bin/setup-runtime
ADD ./bin/spc /app/bin/spc
RUN /app/bin/setup-runtime
ADD ./src /app/src
RUN /app/bin/php /app/bin/composer install --no-dev
ENV SPC_LIBC=glibc
ENV PATH="/app/bin:/cmake/bin:/opt/rh/devtoolset-10/root/usr/bin:\$PATH"
ADD ./config /app/config
RUN CC=gcc bin/spc doctor --auto-fix --debug
RUN bin/spc install-pkg upx
RUN if [ -f /app/buildroot/bin/re2c ]; then \
cp /app/buildroot/bin/re2c /usr/local/bin/re2c ;\
fi
RUN curl -o make.tgz -fsSL https://ftp.gnu.org/gnu/make/make-4.4.tar.gz && \
tar -zxvf make.tgz && \
cd make-4.4 && \
./configure && \
make && \
make install && \
ln -sf /usr/local/bin/make /usr/bin/make
RUN curl -o automake.tgz -fsSL https://ftp.gnu.org/gnu/automake/automake-1.17.tar.xz && \
tar -xvf automake.tgz && \
cd automake-1.17 && \
./configure && \
make && \
make install && \
ln -sf /usr/local/bin/automake /usr/bin/automake
RUN mv /app/pkgroot/\$(uname -m)-linux /app/pkgroot-private
ADD bin/docker-entrypoint.sh /bin/docker-entrypoint.sh
RUN chmod +x /bin/docker-entrypoint.sh
ENTRYPOINT ["/bin/docker-entrypoint.sh"]
EOF
fi
# Check if in ci (local terminal can execute with -it)
if [ -t 0 ]; then
INTERACT=-it
else
INTERACT=''
fi
# Mounting volumes
MOUNT_LIST=""
# shellcheck disable=SC2089
MOUNT_LIST="$MOUNT_LIST -v ""$(pwd)""/config:/app/config"
MOUNT_LIST="$MOUNT_LIST -v ""$(pwd)""/src:/app/src"
MOUNT_LIST="$MOUNT_LIST -v ""$(pwd)""/buildroot:/app/buildroot"
MOUNT_LIST="$MOUNT_LIST -v ""$(pwd)""/source:/app/source"
MOUNT_LIST="$MOUNT_LIST -v ""$(pwd)""/dist:/app/dist"
MOUNT_LIST="$MOUNT_LIST -v ""$(pwd)""/downloads:/app/downloads"
MOUNT_LIST="$MOUNT_LIST -v ""$(pwd)""/pkgroot:/app/pkgroot"
MOUNT_LIST="$MOUNT_LIST -v ""$(pwd)""/log:/app/log"
if [ -f "$(pwd)/craft.yml" ]; then
MOUNT_LIST="$MOUNT_LIST -v ""$(pwd)""/craft.yml:/app/craft.yml"
fi
# Apply env in temp env file
echo 'SPC_DEFAULT_C_FLAGS=-fPIC' > /tmp/spc-gnu-docker.env
echo 'SPC_LIBC=glibc' >> /tmp/spc-gnu-docker.env
# Environment variable passthrough
ENV_LIST=""
ENV_LIST="$ENV_LIST -e SPC_FIX_DEPLOY_ROOT="$(pwd)""
if [ ! -z "$GITHUB_TOKEN" ]; then
ENV_LIST="$ENV_LIST -e GITHUB_TOKEN=$GITHUB_TOKEN"
fi
# Intercept and rewrite --with-frankenphp-app option, and mount host path to /app/app
FRANKENPHP_APP_PATH=""
NEW_ARGS=()
while [ $# -gt 0 ]; do
case "$1" in
--with-frankenphp-app=*)
FRANKENPHP_APP_PATH="${1#*=}"
NEW_ARGS+=("--with-frankenphp-app=/app/app")
shift
;;
--with-frankenphp-app)
if [ -n "${2:-}" ]; then
FRANKENPHP_APP_PATH="$2"
NEW_ARGS+=("--with-frankenphp-app=/app/app")
shift 2
else
NEW_ARGS+=("$1")
shift
fi
;;
*)
NEW_ARGS+=("$1")
shift
;;
esac
done
# Normalize the path and add mount if provided
if [ -n "$FRANKENPHP_APP_PATH" ]; then
# expand ~ to $HOME
if [ "${FRANKENPHP_APP_PATH#~}" != "$FRANKENPHP_APP_PATH" ]; then
FRANKENPHP_APP_PATH="$HOME${FRANKENPHP_APP_PATH#~}"
fi
# make absolute if relative
case "$FRANKENPHP_APP_PATH" in
/*) ABS_APP_PATH="$FRANKENPHP_APP_PATH" ;;
*) ABS_APP_PATH="$(pwd)/$FRANKENPHP_APP_PATH" ;;
esac
MOUNT_LIST="$MOUNT_LIST -v $ABS_APP_PATH:/app/app"
fi
# Run docker
# shellcheck disable=SC2068
# shellcheck disable=SC2086
# shellcheck disable=SC2090
if [ "$SPC_DOCKER_DEBUG" = "yes" ]; then
echo "* Debug mode enabled, run docker in interactive mode."
echo "* You can use 'exit' to exit the docker container."
echo "* You can use 'bin/spc' like normal builds."
echo "*"
echo "* Mounted directories:"
echo "* ./config: $(pwd)/config"
echo "* ./src: $(pwd)/src"
echo "* ./buildroot: $(pwd)/buildroot"
echo "* ./source: $(pwd)/source"
echo "* ./dist: $(pwd)/dist"
echo "* ./downloads: $(pwd)/downloads"
echo "* ./pkgroot: $(pwd)/pkgroot"
echo "*"
set -ex
$DOCKER_EXECUTABLE run $PLATFORM_ARG --privileged --rm -it $INTERACT $ENV_LIST --env-file /tmp/spc-gnu-docker.env $MOUNT_LIST cwcc-spc-gnu-$SPC_USE_ARCH-$SPC_DOCKER_VERSION /bin/bash
else
$DOCKER_EXECUTABLE run $PLATFORM_ARG --rm $INTERACT $ENV_LIST --env-file /tmp/spc-gnu-docker.env $MOUNT_LIST cwcc-spc-gnu-$SPC_USE_ARCH-$SPC_DOCKER_VERSION bin/spc "${NEW_ARGS[@]}"
fi

View File

@@ -10,6 +10,7 @@
"config", "config",
"src", "src",
"vendor/psr", "vendor/psr",
"vendor/laravel/prompts",
"vendor/symfony", "vendor/symfony",
"vendor/php-di", "vendor/php-di",
"vendor/zhamao" "vendor/zhamao"

View File

@@ -12,8 +12,10 @@
"php": ">=8.4", "php": ">=8.4",
"ext-mbstring": "*", "ext-mbstring": "*",
"ext-zlib": "*", "ext-zlib": "*",
"laravel/prompts": "~0.1",
"php-di/php-di": "^7.1", "php-di/php-di": "^7.1",
"symfony/console": "^5.4 || ^6 || ^7", "symfony/console": "^5.4 || ^6 || ^7",
"symfony/process": "^7.2",
"symfony/yaml": "^7.2", "symfony/yaml": "^7.2",
"zhamao/logger": "^1.1.4" "zhamao/logger": "^1.1.4"
}, },
@@ -27,6 +29,7 @@
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"SPC\\": "src/SPC",
"StaticPHP\\": "src/StaticPHP", "StaticPHP\\": "src/StaticPHP",
"Package\\": "src/Package" "Package\\": "src/Package"
}, },
@@ -46,7 +49,7 @@
"scripts": { "scripts": {
"analyse": "phpstan analyse --memory-limit 300M", "analyse": "phpstan analyse --memory-limit 300M",
"cs-fix": "php-cs-fixer fix", "cs-fix": "php-cs-fixer fix",
"lint-config": "php bin/spc dev:lint-config", "lint-config": "bin/spc dev:lint-config",
"test": "vendor/bin/phpunit tests/ --no-coverage", "test": "vendor/bin/phpunit tests/ --no-coverage",
"build:phar": "vendor/bin/box compile" "build:phar": "vendor/bin/box compile"
}, },
@@ -60,9 +63,6 @@
"optimize-autoloader": true, "optimize-autoloader": true,
"sort-packages": true "sort-packages": true
}, },
"suggest": {
"ext-yaml": "Speeds up YAML config file parsing"
},
"funding": [ "funding": [
{ {
"type": "other", "type": "other",

978
composer.lock generated

File diff suppressed because it is too large Load Diff

1061
config/artifact.json Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,12 +1,9 @@
ncurses: ncurses:
binary: hosted
metadata: metadata:
license-files: license-files:
- COPYING - COPYING
source: source:
type: filelist type: filelist
url: 'https://ftp.gnu.org/gnu/ncurses/' url: 'https://ftp.gnu.org/pub/gnu/ncurses/'
regex: '/href="(?<file>ncurses-(?<version>[^"]+)\.tar\.gz)"/'
source-mirror:
type: filelist
url: 'https://ftpmirror.gnu.org/gnu/ncurses/'
regex: '/href="(?<file>ncurses-(?<version>[^"]+)\.tar\.gz)"/' regex: '/href="(?<file>ncurses-(?<version>[^"]+)\.tar\.gz)"/'

View File

@@ -68,8 +68,8 @@ SPC_PRESERVE_LOGS="no"
[windows] [windows]
; build target: win7-static ; build target: win7-static
SPC_TARGET=native-windows SPC_TARGET=native-windows
; MSYS2 root directory (msys64 subfolder), used by the Windows toolchain ; php-sdk-binary-tools path
SPC_MSYS2_PATH="${PKG_ROOT_PATH}\msys2-build-essentials\msys64" PHP_SDK_PATH="${WORKING_DIR}\php-sdk-binary-tools"
; upx executable path ; upx executable path
UPX_EXEC="${PKG_ROOT_PATH}\bin\upx.exe" UPX_EXEC="${PKG_ROOT_PATH}\bin\upx.exe"
; phpmicro patches, for more info, see: https://github.com/easysoft/phpmicro/tree/master/patches ; phpmicro patches, for more info, see: https://github.com/easysoft/phpmicro/tree/master/patches
@@ -94,7 +94,7 @@ SPC_MICRO_PATCHES=static_extensions_win32,cli_checks,disable_huge_page,vcruntime
; `native-native` - links against system libc dynamically ; `native-native` - links against system libc dynamically
; `native-native-musl` - links against musl libc statically ; `native-native-musl` - links against musl libc statically
; `native-native-musl -dynamic` - links against musl libc dynamically ; `native-native-musl -dynamic` - links against musl libc dynamically
SPC_TARGET=${GNU_ARCH}-linux-musl SPC_TARGET=native-native-musl
; compiler environments (default value is defined by selected toolchain) ; compiler environments (default value is defined by selected toolchain)
CC=${SPC_DEFAULT_CC} CC=${SPC_DEFAULT_CC}
@@ -102,9 +102,9 @@ CXX=${SPC_DEFAULT_CXX}
AR=${SPC_DEFAULT_AR} AR=${SPC_DEFAULT_AR}
LD=${SPC_DEFAULT_LD} LD=${SPC_DEFAULT_LD}
; default compiler flags, used in CMake toolchain file, openssl and pkg-config build ; default compiler flags, used in CMake toolchain file, openssl and pkg-config build
SPC_DEFAULT_CFLAGS="-fPIC -O3 -pipe -fno-plt -fno-semantic-interposition -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -ffunction-sections -fdata-sections" SPC_DEFAULT_C_FLAGS="-fPIC -Os"
SPC_DEFAULT_CXXFLAGS="${SPC_DEFAULT_CFLAGS}" SPC_DEFAULT_CXX_FLAGS="-fPIC -Os"
SPC_DEFAULT_LDFLAGS="-Wl,-z,relro -Wl,--as-needed -Wl,-z,now -Wl,-z,noexecstack -Wl,--gc-sections" SPC_DEFAULT_LD_FLAGS=""
; upx executable path ; upx executable path
UPX_EXEC=${PKG_ROOT_PATH}/bin/upx UPX_EXEC=${PKG_ROOT_PATH}/bin/upx
; phpmicro patches, for more info, see: https://github.com/easysoft/phpmicro/tree/master/patches ; phpmicro patches, for more info, see: https://github.com/easysoft/phpmicro/tree/master/patches
@@ -114,15 +114,15 @@ SPC_MICRO_PATCHES=cli_checks,disable_huge_page
; buildconf command ; buildconf command
SPC_CMD_PREFIX_PHP_BUILDCONF="./buildconf --force" SPC_CMD_PREFIX_PHP_BUILDCONF="./buildconf --force"
; configure command ; configure command
SPC_CMD_PREFIX_PHP_CONFIGURE="./configure --prefix= --with-valgrind=no --disable-shared --enable-static --disable-all --disable-phpdbg --enable-rtld-now --enable-re2c-cgoto --disable-rpath --with-pic" SPC_CMD_PREFIX_PHP_CONFIGURE="./configure --prefix= --with-valgrind=no --disable-shared --enable-static --disable-all --disable-phpdbg --with-pic"
; *** default build vars for building php *** ; *** default build vars for building php ***
; embed type for php, static (libphp.a) or shared (libphp.so) ; embed type for php, static (libphp.a) or shared (libphp.so)
SPC_CMD_VAR_PHP_EMBED_TYPE="static" SPC_CMD_VAR_PHP_EMBED_TYPE="static"
; EXTRA_CFLAGS for `configure` and `make` php ; EXTRA_CFLAGS for `configure` and `make` php
SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS="-g -fstack-protector-strong -fno-ident -fPIE -fvisibility=hidden -fvisibility-inlines-hidden ${SPC_DEFAULT_CFLAGS}" SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS="-g -fstack-protector-strong -fno-ident -fPIE ${SPC_DEFAULT_C_FLAGS}"
; EXTRA_CXXFLAGS for `configure` and `make` php ; EXTRA_CXXFLAGS for `configure` and `make` php
SPC_CMD_VAR_PHP_MAKE_EXTRA_CXXFLAGS="-g -fstack-protector-strong -fno-ident -fPIE -fvisibility=hidden -fvisibility-inlines-hidden ${SPC_DEFAULT_CXXFLAGS}" SPC_CMD_VAR_PHP_MAKE_EXTRA_CXXFLAGS="-g -fstack-protector-strong -fno-ident -fPIE ${SPC_DEFAULT_CXX_FLAGS}"
; EXTRA_LDFLAGS for `make` php, can use -release to set a soname for libphp.so ; EXTRA_LDFLAGS for `make` php, can use -release to set a soname for libphp.so
SPC_CMD_VAR_PHP_MAKE_EXTRA_LDFLAGS="" SPC_CMD_VAR_PHP_MAKE_EXTRA_LDFLAGS=""
@@ -142,9 +142,9 @@ CXX=${SPC_DEFAULT_CXX}
AR=${SPC_DEFAULT_AR} AR=${SPC_DEFAULT_AR}
LD=${SPC_DEFAULT_LD} LD=${SPC_DEFAULT_LD}
; default compiler flags, used in CMake toolchain file, openssl and pkg-config build ; default compiler flags, used in CMake toolchain file, openssl and pkg-config build
SPC_DEFAULT_CFLAGS="--target=${MAC_ARCH}-apple-darwin -O3 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -ffunction-sections -fdata-sections" SPC_DEFAULT_C_FLAGS="--target=${MAC_ARCH}-apple-darwin -Os"
SPC_DEFAULT_CXXFLAGS="${SPC_DEFAULT_CFLAGS}" SPC_DEFAULT_CXX_FLAGS="--target=${MAC_ARCH}-apple-darwin -Os"
SPC_DEFAULT_LDFLAGS="-Wl,-dead_strip" SPC_DEFAULT_LD_FLAGS=""
; phpmicro patches, for more info, see: https://github.com/easysoft/phpmicro/tree/master/patches ; phpmicro patches, for more info, see: https://github.com/easysoft/phpmicro/tree/master/patches
SPC_MICRO_PATCHES=cli_checks,macos_iconv SPC_MICRO_PATCHES=cli_checks,macos_iconv
@@ -152,15 +152,15 @@ SPC_MICRO_PATCHES=cli_checks,macos_iconv
; buildconf command ; buildconf command
SPC_CMD_PREFIX_PHP_BUILDCONF="./buildconf --force" SPC_CMD_PREFIX_PHP_BUILDCONF="./buildconf --force"
; configure command ; configure command
SPC_CMD_PREFIX_PHP_CONFIGURE="./configure --prefix= --with-valgrind=no --disable-shared --enable-static --disable-all --disable-phpdbg --enable-rtld-now --enable-re2c-cgoto --disable-rpath --with-pic" SPC_CMD_PREFIX_PHP_CONFIGURE="./configure --prefix= --with-valgrind=no --enable-shared=no --enable-static=yes --disable-all --disable-phpdbg"
; *** default build vars for building php *** ; *** default build vars for building php ***
; embed type for php, static (libphp.a) or shared (libphp.dylib) ; embed type for php, static (libphp.a) or shared (libphp.dylib)
SPC_CMD_VAR_PHP_EMBED_TYPE="static" SPC_CMD_VAR_PHP_EMBED_TYPE="static"
; EXTRA_CFLAGS for `configure` and `make` php ; EXTRA_CFLAGS for `configure` and `make` php
SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS="-g -fstack-protector-strong -fpic -fpie -fvisibility=hidden -fvisibility-inlines-hidden -Werror=unknown-warning-option ${SPC_DEFAULT_CFLAGS}" SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS="-g -fstack-protector-strong -fpic -fpie -Werror=unknown-warning-option ${SPC_DEFAULT_C_FLAGS}"
; EXTRA_CXXFLAGS for `configure` and `make` php ; EXTRA_CXXFLAGS for `configure` and `make` php
SPC_CMD_VAR_PHP_MAKE_EXTRA_CXXFLAGS="-g -fstack-protector-strong -fno-ident -fpie -fvisibility=hidden -fvisibility-inlines-hidden -Werror=unknown-warning-option ${SPC_DEFAULT_CXXFLAGS}" SPC_CMD_VAR_PHP_MAKE_EXTRA_CXXFLAGS="-g -fstack-protector-strong -fno-ident -fpie -Werror=unknown-warning-option ${SPC_DEFAULT_CXX_FLAGS}"
; EXTRA_LDFLAGS for `make` php, can use -release to set a soname for libphp.dylib ; EXTRA_LDFLAGS for `make` php, can use -release to set a soname for libphp.dylib
SPC_CMD_VAR_PHP_MAKE_EXTRA_LDFLAGS="" SPC_CMD_VAR_PHP_MAKE_EXTRA_LDFLAGS=""
; minimum compatible macOS version (LLVM vars, availability not guaranteed) ; minimum compatible macOS version (LLVM vars, availability not guaranteed)

1292
config/ext.json Normal file

File diff suppressed because it is too large Load Diff

1065
config/lib.json Normal file

File diff suppressed because it is too large Load Diff

1520
config/pkg.ext.json Normal file

File diff suppressed because it is too large Load Diff

992
config/pkg.lib.json Normal file
View File

@@ -0,0 +1,992 @@
{
"attr": {
"artifact": "attr",
"license": {
"type": "file",
"path": "doc/COPYING.LGPL"
},
"type": "library"
},
"brotli": {
"artifact": "brotli",
"headers": [
"brotli"
],
"license": {
"type": "file",
"path": "LICENSE"
},
"pkg-configs": [
"libbrotlicommon",
"libbrotlidec",
"libbrotlienc"
],
"type": "library"
},
"bzip2": {
"artifact": "bzip2",
"headers": [
"bzlib.h"
],
"license": {
"type": "text",
"text": "This program, \"bzip2\", the associated library \"libbzip2\", and all documentation, are copyright (C) 1996-2010 Julian R Seward. All rights reserved. \n\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n 2. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.\n 3. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.\n 4. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nJulian Seward, jseward@bzip.org bzip2/libbzip2 version 1.0.6 of 6 September 2010\n\nPATENTS: To the best of my knowledge, bzip2 and libbzip2 do not use any patented algorithms. However, I do not have the resources to carry out a patent search. Therefore I cannot give any guarantee of the above statement."
},
"type": "library"
},
"curl": {
"artifact": "curl",
"depends": [
"openssl",
"zlib"
],
"depends@windows": [
"zlib",
"libssh2",
"nghttp2"
],
"frameworks": [
"CoreFoundation",
"CoreServices",
"SystemConfiguration"
],
"headers": [
"curl"
],
"license": {
"type": "file",
"path": "COPYING"
},
"suggests": [
"libssh2",
"brotli",
"nghttp2",
"nghttp3",
"ngtcp2",
"zstd",
"libcares",
"ldap"
],
"suggests@windows": [
"brotli",
"zstd"
],
"type": "library"
},
"fastlz": {
"artifact": "fastlz",
"headers": [
"fastlz/fastlz.h"
],
"license": {
"type": "file",
"path": "LICENSE.MIT"
},
"type": "library"
},
"freetype": {
"artifact": "freetype",
"depends": [
"zlib"
],
"headers": [
"freetype2/freetype/freetype.h",
"freetype2/ft2build.h"
],
"license": {
"type": "file",
"path": "LICENSE.TXT"
},
"suggests": [
"libpng",
"bzip2",
"brotli"
],
"type": "library"
},
"gettext": {
"artifact": "gettext",
"depends": [
"libiconv"
],
"frameworks": [
"CoreFoundation"
],
"license": {
"type": "file",
"path": "gettext-runtime/intl/COPYING.LIB"
},
"suggests": [
"ncurses",
"libxml2"
],
"type": "library"
},
"glfw": {
"artifact": "ext-glfw",
"frameworks": [
"CoreVideo",
"OpenGL",
"Cocoa",
"IOKit"
],
"license": {
"type": "file",
"path": "LICENSE"
},
"type": "library"
},
"gmp": {
"artifact": "gmp",
"headers": [
"gmp.h"
],
"license": {
"type": "text",
"text": "Since version 6, GMP is distributed under the dual licenses, GNU LGPL v3 and GNU GPL v2. These licenses make the library free to use, share, and improve, and allow you to pass on the result. The GNU licenses give freedoms, but also set firm restrictions on the use with non-free programs."
},
"type": "library"
},
"gmssl": {
"artifact": "gmssl",
"frameworks": [
"Security"
],
"license": {
"type": "file",
"path": "LICENSE"
},
"type": "library"
},
"grpc": {
"artifact": "grpc",
"depends": [
"zlib",
"openssl",
"libcares"
],
"frameworks": [
"CoreFoundation"
],
"license": {
"type": "file",
"path": "LICENSE"
},
"pkg-configs": [
"grpc"
],
"type": "library"
},
"icu": {
"artifact": "icu",
"license": {
"type": "file",
"path": "LICENSE"
},
"pkg-configs": [
"icu-uc",
"icu-i18n",
"icu-io"
],
"type": "library"
},
"icu-static-win": {
"artifact": "icu-static-win",
"headers@windows": [
"unicode"
],
"license": {
"type": "text",
"text": "none"
},
"type": "library"
},
"imagemagick": {
"artifact": "imagemagick",
"depends": [
"zlib",
"libjpeg",
"libjxl",
"libpng",
"libwebp",
"freetype",
"libtiff",
"libheif",
"bzip2"
],
"license": {
"type": "file",
"path": "LICENSE"
},
"pkg-configs": [
"Magick++-7.Q16HDRI",
"MagickCore-7.Q16HDRI",
"MagickWand-7.Q16HDRI"
],
"suggests": [
"zstd",
"xz",
"libzip",
"libxml2"
],
"type": "library"
},
"imap": {
"artifact": "imap",
"license": {
"type": "file",
"path": "LICENSE"
},
"suggests": [
"openssl"
],
"type": "library"
},
"jbig": {
"artifact": "jbig",
"headers": [
"jbig.h",
"jbig85.h",
"jbig_ar.h"
],
"license": {
"type": "file",
"path": "COPYING"
},
"type": "library"
},
"ldap": {
"artifact": "ldap",
"depends": [
"openssl",
"zlib",
"gmp",
"libsodium"
],
"license": {
"type": "file",
"path": "LICENSE"
},
"pkg-configs": [
"ldap",
"lber"
],
"type": "library"
},
"lerc": {
"artifact": "lerc",
"license": {
"type": "file",
"path": "LICENSE"
},
"type": "library"
},
"libacl": {
"artifact": "libacl",
"depends": [
"attr"
],
"license": {
"type": "file",
"path": "doc/COPYING.LGPL"
},
"type": "library"
},
"libaom": {
"artifact": "libaom",
"license": {
"type": "file",
"path": "LICENSE"
},
"type": "library"
},
"libargon2": {
"artifact": "libargon2",
"license": {
"type": "file",
"path": "LICENSE"
},
"type": "library"
},
"libavif": {
"artifact": "libavif",
"license": {
"type": "file",
"path": "LICENSE"
},
"type": "library"
},
"libcares": {
"artifact": "libcares",
"headers": [
"ares.h",
"ares_dns.h",
"ares_nameser.h"
],
"license": {
"type": "file",
"path": "LICENSE.md"
},
"type": "library"
},
"libde265": {
"artifact": "libde265",
"license": {
"type": "file",
"path": "COPYING"
},
"type": "library"
},
"libedit": {
"artifact": "libedit",
"depends": [
"ncurses"
],
"license": {
"type": "file",
"path": "COPYING"
},
"type": "library"
},
"libevent": {
"artifact": "libevent",
"depends": [
"openssl"
],
"license": {
"type": "file",
"path": "LICENSE"
},
"type": "library"
},
"libffi": {
"artifact": "libffi",
"headers": [
"ffi.h",
"ffitarget.h"
],
"headers@windows": [
"ffi.h",
"fficonfig.h",
"ffitarget.h"
],
"license": {
"type": "file",
"path": "LICENSE"
},
"type": "library"
},
"libffi-win": {
"artifact": "libffi-win",
"headers@windows": [
"ffi.h",
"ffitarget.h",
"fficonfig.h"
],
"license": {
"type": "file",
"path": "LICENSE"
},
"type": "library"
},
"libheif": {
"artifact": "libheif",
"depends": [
"libde265",
"libwebp",
"libaom",
"zlib",
"brotli"
],
"license": {
"type": "file",
"path": "COPYING"
},
"type": "library"
},
"libiconv": {
"artifact": "libiconv",
"headers": [
"iconv.h",
"libcharset.h",
"localcharset.h"
],
"license": {
"type": "file",
"path": "COPYING.LIB"
},
"type": "library"
},
"libiconv-win": {
"artifact": "libiconv-win",
"license": {
"type": "file",
"path": "source/COPYING"
},
"type": "library"
},
"libjpeg": {
"artifact": "libjpeg",
"license": {
"type": "file",
"path": "LICENSE.md"
},
"suggests@windows": [
"zlib"
],
"type": "library"
},
"libjxl": {
"artifact": "libjxl",
"depends": [
"brotli",
"libjpeg",
"libpng",
"libwebp"
],
"license": {
"type": "file",
"path": "LICENSE"
},
"pkg-configs": [
"libjxl",
"libjxl_cms",
"libjxl_threads",
"libhwy"
],
"type": "library"
},
"liblz4": {
"artifact": "liblz4",
"license": {
"type": "file",
"path": "LICENSE"
},
"type": "library"
},
"libmemcached": {
"artifact": "libmemcached",
"license": {
"type": "file",
"path": "LICENSE"
},
"type": "library"
},
"libpng": {
"artifact": "libpng",
"depends": [
"zlib"
],
"headers": [
"png.h",
"pngconf.h",
"pnglibconf.h"
],
"headers@windows": [
"png.h",
"pngconf.h"
],
"license": {
"type": "file",
"path": "LICENSE"
},
"type": "library"
},
"librabbitmq": {
"artifact": "librabbitmq",
"depends": [
"openssl"
],
"license": {
"type": "file",
"path": "LICENSE"
},
"type": "library"
},
"librdkafka": {
"artifact": "librdkafka",
"license": {
"type": "file",
"path": "LICENSE"
},
"pkg-configs": [
"rdkafka++-static",
"rdkafka-static"
],
"suggests": [
"curl",
"liblz4",
"openssl",
"zlib",
"zstd"
],
"type": "library"
},
"libsodium": {
"artifact": "libsodium",
"license": {
"type": "file",
"path": "LICENSE"
},
"type": "library"
},
"libssh2": {
"artifact": "libssh2",
"depends": [
"openssl"
],
"headers": [
"libssh2.h",
"libssh2_publickey.h",
"libssh2_sftp.h"
],
"license": {
"type": "file",
"path": "COPYING"
},
"type": "library"
},
"libtiff": {
"artifact": "libtiff",
"depends": [
"zlib",
"libjpeg"
],
"license": {
"type": "file",
"path": "LICENSE.md"
},
"suggests": [
"lerc",
"libwebp",
"jbig",
"xz",
"zstd"
],
"type": "library"
},
"liburing": {
"artifact": "liburing",
"headers@linux": [
"liburing/",
"liburing.h"
],
"license": {
"type": "file",
"path": "COPYING"
},
"pkg-configs": [
"liburing",
"liburing-ffi"
],
"type": "library"
},
"libuuid": {
"artifact": "libuuid",
"headers": [
"uuid/uuid.h"
],
"license": {
"type": "file",
"path": "COPYING"
},
"type": "library"
},
"libuv": {
"artifact": "libuv",
"license": [
{
"type": "file",
"path": "LICENSE"
},
{
"type": "file",
"path": "LICENSE-extra"
}
],
"type": "library"
},
"libwebp": {
"artifact": "libwebp",
"license": {
"type": "file",
"path": "COPYING"
},
"pkg-configs": [
"libwebp",
"libwebpdecoder",
"libwebpdemux",
"libwebpmux",
"libsharpyuv"
],
"type": "library"
},
"libxml2": {
"artifact": "libxml2",
"depends": [
"libiconv"
],
"depends@windows": [
"libiconv-win"
],
"headers": [
"libxml2"
],
"license": {
"type": "file",
"path": "Copyright"
},
"pkg-configs": [
"libxml-2.0"
],
"suggests": [
"xz",
"zlib"
],
"suggests@windows": [
"zlib"
],
"type": "library"
},
"libxslt": {
"artifact": "libxslt",
"depends": [
"libxml2"
],
"license": {
"type": "file",
"path": "Copyright"
},
"type": "library"
},
"libyaml": {
"artifact": "libyaml",
"headers": [
"yaml.h"
],
"license": {
"type": "file",
"path": "License"
},
"type": "library"
},
"libzip": {
"artifact": "libzip",
"depends": [
"zlib"
],
"depends@windows": [
"zlib",
"bzip2",
"xz"
],
"headers": [
"zip.h",
"zipconf.h"
],
"license": {
"type": "file",
"path": "LICENSE"
},
"suggests": [
"bzip2",
"xz",
"zstd",
"openssl"
],
"suggests@windows": [
"zstd",
"openssl"
],
"type": "library"
},
"mimalloc": {
"artifact": "mimalloc",
"license": {
"type": "file",
"path": "LICENSE"
},
"type": "library"
},
"ncurses": {
"artifact": "ncurses",
"license": {
"type": "file",
"path": "COPYING"
},
"static-libs@unix": [
"libncurses.a"
],
"type": "library"
},
"net-snmp": {
"artifact": "net-snmp",
"depends": [
"openssl",
"zlib"
],
"license": {
"type": "file",
"path": "COPYING"
},
"pkg-configs": [
"netsnmp",
"netsnmp-agent"
],
"type": "library"
},
"nghttp2": {
"artifact": "nghttp2",
"depends": [
"zlib",
"openssl"
],
"headers": [
"nghttp2"
],
"license": {
"type": "file",
"path": "COPYING"
},
"suggests": [
"libxml2",
"nghttp3",
"ngtcp2"
],
"type": "library"
},
"nghttp3": {
"artifact": "nghttp3",
"depends": [
"openssl"
],
"headers": [
"nghttp3"
],
"license": {
"type": "file",
"path": "COPYING"
},
"type": "library"
},
"ngtcp2": {
"artifact": "ngtcp2",
"depends": [
"openssl"
],
"headers": [
"ngtcp2"
],
"license": {
"type": "file",
"path": "COPYING"
},
"suggests": [
"nghttp3",
"brotli"
],
"type": "library"
},
"onig": {
"artifact": "onig",
"headers": [
"oniggnu.h",
"oniguruma.h"
],
"license": {
"type": "file",
"path": "COPYING"
},
"type": "library"
},
"openssl": {
"artifact": "openssl",
"depends": [
"zlib"
],
"headers": [
"openssl"
],
"license": {
"type": "file",
"path": "LICENSE.txt"
},
"type": "library"
},
"postgresql": {
"artifact": "postgresql",
"depends": [
"libiconv",
"libxml2",
"openssl",
"zlib",
"libedit"
],
"license": {
"type": "file",
"path": "COPYRIGHT"
},
"pkg-configs": [
"libpq"
],
"suggests": [
"icu",
"libxslt",
"ldap",
"zstd"
],
"type": "library"
},
"postgresql-win": {
"artifact": "postgresql-win",
"license": {
"type": "text",
"text": "PostgreSQL Database Management System\n(also known as Postgres, formerly as Postgres95)\n\nPortions Copyright (c) 1996-2025, The PostgreSQL Global Development Group\n\nPortions Copyright (c) 1994, The Regents of the University of California\n\nPermission to use, copy, modify, and distribute this software and its\ndocumentation for any purpose, without fee, and without a written\nagreement is hereby granted, provided that the above copyright notice\nand this paragraph and the following two paragraphs appear in all\ncopies.\n\nIN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY\nFOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,\nINCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS\nDOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF\nTHE POSSIBILITY OF SUCH DAMAGE.\n\nTHE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,\nINCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS\nON AN \"AS IS\" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS\nTO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
},
"type": "library"
},
"pthreads4w": {
"artifact": "pthreads4w",
"license": {
"type": "file",
"path": "LICENSE"
},
"type": "library"
},
"qdbm": {
"artifact": "qdbm",
"headers@windows": [
"depot.h"
],
"license": {
"type": "file",
"path": "COPYING"
},
"type": "library"
},
"re2c": {
"artifact": "re2c",
"license": {
"type": "file",
"path": "LICENSE"
},
"type": "library"
},
"readline": {
"artifact": "readline",
"depends": [
"ncurses"
],
"license": {
"type": "file",
"path": "COPYING"
},
"type": "library"
},
"snappy": {
"artifact": "snappy",
"depends": [
"zlib"
],
"headers": [
"snappy.h",
"snappy-c.h",
"snappy-sinksource.h",
"snappy-stubs-public.h"
],
"license": {
"type": "file",
"path": "COPYING"
},
"type": "library"
},
"sqlite": {
"artifact": "sqlite",
"headers": [
"sqlite3.h",
"sqlite3ext.h"
],
"license": {
"type": "text",
"text": "The author disclaims copyright to this source code. In place of\na legal notice, here is a blessing:\n\n * May you do good and not evil.\n * May you find forgiveness for yourself and forgive others.\n * May you share freely, never taking more than you give."
},
"type": "library"
},
"tidy": {
"artifact": "tidy",
"license": {
"type": "file",
"path": "README/LICENSE.md"
},
"type": "library"
},
"unixodbc": {
"artifact": "unixodbc",
"depends": [
"libiconv"
],
"license": {
"type": "file",
"path": "COPYING"
},
"type": "library"
},
"watcher": {
"artifact": "watcher",
"headers": [
"wtr/watcher-c.h"
],
"license": {
"type": "file",
"path": "license"
},
"type": "library"
},
"xz": {
"artifact": "xz",
"depends": [
"libiconv"
],
"headers": [
"lzma"
],
"headers@windows": [
"lzma",
"lzma.h"
],
"license": {
"type": "file",
"path": "COPYING"
},
"type": "library"
},
"zlib": {
"artifact": "zlib",
"headers": [
"zlib.h",
"zconf.h"
],
"license": {
"type": "text",
"text": "(C) 1995-2022 Jean-loup Gailly and Mark Adler\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\n claim that you wrote the original software. If you use this software\n in a product, an acknowledgment in the product documentation would be\n appreciated but is not required.\n2. Altered source versions must be plainly marked as such, and must not be\n misrepresented as being the original software.\n3. This notice may not be removed or altered from any source distribution.\n\nJean-loup Gailly Mark Adler\njloup@gzip.org madler@alumni.caltech.edu"
},
"type": "library"
},
"zstd": {
"artifact": "zstd",
"headers": [
"zdict.h",
"zstd.h",
"zstd_errors.h"
],
"headers@windows": [
"zstd.h",
"zstd_errors.h"
],
"license": {
"type": "file",
"path": "LICENSE"
},
"type": "library"
}
}

View File

@@ -9,12 +9,6 @@ ext-bz2:
arg-type@windows: with arg-type@windows: with
ext-calendar: ext-calendar:
type: php-extension type: php-extension
ext-com_dotnet:
type: php-extension
php-extension:
os:
- Windows
arg-type@windows: '--enable-com-dotnet=yes'
ext-ctype: ext-ctype:
type: php-extension type: php-extension
ext-curl: ext-curl:
@@ -36,20 +30,17 @@ ext-dba:
ext-dom: ext-dom:
type: php-extension type: php-extension
depends: depends:
- libxml2
- ext-xml - ext-xml
php-extension: php-extension:
arg-type: enable arg-type: '--enable-dom@shared_suffix@ --with-libxml=@build_root_path@'
arg-type@windows: with arg-type@windows: with
ext-exif: ext-exif:
type: php-extension type: php-extension
depends@windows:
- ext-mbstring
ext-ffi: ext-ffi:
type: php-extension type: php-extension
depends@unix: depends@unix:
- libffi - libffi
depends@windows:
- libffi-win
php-extension: php-extension:
arg-type@unix: '--with-ffi=@shared_suffix@ --enable-zend-signals' arg-type@unix: '--with-ffi=@shared_suffix@ --enable-zend-signals'
arg-type@windows: with arg-type@windows: with
@@ -74,37 +65,28 @@ ext-gd:
- freetype - freetype
php-extension: php-extension:
arg-type: custom arg-type: custom
arg-type@windows: with
ext-gettext: ext-gettext:
type: php-extension type: php-extension
depends@unix: depends:
- gettext - gettext
depends@windows:
- gettext-win
php-extension: php-extension:
arg-type: with-path arg-type: with-path
arg-type@windows: with
ext-gmp: ext-gmp:
type: php-extension type: php-extension
depends@unix: depends:
- gmp - gmp
depends@windows:
- mpir
php-extension: php-extension:
arg-type: with-path arg-type: with-path
arg-type@windows: with
ext-iconv: ext-iconv:
type: php-extension type: php-extension
depends@unix: depends@unix:
- libiconv - libiconv
depends@windows:
- libiconv-win
php-extension: php-extension:
arg-type@unix: with-path arg-type@unix: with-path
arg-type@windows: with arg-type@windows: with
ext-intl: ext-intl:
type: php-extension type: php-extension
depends: depends@unix:
- icu - icu
ext-ldap: ext-ldap:
type: php-extension type: php-extension
@@ -115,20 +97,15 @@ ext-ldap:
- libsodium - libsodium
- ext-openssl - ext-openssl
php-extension: php-extension:
os:
- Linux
- Darwin
arg-type: with-path arg-type: with-path
arg-type@windows: with
ext-libxml: ext-libxml:
type: php-extension type: php-extension
depends: depends:
- libxml2 - ext-xml
php-extension: php-extension:
build-with-php: true build-with-php: true
build-shared: false build-shared: false
arg-type@unix: with-path arg-type: none
arg-type@windows: with
ext-mbregex: ext-mbregex:
type: php-extension type: php-extension
depends: depends:
@@ -164,7 +141,6 @@ ext-odbc:
- unixodbc - unixodbc
php-extension: php-extension:
arg-type@unix: '--with-unixODBC@shared_path_suffix@' arg-type@unix: '--with-unixODBC@shared_path_suffix@'
arg-type@windows: enable
ext-opcache: ext-opcache:
type: php-extension type: php-extension
php-extension: php-extension:
@@ -186,20 +162,12 @@ ext-password-argon2:
type: php-extension type: php-extension
depends: depends:
- libargon2 - libargon2
suggests:
- ext-openssl - ext-openssl
php-extension: php-extension:
os:
- Linux
- Darwin
arg-type: custom arg-type: custom
display-name: '' display-name: ''
ext-pcntl: ext-pcntl:
type: php-extension type: php-extension
php-extension:
os:
- Linux
- Darwin
ext-pdo: ext-pdo:
type: php-extension type: php-extension
ext-pdo_mysql: ext-pdo_mysql:
@@ -213,6 +181,7 @@ ext-pdo_odbc:
type: php-extension type: php-extension
depends: depends:
- ext-pdo - ext-pdo
- ext-odbc
depends@unix: depends@unix:
- unixodbc - unixodbc
- ext-pdo - ext-pdo
@@ -221,7 +190,7 @@ ext-pdo_odbc:
arg-type: custom arg-type: custom
ext-pdo_pgsql: ext-pdo_pgsql:
type: php-extension type: php-extension
depends: depends@unix:
- ext-pdo - ext-pdo
- ext-pgsql - ext-pgsql
- postgresql - postgresql
@@ -238,7 +207,7 @@ ext-pdo_sqlite:
arg-type: with arg-type: with
ext-pgsql: ext-pgsql:
type: php-extension type: php-extension
depends: depends@unix:
- postgresql - postgresql
php-extension: php-extension:
arg-type: custom arg-type: custom
@@ -248,19 +217,15 @@ ext-phar:
- zlib - zlib
ext-posix: ext-posix:
type: php-extension type: php-extension
php-extension:
os:
- Linux
- Darwin
ext-readline: ext-readline:
type: php-extension type: php-extension
depends@unix: depends:
- libedit - libedit
depends@windows:
- wineditline
php-extension: php-extension:
support:
Windows: wip
BSD: wip
arg-type: '--with-libedit --without-readline' arg-type: '--with-libedit --without-readline'
arg-type@windows: with
build-shared: false build-shared: false
build-static: true build-static: true
ext-session: ext-session:
@@ -274,7 +239,7 @@ ext-simplexml:
depends: depends:
- ext-xml - ext-xml
php-extension: php-extension:
arg-type@unix: enable arg-type@unix: '--enable-simplexml@shared_suffix@ --with-libxml=@build_root_path@'
arg-type@windows: with arg-type@windows: with
build-with-php: true build-with-php: true
ext-snmp: ext-snmp:
@@ -282,9 +247,6 @@ ext-snmp:
depends: depends:
- net-snmp - net-snmp
php-extension: php-extension:
os:
- Linux
- Darwin
arg-type: with arg-type: with
ext-soap: ext-soap:
type: php-extension type: php-extension
@@ -292,7 +254,8 @@ ext-soap:
- ext-xml - ext-xml
- ext-session - ext-session
php-extension: php-extension:
arg-type: enable arg-type@unix: '--enable-soap@shared_suffix@ --with-libxml=@build_root_path@'
arg-type@windows: with
build-with-php: true build-with-php: true
ext-sockets: ext-sockets:
type: php-extension type: php-extension
@@ -313,22 +276,28 @@ ext-sqlite3:
ext-sysvmsg: ext-sysvmsg:
type: php-extension type: php-extension
php-extension: php-extension:
os: support:
- Linux Windows: 'no'
- Darwin BSD: wip
ext-sysvsem: ext-sysvsem:
type: php-extension type: php-extension
php-extension: php-extension:
os: support:
- Linux Windows: 'no'
- Darwin BSD: wip
ext-sysvshm: ext-sysvshm:
type: php-extension type: php-extension
php-extension:
support:
BSD: wip
ext-tidy: ext-tidy:
type: php-extension type: php-extension
depends: depends:
- tidy - tidy
php-extension: php-extension:
support:
Windows: wip
BSD: wip
arg-type: with-path arg-type: with-path
ext-tokenizer: ext-tokenizer:
type: php-extension type: php-extension
@@ -337,28 +306,27 @@ ext-tokenizer:
ext-xml: ext-xml:
type: php-extension type: php-extension
depends: depends:
- ext-libxml - libxml2
depends@windows: depends@windows:
- libxml2
- ext-iconv - ext-iconv
- ext-libxml
php-extension: php-extension:
arg-type@unix: enable arg-type: '--enable-xml@shared_suffix@ --with-libxml=@build_root_path@'
arg-type@windows: with arg-type@windows: with
build-with-php: true build-with-php: true
ext-xmlreader: ext-xmlreader:
type: php-extension type: php-extension
depends: depends:
- ext-xml - libxml2
- ext-dom
php-extension: php-extension:
arg-type: enable arg-type: '--enable-xmlreader@shared_suffix@ --with-libxml=@build_root_path@'
build-with-php: true build-with-php: true
ext-xmlwriter: ext-xmlwriter:
type: php-extension type: php-extension
depends: depends:
- ext-xml - libxml2
php-extension: php-extension:
arg-type: enable arg-type: '--enable-xmlwriter@shared_suffix@ --with-libxml=@build_root_path@'
build-with-php: true build-with-php: true
ext-xsl: ext-xsl:
type: php-extension type: php-extension

View File

@@ -1,19 +0,0 @@
ext-clickhouse:
type: php-extension
artifact:
source:
type: ghtar
repo: iliaal/php_clickhouse
extract: php-src/ext/clickhouse
prefer-stable: true
metadata:
license-files: [LICENSE]
license: PHP-3.01
suggests@unix:
- openssl
lang: cpp
php-extension:
os:
- Linux
- Darwin
arg-type@unix: custom

View File

@@ -1,16 +0,0 @@
ext-decimal:
type: php-extension
artifact:
source:
type: ghtagtar
repo: php-decimal/ext-decimal
match: 'v2\.\d.*'
extract: php-src/ext/decimal
metadata:
license-files: [LICENSE]
license: MIT
depends:
- libmpdec
php-extension:
arg-type@unix: '--enable-decimal --with-libmpdec-path=@build_root_path@'
arg-type@windows: '--with-decimal'

View File

@@ -1,10 +0,0 @@
ext-deepclone:
type: php-extension
artifact:
source:
type: ghtagtar
repo: symfony/php-ext-deepclone
extract: php-src/ext/deepclone
metadata:
license-files: [LICENSE]
license: PHP-3.01

View File

@@ -2,10 +2,8 @@ ext-ds:
type: php-extension type: php-extension
artifact: artifact:
source: source:
type: git type: pecl
url: 'https://github.com/php-ds/ext-ds.git' name: ds
rev: master
extract: php-src/ext/ds
metadata: metadata:
license-files: [LICENSE] license-files: [LICENSE]
license: MIT license: MIT

View File

@@ -14,7 +14,6 @@ ext-event:
suggests: suggests:
- ext-sockets - ext-sockets
php-extension: php-extension:
os: support:
- Linux Windows: wip
- Darwin
arg-type: custom arg-type: custom

View File

@@ -7,7 +7,3 @@ ext-excimer:
metadata: metadata:
license-files: [LICENSE] license-files: [LICENSE]
license: PHP-3.01 license: PHP-3.01
php-extension:
os:
- Linux
- Darwin

View File

@@ -1,20 +0,0 @@
ext-fastchart:
type: php-extension
artifact:
source:
type: ghtar
repo: iliaal/fastchart
extract: php-src/ext/fastchart
prefer-stable: true
metadata:
license-files: [LICENSE]
depends:
- freetype
suggests:
- libpng
- libjpeg
- libwebp
php-extension:
os:
- Linux
- Darwin

View File

@@ -1,14 +0,0 @@
ext-fastjson:
type: php-extension
artifact:
source:
type: ghtar
repo: iliaal/fastjson
extract: php-src/ext/fastjson
prefer-stable: true
metadata:
license-files: [LICENSE]
php-extension:
os:
- Linux
- Darwin

View File

@@ -1,16 +0,0 @@
ext-gearman:
type: php-extension
artifact:
source:
type: pecl
name: gearman
metadata:
license-files: [LICENSE]
license: PHP-3.01
depends:
- libgearman
php-extension:
os:
- Linux
- Darwin
arg-type: '--with-gearman@shared_path_suffix@'

View File

@@ -10,5 +10,3 @@ ext-gmssl:
license: PHP-3.01 license: PHP-3.01
depends: depends:
- gmssl - gmssl
php-extension:
arg-type: with-path

View File

@@ -11,7 +11,4 @@ ext-grpc:
- grpc - grpc
lang: cpp lang: cpp
php-extension: php-extension:
os:
- Linux
- Darwin
arg-type@unix: enable-path arg-type@unix: enable-path

View File

@@ -10,7 +10,4 @@ ext-imagick:
depends: depends:
- imagemagick - imagemagick
php-extension: php-extension:
os:
- Linux
- Darwin
arg-type: custom arg-type: custom

View File

@@ -12,7 +12,4 @@ ext-imap:
suggests: suggests:
- ext-openssl - ext-openssl
php-extension: php-extension:
os:
- Linux
- Darwin
arg-type: custom arg-type: custom

View File

@@ -7,6 +7,3 @@ ext-inotify:
metadata: metadata:
license-files: [LICENSE] license-files: [LICENSE]
license: PHP-3.01 license: PHP-3.01
php-extension:
os:
- Linux

View File

@@ -2,9 +2,8 @@ ext-lz4:
type: php-extension type: php-extension
artifact: artifact:
source: source:
type: git type: ghtagtar
url: 'https://github.com/kjdev/php-ext-lz4.git' repo: kjdev/php-ext-lz4
rev: master
extract: php-src/ext/lz4 extract: php-src/ext/lz4
metadata: metadata:
license-files: [LICENSE] license-files: [LICENSE]

View File

@@ -11,7 +11,4 @@ ext-memcache:
- ext-zlib - ext-zlib
- ext-session - ext-session
php-extension: php-extension:
os:
- Linux
- Darwin
arg-type: '--enable-memcache@shared_suffix@ --with-zlib-dir=@build_root_path@' arg-type: '--enable-memcache@shared_suffix@ --with-zlib-dir=@build_root_path@'

View File

@@ -20,7 +20,4 @@ ext-memcached:
- ext-msgpack - ext-msgpack
- ext-session - ext-session
php-extension: php-extension:
os:
- Linux
- Darwin
arg-type: '--enable-memcached@shared_suffix@ --with-zlib-dir=@build_root_path@' arg-type: '--enable-memcached@shared_suffix@ --with-zlib-dir=@build_root_path@'

View File

@@ -9,9 +9,7 @@ ext-mongodb:
metadata: metadata:
license-files: [LICENSE] license-files: [LICENSE]
license: PHP-3.01 license: PHP-3.01
depends@windows: suggests:
- ext-openssl
suggests@unix:
- icu - icu
- openssl - openssl
- zstd - zstd
@@ -20,5 +18,4 @@ ext-mongodb:
- CoreFoundation - CoreFoundation
- Security - Security
php-extension: php-extension:
arg-type@unix: custom arg-type: custom
arg-type@windows: '--enable-mongodb --with-mongodb-client-side-encryption'

View File

@@ -7,7 +7,3 @@ ext-parallel:
metadata: metadata:
license-files: [LICENSE] license-files: [LICENSE]
license: PHP-3.01 license: PHP-3.01
depends@windows:
- pthreads4w
php-extension:
arg-type@windows: with

View File

@@ -7,7 +7,3 @@ ext-protobuf:
metadata: metadata:
license-files: [LICENSE] license-files: [LICENSE]
license: BSD-3-Clause license: BSD-3-Clause
php-extension:
os:
- Linux
- Darwin

View File

@@ -3,7 +3,7 @@ ext-rdkafka:
artifact: artifact:
source: source:
type: ghtar type: ghtar
repo: php-rdkafka/php-rdkafka repo: arnaud-lb/php-rdkafka
extract: php-src/ext/rdkafka extract: php-src/ext/rdkafka
metadata: metadata:
license-files: [LICENSE] license-files: [LICENSE]
@@ -12,7 +12,4 @@ ext-rdkafka:
- librdkafka - librdkafka
lang: cpp lang: cpp
php-extension: php-extension:
os:
- Linux
- Darwin
arg-type: custom arg-type: custom

View File

@@ -16,4 +16,3 @@ ext-snappy:
lang: cpp lang: cpp
php-extension: php-extension:
arg-type@unix: '--enable-snappy --with-snappy-includedir=@build_root_path@' arg-type@unix: '--enable-snappy --with-snappy-includedir=@build_root_path@'
arg-type@windows: '--enable-snappy'

View File

@@ -11,7 +11,4 @@ ext-spx:
depends: depends:
- ext-zlib - ext-zlib
php-extension: php-extension:
os:
- Linux
- Darwin
arg-type: '--enable-SPX@shared_suffix@' arg-type: '--enable-SPX@shared_suffix@'

View File

@@ -5,6 +5,7 @@ ext-swoole:
type: ghtar type: ghtar
repo: swoole/swoole-src repo: swoole/swoole-src
extract: php-src/ext/swoole extract: php-src/ext/swoole
match: v6\.+
prefer-stable: true prefer-stable: true
metadata: metadata:
license-files: [LICENSE] license-files: [LICENSE]
@@ -33,9 +34,6 @@ ext-swoole:
- ext-swoole-hook-odbc - ext-swoole-hook-odbc
lang: cpp lang: cpp
php-extension: php-extension:
os:
- Linux
- Darwin
arg-type: custom arg-type: custom
ext-swoole-hook-mysql: ext-swoole-hook-mysql:
type: php-extension type: php-extension
@@ -46,9 +44,6 @@ ext-swoole-hook-mysql:
suggests: suggests:
- ext-mysqli - ext-mysqli
php-extension: php-extension:
os:
- Linux
- Darwin
arg-type: none arg-type: none
display-name: swoole display-name: swoole
ext-swoole-hook-odbc: ext-swoole-hook-odbc:
@@ -57,9 +52,6 @@ ext-swoole-hook-odbc:
- ext-pdo - ext-pdo
- unixodbc - unixodbc
php-extension: php-extension:
os:
- Linux
- Darwin
arg-type: none arg-type: none
display-name: swoole display-name: swoole
ext-swoole-hook-pgsql: ext-swoole-hook-pgsql:
@@ -68,9 +60,6 @@ ext-swoole-hook-pgsql:
- ext-pgsql - ext-pgsql
- ext-pdo - ext-pdo
php-extension: php-extension:
os:
- Linux
- Darwin
arg-type: none arg-type: none
display-name: swoole display-name: swoole
ext-swoole-hook-sqlite: ext-swoole-hook-sqlite:
@@ -79,8 +68,5 @@ ext-swoole-hook-sqlite:
- ext-sqlite3 - ext-sqlite3
- ext-pdo - ext-pdo
php-extension: php-extension:
os:
- Linux
- Darwin
arg-type: none arg-type: none
display-name: swoole display-name: swoole

View File

@@ -14,6 +14,5 @@ ext-swow:
- curl - curl
- ext-openssl - ext-openssl
- ext-curl - ext-curl
- postgresql
php-extension: php-extension:
arg-type: custom arg-type: custom

View File

@@ -8,4 +8,7 @@ ext-trader:
license-files: [LICENSE] license-files: [LICENSE]
license: BSD-2-Clause license: BSD-2-Clause
php-extension: php-extension:
support:
BSD: wip
Windows: wip
arg-type: enable arg-type: enable

View File

@@ -10,7 +10,7 @@ ext-uuid:
depends: depends:
- libuuid - libuuid
php-extension: php-extension:
os: support:
- Linux Windows: wip
- Darwin BSD: wip
arg-type: with-path arg-type: with-path

View File

@@ -12,4 +12,7 @@ ext-uv:
- libuv - libuv
- ext-sockets - ext-sockets
php-extension: php-extension:
support:
Windows: wip
BSD: wip
arg-type: with-path arg-type: with-path

View File

@@ -8,9 +8,6 @@ ext-xdebug:
license-files: [LICENSE] license-files: [LICENSE]
license: Xdebug-1.03 license: Xdebug-1.03
php-extension: php-extension:
os:
- Linux
- Darwin
zend-extension: true zend-extension: true
build-static: false build-static: false
build-shared: true build-shared: true

View File

@@ -11,8 +11,8 @@ ext-xhprof:
depends: depends:
- ext-ctype - ext-ctype
php-extension: php-extension:
os: support:
- Linux Windows: wip
- Darwin BSD: wip
arg-type: enable arg-type: enable
build-with-php: true build-with-php: true

View File

@@ -13,5 +13,6 @@ ext-xlswriter:
suggests: suggests:
- openssl - openssl
php-extension: php-extension:
support:
BSD: wip
arg-type: custom arg-type: custom
arg-type@windows: '--with-xlswriter'

View File

@@ -13,4 +13,3 @@ ext-xz:
- xz - xz
php-extension: php-extension:
arg-type: with-path arg-type: with-path
arg-type@windows: enable

View File

@@ -8,8 +8,10 @@ ext-zip:
metadata: metadata:
license-files: [LICENSE] license-files: [LICENSE]
license: PHP-3.01 license: PHP-3.01
depends: depends@unix:
- libzip - libzip
php-extension: php-extension:
support:
BSD: wip
arg-type: custom arg-type: custom
arg-type@windows: enable arg-type@windows: enable

View File

@@ -11,8 +11,5 @@ ext-zstd:
license: MIT license: MIT
depends: depends:
- zstd - zstd
suggests:
- ext-apcu
php-extension: php-extension:
arg-type: '--enable-zstd --with-libzstd=@build_root_path@' arg-type: '--enable-zstd --with-libzstd=@build_root_path@'
arg-type@windows: '--enable-zstd'

View File

@@ -5,6 +5,7 @@ brotli:
type: ghtagtar type: ghtagtar
repo: google/brotli repo: google/brotli
match: 'v1\.\d.*' match: 'v1\.\d.*'
binary: hosted
metadata: metadata:
license-files: [LICENSE] license-files: [LICENSE]
license: MIT license: MIT

View File

@@ -8,6 +8,7 @@ bzip2:
type: filelist type: filelist
url: 'https://sourceware.org/pub/bzip2/' url: 'https://sourceware.org/pub/bzip2/'
regex: '/href="(?<file>bzip2-(?<version>[^"]+)\.tar\.gz)"/' regex: '/href="(?<file>bzip2-(?<version>[^"]+)\.tar\.gz)"/'
binary: hosted
metadata: metadata:
license-files: ['@/bzip2.txt'] license-files: ['@/bzip2.txt']
license: bzip2-1.0.6 license: bzip2-1.0.6

View File

@@ -1,9 +0,0 @@
gettext-win:
type: library
artifact:
source:
type: git
url: 'https://github.com/winlibs/gettext.git'
rev: '0.18'
static-libs@windows:
- libintl_a.lib

View File

@@ -3,11 +3,7 @@ gettext:
artifact: artifact:
source: source:
type: filelist type: filelist
url: 'https://ftp.gnu.org/gnu/gettext/' url: 'https://ftp.gnu.org/pub/gnu/gettext/'
regex: '/href="(?<file>gettext-(?<version>[^"]+)\.tar\.xz)"/'
source-mirror:
type: filelist
url: 'https://ftpmirror.gnu.org/gnu/gettext/'
regex: '/href="(?<file>gettext-(?<version>[^"]+)\.tar\.xz)"/' regex: '/href="(?<file>gettext-(?<version>[^"]+)\.tar\.xz)"/'
metadata: metadata:
license-files: [gettext-runtime/intl/COPYING.LIB] license-files: [gettext-runtime/intl/COPYING.LIB]

View File

@@ -1,17 +1,6 @@
glfw: glfw:
type: library type: library
artifact: glfw artifact: glfw
frameworks:
- Cocoa
- CoreFoundation
- CoreVideo
- IOKit
- QuartzCore
headers:
- GLFW/glfw3.h
- GLFW/glfw3native.h
lang: cpp lang: cpp
static-libs@unix: static-libs@unix:
- libglfw3.a - libglfw3.a
static-libs@windows:
- glfw3.lib

View File

@@ -6,9 +6,8 @@ gmp:
url: 'https://ftp.gnu.org/gnu/gmp/' url: 'https://ftp.gnu.org/gnu/gmp/'
regex: '/href="(?<file>gmp-(?<version>[^"]+)\.tar\.xz)"/' regex: '/href="(?<file>gmp-(?<version>[^"]+)\.tar\.xz)"/'
source-mirror: source-mirror:
type: filelist type: url
url: 'https://ftpmirror.gnu.org/gnu/gmp/' url: 'https://dl.static-php.dev/static-php-cli/deps/gmp/gmp-6.3.0.tar.xz'
regex: '/href="(?<file>gmp-(?<version>[^"]+)\.tar\.xz)"/'
metadata: metadata:
license-files: ['@/gmp.txt'] license-files: ['@/gmp.txt']
license: Custom license: Custom

View File

@@ -5,10 +5,6 @@ idn2:
type: filelist type: filelist
url: 'https://ftp.gnu.org/gnu/libidn/' url: 'https://ftp.gnu.org/gnu/libidn/'
regex: '/href="(?<file>libidn2-(?<version>[^"]+)\.tar\.gz)"/' regex: '/href="(?<file>libidn2-(?<version>[^"]+)\.tar\.gz)"/'
source-mirror:
type: filelist
url: 'https://ftpmirror.gnu.org/gnu/libidn/'
regex: '/href="(?<file>libidn2-(?<version>[^"]+)\.tar\.gz)"/'
metadata: metadata:
license-files: [COPYING.LESSERv3] license-files: [COPYING.LESSERv3]
license: LGPL-3.0-or-later license: LGPL-3.0-or-later

View File

@@ -2,8 +2,9 @@ krb5:
type: library type: library
artifact: artifact:
source: source:
type: url type: ghtagtar
url: 'https://web.mit.edu/kerberos/dist/krb5/1.22/krb5-1.22.2.tar.gz' repo: krb5/krb5
match: krb5.+-final
metadata: metadata:
license-files: [NOTICE] license-files: [NOTICE]
license: BSD-3-Clause license: BSD-3-Clause

View File

@@ -10,6 +10,7 @@ libcares:
type: filelist type: filelist
url: 'https://c-ares.org/download/' url: 'https://c-ares.org/download/'
regex: '/href="\/download\/(?<file>c-ares-(?<version>[^"]+)\.tar\.gz)"/' regex: '/href="\/download\/(?<file>c-ares-(?<version>[^"]+)\.tar\.gz)"/'
binary: hosted
metadata: metadata:
license-files: [LICENSE.md] license-files: [LICENSE.md]
headers@unix: headers@unix:

View File

@@ -5,6 +5,7 @@ libedit:
type: filelist type: filelist
url: 'https://thrysoee.dk/editline/' url: 'https://thrysoee.dk/editline/'
regex: '/href="(?<file>libedit-(?<version>[^"]+)\.tar\.gz)"/' regex: '/href="(?<file>libedit-(?<version>[^"]+)\.tar\.gz)"/'
binary: hosted
metadata: metadata:
license-files: [COPYING] license-files: [COPYING]
license: BSD-3-Clause license: BSD-3-Clause

View File

@@ -16,4 +16,3 @@ libevent:
- libevent_core.a - libevent_core.a
- libevent_extra.a - libevent_extra.a
- libevent_openssl.a - libevent_openssl.a
- libevent_pthreads.a

View File

@@ -1,23 +0,0 @@
libgearman:
type: library
artifact:
source:
type: ghrel
repo: gearman/gearmand
match: gearmand-.+\.tar\.gz
prefer-stable: true
metadata:
license-files: [COPYING]
license: BSD-3-Clause
depends:
- libevent
- libuuid
suggests:
- libmemcached
headers@unix:
- libgearman-1.0/gearman.h
lang: cpp
pkg-configs:
- gearmand
static-libs@unix:
- libgearman.a

View File

@@ -5,10 +5,7 @@ libiconv:
type: filelist type: filelist
url: 'https://ftp.gnu.org/gnu/libiconv/' url: 'https://ftp.gnu.org/gnu/libiconv/'
regex: '/href="(?<file>libiconv-(?<version>[^"]+)\.tar\.gz)"/' regex: '/href="(?<file>libiconv-(?<version>[^"]+)\.tar\.gz)"/'
source-mirror: binary: hosted
type: filelist
url: 'https://ftpmirror.gnu.org/gnu/libiconv/'
regex: '/href="(?<file>libiconv-(?<version>[^"]+)\.tar\.gz)"/'
metadata: metadata:
license-files: [COPYING.LIB] license-files: [COPYING.LIB]
license: LGPL-2.0-or-later license: LGPL-2.0-or-later

View File

@@ -11,5 +11,3 @@ liblz4:
license: BSD-2-Clause license: BSD-2-Clause
static-libs@unix: static-libs@unix:
- liblz4.a - liblz4.a
static-libs@windows:
- lz4.lib

View File

@@ -14,5 +14,3 @@ libmaxminddb:
- maxminddb_config.h - maxminddb_config.h
static-libs@unix: static-libs@unix:
- libmaxminddb.a - libmaxminddb.a
static-libs@windows:
- libmaxminddb.lib

View File

@@ -1,15 +0,0 @@
libmpdec:
type: library
artifact:
source:
type: url
url: 'https://www.bytereef.org/software/mpdecimal/releases/mpdecimal-4.0.1.tar.gz'
metadata:
license-files: [COPYRIGHT.txt]
license: BSD-2-Clause
headers:
- mpdecimal.h
static-libs@unix:
- libmpdec.a
static-libs@windows:
- libmpdec_a.lib

View File

@@ -6,6 +6,7 @@ libpng:
repo: pnggroup/libpng repo: pnggroup/libpng
match: v1\.6\.\d+ match: v1\.6\.\d+
query: '?per_page=150' query: '?per_page=150'
binary: hosted
metadata: metadata:
license-files: [LICENSE] license-files: [LICENSE]
license: PNG license: PNG

View File

@@ -6,6 +6,7 @@ libsodium:
repo: jedisct1/libsodium repo: jedisct1/libsodium
match: 'libsodium-(?!1\.0\.21)\d+(\.\d+)*\.tar\.gz' match: 'libsodium-(?!1\.0\.21)\d+(\.\d+)*\.tar\.gz'
prefer-stable: true prefer-stable: true
binary: hosted
metadata: metadata:
license-files: [LICENSE] license-files: [LICENSE]
pkg-configs: pkg-configs:

View File

@@ -6,13 +6,12 @@ libssh2:
repo: libssh2/libssh2 repo: libssh2/libssh2
match: libssh2.+\.tar\.gz match: libssh2.+\.tar\.gz
prefer-stable: true prefer-stable: true
binary: hosted
metadata: metadata:
license-files: [COPYING] license-files: [COPYING]
license: BSD-3-Clause license: BSD-3-Clause
depends@unix: depends:
- openssl - openssl
depends@windows:
- zlib
headers: headers:
- libssh2.h - libssh2.h
- libssh2_publickey.h - libssh2_publickey.h

View File

@@ -5,10 +5,7 @@ libunistring:
type: filelist type: filelist
url: 'https://ftp.gnu.org/gnu/libunistring/' url: 'https://ftp.gnu.org/gnu/libunistring/'
regex: '/href="(?<file>libunistring-(?<version>[^"]+)\.tar\.gz)"/' regex: '/href="(?<file>libunistring-(?<version>[^"]+)\.tar\.gz)"/'
source-mirror: binary: hosted
type: filelist
url: 'https://ftpmirror.gnu.org/gnu/libunistring/'
regex: '/href="(?<file>libunistring-(?<version>[^"]+)\.tar\.gz)"/'
metadata: metadata:
license-files: [COPYING.LIB] license-files: [COPYING.LIB]
license: LGPL-3.0-or-later license: LGPL-3.0-or-later

View File

@@ -9,5 +9,3 @@ libuv:
license: MIT license: MIT
static-libs@unix: static-libs@unix:
- libuv.a - libuv.a
static-libs@windows:
- libuv.lib

View File

@@ -13,6 +13,3 @@ libxslt:
static-libs@unix: static-libs@unix:
- libxslt.a - libxslt.a
- libexslt.a - libexslt.a
static-libs@windows:
- libxslt_a.lib
- libexslt_a.lib

View File

@@ -1,9 +0,0 @@
mpir:
type: library
artifact:
source:
type: git
url: 'https://github.com/winlibs/mpir.git'
rev: master
static-libs@windows:
- mpir_a.lib

View File

@@ -4,12 +4,13 @@ openssl:
source: source:
type: ghrel type: ghrel
repo: openssl/openssl repo: openssl/openssl
match: openssl-3.+\.tar\.gz match: openssl.+\.tar\.gz
prefer-stable: true prefer-stable: true
source-mirror: source-mirror:
type: filelist type: filelist
url: 'https://www.openssl.org/source/' url: 'https://www.openssl.org/source/'
regex: '/href="(?<file>openssl-(?<version>3\.[^"]+)\.tar\.gz)"/' regex: '/href="(?<file>openssl-(?<version>[^"]+)\.tar\.gz)"/'
binary: hosted
metadata: metadata:
license-files: [LICENSE.txt] license-files: [LICENSE.txt]
license: OpenSSL license: OpenSSL

View File

@@ -10,4 +10,3 @@ pthreads4w:
license: Apache-2.0 license: Apache-2.0
static-libs@windows: static-libs@windows:
- libpthreadVC3.lib - libpthreadVC3.lib
- pthreadVC3.lib

View File

@@ -3,11 +3,7 @@ readline:
artifact: artifact:
source: source:
type: filelist type: filelist
url: 'https://ftp.gnu.org/gnu/readline/' url: 'https://ftp.gnu.org/pub/gnu/readline/'
regex: '/href="(?<file>readline-(?<version>[^"]+)\.tar\.gz)"/'
source-mirror:
type: filelist
url: 'https://ftpmirror.gnu.org/gnu/readline/'
regex: '/href="(?<file>readline-(?<version>[^"]+)\.tar\.gz)"/' regex: '/href="(?<file>readline-(?<version>[^"]+)\.tar\.gz)"/'
metadata: metadata:
license-files: [COPYING] license-files: [COPYING]

View File

@@ -15,13 +15,6 @@ snappy:
- snappy-c.h - snappy-c.h
- snappy-sinksource.h - snappy-sinksource.h
- snappy-stubs-public.h - snappy-stubs-public.h
headers@windows:
- snappy.h
- snappy-c.h
- snappy-sinksource.h
- snappy-stubs-public.h
lang: cpp lang: cpp
static-libs@unix: static-libs@unix:
- libsnappy.a - libsnappy.a
static-libs@windows:
- snappy.lib

View File

@@ -10,5 +10,3 @@ tidy:
license: W3C license: W3C
static-libs@unix: static-libs@unix:
- libtidy.a - libtidy.a
static-libs@windows:
- tidy_a.lib

View File

@@ -8,8 +8,6 @@ watcher:
metadata: metadata:
license-files: [license] license-files: [license]
license: MIT license: MIT
frameworks:
- CoreServices
headers: headers:
- wtr/watcher-c.h - wtr/watcher-c.h
lang: cpp lang: cpp

View File

@@ -1,14 +0,0 @@
wineditline:
type: library
artifact:
source:
type: git
url: 'https://github.com/winlibs/wineditline.git'
rev: master
metadata:
license-files: [COPYING]
license: GPL-2.0-or-later
headers:
- editline
static-libs@windows:
- edit_a.lib

View File

@@ -6,6 +6,7 @@ xz:
repo: tukaani-project/xz repo: tukaani-project/xz
match: xz.+\.tar\.xz match: xz.+\.tar\.xz
prefer-stable: true prefer-stable: true
binary: hosted
metadata: metadata:
license-files: [COPYING] license-files: [COPYING]
license: 0BSD license: 0BSD

View File

@@ -5,6 +5,7 @@ zlib:
type: ghrel type: ghrel
repo: madler/zlib repo: madler/zlib
match: zlib.+\.tar\.gz match: zlib.+\.tar\.gz
binary: hosted
metadata: metadata:
license-files: ['@/zlib.txt'] license-files: ['@/zlib.txt']
license: Zlib-Custom license: Zlib-Custom

View File

@@ -18,5 +18,4 @@ zstd:
static-libs@unix: static-libs@unix:
- libzstd.a - libzstd.a
static-libs@windows: static-libs@windows:
- zstd.lib - zstd_static.lib
- libzstd.lib

View File

@@ -1,5 +0,0 @@
7za-win:
type: target
artifact:
binary:
windows-x86_64: { type: url, url: 'https://dl.static-php.dev/v3/tools/7zip/7za.exe', extract: '{pkg_root_path}/bin/7za.exe' }

View File

@@ -16,8 +16,6 @@ curl:
- zlib - zlib
- libssh2 - libssh2
- nghttp2 - nghttp2
- brotli
- zstd
suggests@unix: suggests@unix:
- libssh2 - libssh2
- brotli - brotli
@@ -29,6 +27,9 @@ curl:
- ldap - ldap
- idn2 - idn2
- krb5 - krb5
suggests@windows:
- brotli
- zstd
frameworks: frameworks:
- CoreFoundation - CoreFoundation
- CoreServices - CoreServices

View File

@@ -11,16 +11,8 @@ frankenphp:
depends: depends:
- php-embed - php-embed
- go-xcaddy - go-xcaddy
depends@windows:
- php-embed
- go-win
- pthreads4w
suggests@unix: suggests@unix:
- brotli - brotli
- watcher - watcher
suggests@windows:
- brotli
static-bins@unix: static-bins@unix:
- frankenphp - frankenphp
static-bins@windows:
- frankenphp.exe

View File

@@ -1,10 +0,0 @@
go-win:
type: target
artifact:
binary: custom
env:
GOROOT: '{pkg_root_path}/go-win'
GOBIN: '{pkg_root_path}/go-win/bin'
GOPATH: '{pkg_root_path}/go-win/go'
path@windows:
- '{pkg_root_path}/go-win/bin'

View File

@@ -1,8 +0,0 @@
msys2-build-essentials:
type: target
artifact:
binary: custom
env:
SPC_MSYS2_PATH: '{pkg_root_path}/msys2-build-essentials/msys64'
path@windows:
- '{pkg_root_path}/msys2-build-essentials/msys64/usr/bin'

View File

@@ -2,4 +2,4 @@ nasm:
type: target type: target
artifact: artifact:
binary: binary:
windows-x86_64: { type: url, url: 'https://dl.static-php.dev/static-php-cli/deps/nasm/nasm-2.16.01-win64.zip', extract: { nasm.exe: '{pkg_root_path}/bin/nasm.exe', ndisasm.exe: '{pkg_root_path}/bin/ndisasm.exe' } } windows-x86_64: { type: url, url: 'https://dl.static-php.dev/static-php-cli/deps/nasm/nasm-2.16.01-win64.zip', extract: { nasm.exe: '{php_sdk_path}/bin/nasm.exe', ndisasm.exe: '{php_sdk_path}/bin/ndisasm.exe' } }

View File

@@ -0,0 +1,5 @@
php-sdk-binary-tools:
type: target
artifact:
binary:
windows-x86_64: { type: git, rev: master, url: 'https://github.com/php/php-sdk-binary-tools.git', extract: '{php_sdk_path}' }

7
config/pre-built.json Normal file
View File

@@ -0,0 +1,7 @@
{
"repo": "static-php/static-php-cli-hosted",
"prefer-stable": true,
"match-pattern-linux": "{name}-{arch}-{os}-{libc}-{libcver}.txz",
"match-pattern-macos": "{name}-{arch}-{os}.txz",
"match-pattern-windows": "{name}-{arch}-{os}.tgz"
}

1296
config/source.json Normal file

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More