diff --git a/.clang-format-ignore b/.clang-format-ignore
index 65c5a2b5..de02e700 100644
--- a/.clang-format-ignore
+++ b/.clang-format-ignore
@@ -1,4 +1,3 @@
# ignore generated files
ext/api.h
ext/*_arginfo.h
-src/api.h
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index b66da21e..4586e223 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -30,12 +30,6 @@ jobs:
with:
submodules: recursive
- - name: Install ancient PHPUnit
- run: composer require --dev --ignore-platform-reqs phpunit/phpunit "4.8.36"
-
- - name: Install dependencies
- run: composer update --no-interaction
-
- name: Build for PHP 5.5
env:
CC: clang
@@ -45,6 +39,12 @@ jobs:
./configure
make
+ - name: Install dependencies
+ # get path to composer.phar so we can run it with custom php.ini
+ run: |
+ COMPOSER_PHAR=$(realpath $(which composer))
+ php -c php.ini $COMPOSER_PHAR update --no-interaction
+
php-linux-x64:
runs-on: ubuntu-latest
strategy:
@@ -71,9 +71,6 @@ jobs:
with:
submodules: recursive
- - name: Install dependencies
- run: composer update --no-interaction
-
- name: Run tests
env:
CC: clang
@@ -82,37 +79,50 @@ jobs:
phpize
./configure
make
- make test
-
-
- # linux-arm:
- # name: ARM (${{ matrix.arch }})
- # runs-on: ubuntu-latest
- # strategy:
- # matrix:
- # arch: [armv6, armv7, arm64]
- # steps:
- # - name: Build ${{ env.PACKAGE_NAME }}
- # run: |
- # python3 -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder')"
- # chmod a+x builder
- # ./builder build -p ${{ env.PACKAGE_NAME }} --target=linux-${{ matrix.arch }} --spec=downstream
-
- # windows-vc16:
- # runs-on: windows-latest
- # strategy:
- # matrix:
- # arch: [x64]
- # steps:
- # - uses: ilammy/msvc-dev-cmd@v1
- # with:
- # arch: ${{ matrix.arch }}
- # uwp: false
- # spectre: true
- # - name: Build ${{ env.PACKAGE_NAME }} + consumers
- # run: |
- # python -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder.pyz')"
- # python builder.pyz build -p ${{ env.PACKAGE_NAME }} --spec=downstream
+ ./dev-scripts/run_tests.sh
+
+ # linux-arm:
+ # name: ARM (${{ matrix.arch }})
+ # runs-on: ubuntu-latest
+ # strategy:
+ # matrix:
+ # arch: [armv6, armv7, arm64]
+ # steps:
+ # - name: Build ${{ env.PACKAGE_NAME }}
+ # run: |
+ # python3 -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder')"
+ # chmod a+x builder
+ # ./builder build -p ${{ env.PACKAGE_NAME }} --target=linux-${{ matrix.arch }} --spec=downstream
+
+ windows-vc16:
+ runs-on: windows-2019
+ defaults:
+ run:
+ shell: cmd # use CMD instead of powershell to catch error from bat script
+ strategy:
+ matrix:
+ arch: [x64]
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ submodules: recursive
+ - id: setup-php-sdk
+ uses: cmb69/setup-php-sdk@v0.6
+ with:
+ version: '8.0'
+ arch: ${{ matrix.arch }}
+ ts: ts
+ deps: openssl
+ - uses: ilammy/msvc-dev-cmd@v1
+ with:
+ arch: ${{ matrix.arch }}
+ toolset: ${{steps.setup-php-sdk.outputs.toolset}}
+ # not sure why CMD can't do multiline run statements
+ - run: phpize
+ - run: .\configure --with-prefix=${{steps.setup-php-sdk.outputs.prefix}} --enable-awscrt=shared --enable-cli --enable-openssl
+ - run: nmake
+ - run: nmake generate-php-ini
+ - run: .\dev-scripts\run_tests.bat ${{steps.setup-php-sdk.outputs.prefix}}\php
# windows-vc14:
# runs-on: windows-latest
@@ -154,3 +164,25 @@ jobs:
python3 -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder')"
chmod a+x builder
./builder build -p ${{ env.PACKAGE_NAME }} --spec=downstream
+
+ pecl-package-test:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Setup PHP
+ uses: shivammathur/setup-php@v2
+ with:
+ php-version: '8.0'
+
+ - name: Checkout
+ uses: actions/checkout@v2
+ with:
+ submodules: recursive
+
+ - name: Test PECL package build
+ run: |
+ python3 dev-scripts/prepare_pecl_release.py --name aws-crt --user aws-crt --version 1.0.0
+ tar -zxf *.tgz
+ cd awscrt-1.0.0
+ phpize
+ ./configure
+ make
diff --git a/.gitignore b/.gitignore
index 7b7b8bf8..f7413f5e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,3 @@
-
# Created by https://www.toptal.com/developers/gitignore/api/autotools,cmake,phpstorm
# Edit at https://www.toptal.com/developers/gitignore?templates=autotools,cmake,phpstorm
@@ -182,6 +181,8 @@ fabric.properties
build/
configure.in
configure.ac
+configure.bat
+configure.js
mkinstalldirs
run-tests.php
Makefile.global
@@ -191,6 +192,7 @@ modules/
*.lo
config.h
config.nice
+config.nice.bat
*.la
Makefile*
!Makefile.am
@@ -204,6 +206,7 @@ PHP-Parser*/
src/*.so
src/*.dylib
src/*.dll
+/x64/
# ignoring output of package.xml as it needs to be generated from ./prepare_release.sh in each publishing
package.xml
diff --git a/Makefile.frag b/Makefile.frag
index 3eda4bc3..a1414a76 100644
--- a/Makefile.frag
+++ b/Makefile.frag
@@ -27,8 +27,8 @@ CMAKE_BUILD = CMAKE_BUILD_PARALLEL_LEVEL='' $(CMAKE) --build
CMAKE_BUILD_TYPE ?= RelWithDebInfo
CMAKE_TARGET = --config $(CMAKE_BUILD_TYPE) --target install
-all: extension
-.PHONY: all extension
+all: extension
+.PHONY: all extension
# configure for static aws-crt-ffi.a
build/aws-crt-ffi-static/CMakeCache.txt:
@@ -46,19 +46,17 @@ ext/awscrt.lo: ext/awscrt.c
ext/awscrt.c: build/aws-crt-ffi-static/libaws-crt-ffi.a ext/api.h ext/awscrt_arginfo.h
-ext/awscrt_arginfo.h: ext/awscrt.stub.php gen_stub.php
+ext/awscrt_arginfo.h: awscrt.stub.php gen_stub.php
ifeq ($(GENERATE_STUBS),1)
+ # install awscrt.stub.php to ext/
+ cp -v awscrt.stub.php ext/awscrt.stub.php
# generate awscrt_arginfo.h
php gen_stub.php --minimal-arginfo ext/awscrt.stub.php
endif
# transform/install api.h from FFI lib
-src/api.h: crt/aws-crt-ffi/src/api.h
- php gen_api.php crt/aws-crt-ffi/src/api.h > src/api.h
-
-# install api.h to ext/ as well
-ext/api.h : src/api.h
- cp -v src/api.h ext/api.h
+ext/api.h : crt/aws-crt-ffi/src/api.h
+ php gen_api.php crt/aws-crt-ffi/src/api.h > ext/api.h
ext/php_aws_crt.h: ext/awscrt_arginfo.h ext/api.h
diff --git a/Makefile.frag.w32 b/Makefile.frag.w32
index 548ea4dc..441abcde 100644
--- a/Makefile.frag.w32
+++ b/Makefile.frag.w32
@@ -1,6 +1,5 @@
CMAKE=cmake.exe
-COMPOSER_PHAR=C:\ProgramData\ComposerSetup\bin\composer.phar
PHP_BINARY=$(PHP_PREFIX)\php.exe
CMAKE_CONFIGURE = $(CMAKE) -DCMAKE_INSTALL_PREFIX=$(AWSCRT_DIR)\build\install -DCMAKE_PREFIX_PATH=$(AWSCRT_DIR)\build\install -DBUILD_TESTING=OFF -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE)
@@ -22,14 +21,11 @@ $(BUILD_DIR)\php_awscrt.dll: $(AWSCRT_DIR)\ext\awscrt.c
$(AWSCRT_DIR)\ext\awscrt.c: $(AWSCRT_DIR)\build\libaws-crt-ffi.lib $(AWSCRT_DIR)\ext\api.h $(AWSCRT_DIR)\ext\awscrt_arginfo.h
# transform\install api.h from FFI lib
-$(AWSCRT_DIR)\src\api.h: $(AWSCRT_DIR)\crt\aws-crt-ffi\src\api.h
- php $(AWSCRT_DIR)\gen_api.php $(AWSCRT_DIR)\crt\aws-crt-ffi\src\api.h > $(AWSCRT_DIR)\src\api.h
-
-# install api.h to ext/ as well
-$(AWSCRT_DIR)\ext\api.h : $(AWSCRT_DIR)\src\api.h
- copy $(AWSCRT_DIR)\src\api.h $(AWSCRT_DIR)\ext\api.h
-
-# Use PHPUnit to run tests
-test-awscrt: install $(AWSCRT_DIR)\src\api.h $(BUILD_DIR)\php_awscrt.dll
- $(PHP_BINARY) -c $(AWSCRT_DIR)\php-win.ini $(COMPOSER_PHAR) --working-dir=$(AWSCRT_DIR) update
- $(PHP_BINARY) -c $(AWSCRT_DIR)\php-win.ini $(COMPOSER_PHAR) --working-dir=$(AWSCRT_DIR) run test-win
+$(AWSCRT_DIR)\ext\api.h: $(AWSCRT_DIR)\crt\aws-crt-ffi\src\api.h
+ php $(AWSCRT_DIR)\gen_api.php $(AWSCRT_DIR)\crt\aws-crt-ffi\src\api.h > $(AWSCRT_DIR)\ext\api.h
+
+# Get the dll directory to load
+generate-php-ini:
+ @echo extension=$(BUILD_DIR)\php_awscrt.dll > php-win.ini
+ @echo extension=$(PHP_PREFIX)\ext\php_openssl.dll >> php-win.ini
+ @echo extension=$(PHP_PREFIX)\ext\php_mbstring.dll >> php-win.ini
diff --git a/ext/awscrt.stub.php b/awscrt.stub.php
similarity index 100%
rename from ext/awscrt.stub.php
rename to awscrt.stub.php
diff --git a/builder.json b/builder.json
index 2c6f0be8..ec45884b 100644
--- a/builder.json
+++ b/builder.json
@@ -32,6 +32,6 @@
"NO_INTERACTION": "1"
},
"test_steps": [
- ["./run_tests"]
+ ["./dev-scripts/run_tests.sh"]
]
}
diff --git a/composer.json b/composer.json
index 72944466..95127dd6 100644
--- a/composer.json
+++ b/composer.json
@@ -11,7 +11,7 @@
}
],
"config": {
- "platform": {"php": "5.6"}
+ "platform": {"php": "7.4"}
},
"minimum-stability": "alpha",
"require": {
@@ -26,9 +26,9 @@
]
},
"scripts": {
- "test": "./run_tests",
+ "test": "./dev-scripts/run_tests",
"test-extension": "@test",
- "test-win": "run_tests"
+ "test-win": ".\\dev-scripts\\run_tests.bat"
},
"license": "Apache-2.0"
}
diff --git a/dev-scripts/cleanup_build.py b/dev-scripts/cleanup_build.py
new file mode 100644
index 00000000..6df535c9
--- /dev/null
+++ b/dev-scripts/cleanup_build.py
@@ -0,0 +1,59 @@
+import os
+import glob
+import shutil
+
+TOOLS_DIR = os.path.dirname(os.path.abspath(__file__))
+WORK_DIR = os.path.join(TOOLS_DIR, '..')
+
+# Remove specified directories
+DIRS_TO_REMOVE = [
+ '.deps',
+ '.libs',
+ 'build',
+ 'include',
+ 'modules',
+ 'vendor',
+ 'autom4te.cache']
+
+# Remove specified files
+FILES_TO_REMOVE = [
+ 'Makefile',
+ 'Makefile.fragments',
+ 'Makefile.global',
+ 'Makefile.objects',
+ 'config.guess',
+ 'config.h',
+ 'config.h.in',
+ 'config.log',
+ 'config.nice',
+ 'config.status',
+ 'config.sub',
+ 'configure',
+ 'configure.in',
+ 'configure.ac',
+ 'install-sh',
+ 'libtool',
+ 'ltmain.sh',
+ 'missing',
+ 'mkinstalldirs',
+ 'run-tests.php',
+ 'awscrt.la',
+ 'composer.lock',
+ 'ext/awscrt.stub.php',
+ 'acinclude.m4',
+ 'aclocal.m4',
+ '**/*.lo',
+ '**/*.o',
+ '**/*.la',
+ '**/*.a',
+ '*.tgz']
+
+os.chdir(WORK_DIR)
+
+
+for directory in DIRS_TO_REMOVE:
+ shutil.rmtree(directory, ignore_errors=True)
+
+for pattern in FILES_TO_REMOVE:
+ for filepath in glob.glob(pattern):
+ os.remove(filepath)
diff --git a/package.xml-template_post b/dev-scripts/package.xml-template_post
similarity index 100%
rename from package.xml-template_post
rename to dev-scripts/package.xml-template_post
diff --git a/package.xml-template_pre b/dev-scripts/package.xml-template_pre
similarity index 100%
rename from package.xml-template_pre
rename to dev-scripts/package.xml-template_pre
diff --git a/dev-scripts/prepare_pecl_package_xml.py b/dev-scripts/prepare_pecl_package_xml.py
new file mode 100644
index 00000000..3acbf586
--- /dev/null
+++ b/dev-scripts/prepare_pecl_package_xml.py
@@ -0,0 +1,146 @@
+#!/usr/bin/env python3
+import argparse
+import os
+import re
+from datetime import datetime
+
+parser = argparse.ArgumentParser(
+ description="Generate package.xml file for a release bundle.")
+parser.add_argument("--name", help="Name of the package", required=True)
+parser.add_argument(
+ "--user", help="Username of the package maintainer", required=True)
+parser.add_argument(
+ "--email", help="Email address of the package maintainer", default='aws-sdk-common-runtime@amazon.com')
+parser.add_argument(
+ "--version", help="Version number of the package", required=True)
+parser.add_argument(
+ "--notes", help="Release notes for the package", default='New release')
+args = parser.parse_args()
+
+
+name = args.name
+user = args.user
+email = args.email
+version = args.version
+notes = args.notes
+
+
+tools_dir = os.path.dirname(os.path.abspath(__file__))
+work_dir = os.path.join(tools_dir, '..')
+
+os.chdir(work_dir)
+
+today = datetime.utcnow().strftime("%Y-%m-%d")
+
+source_ext = "(c|cc|h|cpp|hpp|m4|w32|ini|frag|cmake|inl|in|py|gnu|yaml|def|pl|S|s|errordata|go|lds|num|asm|mod|peg|mk|rs|toml|sh)"
+doc_ext = "(md|json|html|dot|graphml|png|gn|sha1|css|rst)"
+
+special_docs = "(LICENSE.*|NOTICE|changelog.txt|CHANGELOG|THIRD-PARTY|README.*|readme|METADATA|CONTRIBUTORS|UPDATING|doc.config|THIRD-PARTY-LICENSES.txt)"
+special_tests = "(ci-test.sh|format-check.sh|run_tests.*|sanitizer-blacklist.txt|run-clang-tidy.sh|benchmark-build-run.sh|break-tests.sh|generate-coverage.sh|test.xml)"
+special_src = "(gen_api.php|gen_stub.php|CMakeLists.txt|post.sh|postun.sh|Makefile.*|build-buildspec.sh|build-deps.sh|objects.txt|go.*|BUILD.*|DEPS|install_and_run.sh|codemod.sh|requirements.txt)"
+skip_files = "(package.xml.*|prepare_release.sh|codereview.settings|.*\\.o|.*\\.a|.*\\.obj|.*\\.lib|break-tests-android.sh|whitespace.txt|prepare_package_xml.sh|crypto_test_data.cc|.*\\.pdf|.*\\.svg|.*\\.docx|cbmc-proof.txt|codecov.*|litani.*|.*\\.toml|module\\.modulemap|cleanup.sh|^\..*)"
+
+
+special_scripts = "(awscrt.stub.php)"
+
+skip_directories = "(tests|test|AWSCRTAndroidTestRunner|docker-images|codebuild|fuzz|third_party|docs|generated-src|aws-lc|aws-crt-sys|ecdsa-fuzz-corpus|bin|examples|compliance|verification|^\..*)"
+
+output_file_name = os.path.join(work_dir, 'package.xml')
+
+
+def process_file(file_name, f):
+ if re.match(skip_files, file_name):
+ # This file is not part of the release bundle
+ return
+ f.write(f'