Giter VIP home page Giter VIP logo

aws-crt-php's Introduction

AWS Common Runtime PHP bindings

Requirements

  • PHP 5.5+ on UNIX platforms, 7.2+ on Windows
  • CMake 3.x
  • GCC 4.4+, clang 3.8+ on UNIX, Visual Studio build tools on Windows
  • Tests require Composer

Installing with Composer and PECL

The package has two different package published to composer and PECL.

On UNIX, you can get the package from package manager or build from source:

pecl install awscrt
composer require aws/aws-crt-php

On Windows, you need to build from source as instruction written below for the native extension php_awscrt.dll . And, follow https://www.php.net/manual/en/install.pecl.windows.php#install.pecl.windows.loading to load extension. After that:

composer require aws/aws-crt-php

Building from Github source

$ git clone --recursive https://github.com/awslabs/aws-crt-php.git
$ cd aws-crt-php
$ phpize
$ ./configure
$ make
$ ./dev-scripts/run_tests.sh

Building on Windows

Requirements for Windows

  • Ensure you have the windows PHP SDK (this example assumes installation of the SDK to C:\php-sdk and that you've checked out the PHP source to php-src within the build directory) and it works well on your machine.

  • Ensure you have "Development package (SDK to develop PHP extensions)" and PHP available from your system path. You can download them from https://windows.php.net/download/. You can check if they are available by running phpize -v and php -v

Instructions

From Command Prompt (not powershell). The instruction is based on Visual Studio 2019 on 64bit Windows.

> git clone --recursive https://github.com/awslabs/aws-crt-php.git
> git clone https://github.com/microsoft/php-sdk-binary-tools.git C:\php-sdk
> C:\php-sdk\phpsdk-vs16-x64.bat

C:\php-sdk\
$ cd <your-path-to-aws-crt-php>

<your-path-to-aws-crt-php>\
$ phpize

# --with-prefix only required when your php runtime in system path is different than the runtime you wish to use.
<your-path-to-aws-crt-php>\
$ configure --enable-awscrt=shared --with-prefix=<your-path-to-php-prefix>

<your-path-to-aws-crt-php>\
$ nmake

<your-path-to-aws-crt-php>\
$ nmake generate-php-ini

# check .\php-win.ini, it now has the full path to php_awscrt.dll that you can manually load to your php runtime, or you can run the following command to run tests and load the required native extension for awscrt.
<your-path-to-aws-crt-php>\
$ .\dev-scripts\run_tests.bat <your-path-to-php-binary>

Note: for VS2017, Cmake will default to build for Win32, refer to here. If you are building for x64 php, you can set environment variable as follow to let cmake pick x64 compiler.

set CMAKE_GENERATOR=Visual Studio 15 2017
set CMAKE_GENERATOR_PLATFORM=x64

Debugging

Using PHPBrew to build/manage multiple versions of PHP is helpful.

Note: You must use a debug build of PHP to debug native extensions. See the PHP Internals Book for more info

# PHP 8 example
$ phpbrew install --stdout -j 8 8.0 +default -- CFLAGS=-Wno-error --disable-cgi --enable-debug
# PHP 5.5 example
$ phpbrew install --stdout -j 8 5.5 +default -openssl -mbstring -- CFLAGS="-w -Wno-error" --enable-debug --with-zlib=/usr/local/opt/zlib
$ phpbrew switch php-8.0.6 # or whatever version is current, it'll be at the end of the build output
$ phpize
$ ./configure
$ make CMAKE_BUILD_TYPE=Debug

Ensure that the php you launch from your debugger is the result of which php , not just the system default php.

Security

See CONTRIBUTING for more information.

Known OpenSSL related issue (Unix only)

  • When your php loads a different version of openssl than your system openssl version, awscrt may fail to load or weirdly crash. You can find the openssl version php linked via: php -i | grep 'OpenSSL', and awscrt linked from the build log, which will be Found OpenSSL: * (found version *)

The easiest workaround to those issue is to build from source and get aws-lc for awscrt to depend on instead. TO do that, same instructions as here, but use USE_OPENSSL=OFF make instead of make

License

This project is licensed under the Apache-2.0 License.

aws-crt-php's People

Contributors

amazon-auto avatar graebm avatar ilevyor avatar jmklix avatar kaibalopez avatar mdio avatar samremis avatar sdavtaker avatar tingdaok avatar waahm7 avatar yasminetalby avatar yslinear avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

aws-crt-php's Issues

Error "No rule to make target 'install'. Stop." when executing make.

Confirm by changing [ ] to [x] below to ensure that it's a bug:

Describe the bug
I'm trying to install the SDK on Lightsail WordPress Certified by Bitnami and Automattic 6.1.1-13 box.

Executed the following commands:
$ git clone --recursive https://github.com/awslabs/aws-crt-php.git
$ cd aws-crt-php
$ phpize
$ ./configure
$ make && make test

They all worked but the last one (make).
This is the output:

bitnami@ip-some-ip:~/stack/aws-crt-php$ make && make test
CMAKE_BUILD_PARALLEL_LEVEL='' cmake --build build/aws-crt-ffi-static --config RelWithDebInfo --target install
gmake[1]: Entering directory '/opt/bitnami/aws-crt-php/build/aws-crt-ffi-static'
gmake[1]: *** No rule to make target 'install'.  Stop.
gmake[1]: Leaving directory '/opt/bitnami/aws-crt-php/build/aws-crt-ffi-static'
make: *** [Makefile:244: build/aws-crt-ffi-static/libaws-crt-ffi.a] Error 2
bitnami@ip-some-ip:~/stack/aws-crt-php$ 

This is my folder:

bitnami@ip-some-ip:~/stack/aws-crt-php$ ls
autom4te.cache      config.h.in    configure.ac     gen_api.php   Makefile.frag       package.xml-template_post  README.md
build               config.log     config.w32       gen_stub.php  Makefile.fragments  package.xml-template_pre   run_tests
builder.json        config.m4      CONTRIBUTING.md  include       Makefile.frag.w32   php.ini                    run_tests.bat
CODE_OF_CONDUCT.md  config.nice    crt              libtool       Makefile.objects    php-win.ini                run-tests.php
composer.json       config.status  ext              LICENSE       modules             prepare_package_xml.sh     src
config.h            configure      format-check.sh  Makefile      NOTICE              prepare_release.sh         tests
bitnami@ip-some-ip:~/stack/aws-crt-php$ 

Any help is appreciated :)

conflict "phpunit/php-timer": ">=2"

Confirm by changing [ ] to [x] below:

Describe the question
This module is now used by aws-sdk-php (version 3.192.0). Is there a good reason why phpunit/php-timer is listed has a conflict for version higher than 2?

Phpunit 8 and Phpunit 9 are the supported versions for current version of php and they require newer version of phpunit/php-timer.

Logs/output
composer update on our project that require aws-php-sdk:

Problem 1
- phpunit/phpunit[9.4.1, ..., 9.5.9] require phpunit/php-timer ^5.0.2 -> satisfiable by phpunit/php-timer[5.0.2, 5.0.3].
- phpunit/phpunit[9.2.6, ..., 9.4.0] require phpunit/php-timer ^5.0.1 -> satisfiable by phpunit/php-timer[5.0.1, 5.0.2, 5.0.3].
- phpunit/phpunit[9.2.2, ..., 9.2.5] require phpunit/php-timer ^5.0 -> satisfiable by phpunit/php-timer[5.0.0, 5.0.1, 5.0.2, 5.0.3].
- phpunit/phpunit[9.2.0, ..., 9.2.1] require phpunit/php-timer ^4.0 -> satisfiable by phpunit/php-timer[4.0.0].
- phpunit/phpunit[9.1.2, ..., 9.1.5] require phpunit/php-timer ^3.1.4 -> satisfiable by phpunit/php-timer[3.1.4].
- phpunit/phpunit[9.0.0, ..., 9.1.1] require phpunit/php-timer ^3.0 -> satisfiable by phpunit/php-timer[3.0.0, ..., 3.1.4].
- aws/aws-crt-php 1.0.1 conflicts with phpunit/php-timer 5.0.3.
- aws/aws-crt-php 1.0.1 conflicts with phpunit/php-timer 5.0.2.
- aws/aws-crt-php 1.0.1 conflicts with phpunit/php-timer 5.0.1.
- aws/aws-crt-php 1.0.1 conflicts with phpunit/php-timer 5.0.0.
- aws/aws-crt-php 1.0.1 conflicts with phpunit/php-timer 4.0.0.
- aws/aws-crt-php 1.0.1 conflicts with phpunit/php-timer 3.1.4.
- aws/aws-crt-php 1.0.1 conflicts with phpunit/php-timer 3.1.3.
- aws/aws-crt-php 1.0.1 conflicts with phpunit/php-timer 3.1.2.
- aws/aws-crt-php 1.0.1 conflicts with phpunit/php-timer 3.1.1.
- aws/aws-crt-php 1.0.1 conflicts with phpunit/php-timer 3.1.0.
- aws/aws-crt-php 1.0.1 conflicts with phpunit/php-timer 3.0.0.
- aws/aws-sdk-php 3.192.0 requires aws/aws-crt-php ^1.0.1 -> satisfiable by aws/aws-crt-php[1.0.1].
- Root composer.json requires aws/aws-sdk-php ^3.147, 3.192.0 -> satisfiable by aws/aws-sdk-php[3.192.0].
- Root composer.json requires phpunit/phpunit ^9 -> satisfiable by phpunit/phpunit[9.0.0, ..., 9.5.9].

Add the extension in a dockerized environment

Confirm by changing [ ] to [x] below:

Platform/OS/Hardware/Device
What are you running the sdk on?

Ubuntu 20.04

Describe the question
How would you go about adding this extension in a dockerized environment?

The problem is that in order to build the extension, we need php and cmake, but they are not available at docker build time.

My Dockerfile looks something like this:

FROM composer AS composer

# copying the source directory and install the dependencies with composer
COPY . /app

# run composer install to install the dependencies
RUN composer install \
  --optimize-autoloader \
  --no-interaction \
  --no-progress

# continue stage build with the desired image and copy the source including the
# dependencies downloaded by composer
FROM alpine:3.14
LABEL Maintainer="Tim de Pater <[email protected]>"
LABEL Description="Lightweight container with Nginx 1.20 & PHP 8.0 based on Alpine Linux."

# Install packages and remove default server definition
RUN apk --no-cache add \
  curl \
  nginx \
  php8 \
  php8-ctype \
  php8-curl \
  php8-dom \
  php8-fpm \
  php8-dev \
  php8-gd \
  php8-intl \
  php8-json \
  php8-mbstring \
  php8-opcache \
  php8-openssl \
  php8-phar \
  php8-session \
  php8-xml \
  php8-xmlreader \
  php8-simplexml \
  php8-zlib \
  php8-zip \
  php8-tokenizer \
  php8-pdo \
  php8-pdo_mysql \
  php8-bcmath \
  php8-fileinfo \
  php8-redis \
  supervisor \
  openssl

# Create symlink so programs depending on `php` still function
RUN ln -s /usr/bin/php8 /usr/bin/php

# Configure nginx
COPY docker/nginx.conf /etc/nginx/nginx.conf

# Configure PHP-FPM
COPY docker/fpm-pool.conf /etc/php8/php-fpm.d/www.conf
COPY docker/php.ini /etc/php8/conf.d/custom.ini

# Configure supervisord
COPY docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf

# Setup document root
RUN mkdir -p /var/www/html

# Make sure files/folders needed by the processes are accessable when they run under the nobody user
RUN chown -R nobody.nobody /var/www/html && \
  chown -R nobody.nobody /run && \
  chown -R nobody.nobody /var/lib/nginx && \
  chown -R nobody.nobody /var/log/nginx

# Switch to use a non-root user from here on
USER nobody

# Add application
WORKDIR /var/www/html
COPY --chown=nobody . /var/www/html/

# Expose the port nginx is reachable on
EXPOSE 8080

# Let supervisord start nginx & php-fpm
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]

# Configure a healthcheck to validate that everything is up&running
HEALTHCHECK --timeout=10s CMD curl --silent --fail http://127.0.0.1:8080/fpm-ping

COPY --chown=nginx --from=composer /app /var/www/html

# Set .env file

COPY --chown=nginx ./.env.prod /var/www/html/.env

Logs/output
If applicable, add logs or error output.

REMEMBER TO SANITIZE YOUR PERSONAL INFO

PECL builds for Windows fail

Describe the bug

Although PECL/awscrt 1.0.0 has a config.w32 (and as such Windows seems to be supported), the PECL builds failed. This is because the aws-crt-ffi submodule is not contained in the package.

As I understand it, aws-crt-ffi is a library, and usually dependency libraries of PECL packages are prebuilt and rolled out to the Windows PECL build machine, and then configured in config.w32. Alternatively, the sources of the aws-crt-ffi submodule could be contained in (or downloaded via) the PECL package.

[1.0.1] missing tag

Version 1.0.1 is released on pecl, but tag doesn't exist
(so cannot properly clone the repository to get full sources, related to #37)

Broken PECL archive

Probably because missing sources for used libraries...


$ make
cmake3 -DCMAKE_INSTALL_PREFIX=build/install -DBUILD_TESTING=OFF -DCMAKE_BUILD_TYPE=RelWithDebInfo -Hcrt/aws-crt-ffi -Bbuild/aws-crt-ffi-static -DBUILD_SHARED_LIBS=OFF
CMake Error: The source directory "/tmp/awscrt-1.0.0/crt/aws-crt-ffi" does not exist.
Specify --help for usage, or press the help button on the CMake GUI.

P.S. build from a git recursive clone works, so really missing file in the PECL archive

PHP 5.x compatibility - undefined symbol: zend_error_noreturn

Since 1.2.0, package.xml states 5.5 is supported

PHP Warning:  PHP Startup: Unable to load dynamic library '/builddir/build/BUILDROOT/php-pecl-awscrt-1.2.0-1.el7.remi.5.5.x86_64//usr/lib64/php/modules/awscrt.so' - /builddir/build/BUILDROOT/php-pecl-awscrt-1.2.0-1.el7.remi.5.5.x86_64//usr/lib64/php/modules/awscrt.so: undefined symbol: zend_error_noreturn in Unknown on line 0

zend_error_noreturn was introduced, as public API in PHP 7.0

AWS Cognito issues codes which are invalid grants when using AWS SDK 3.263.15 and AWS CRT 1.2.4

Describe the bug

When I have AWS SDK 3.263.15 and AWS CRT 1.2.4 installed, the login code returned by Cognito is not valid - a curl to https://user-pool-name.auth.eu-west-1.amazoncognito.com/oauth2/token with that code gives {"error":"invalid_grant"}.

Expected Behavior

The code returned should be valid and a request to /oauth2/token with the code should give a valid token.

Current Behavior

The code returned is not valid and a request to /oauth2/token gives {"error":"invalid_grant"}

Reproduction Steps

Attempting to assemble one

Possible Solution

No response

Additional Information/Context

This does not happen in version 1.2.3 with the same AWS SDK

aws-crt-php version used

1.2.4

php version used

8.1.18 Zend Engine v4.1.18

Operating System and version

Ubuntu 22.04.3 LTS in WSL

Loading ASW S3 not loading

Confirm by changing [ ] to [x] below:

Platform/OS/Hardware/Device
What are you running the sdk on?
AWS
Ubuntu 20.04
t3 small

Describe the question
After the build and putting the path to the .so file in the php.ini file. My script page to upload a test file to my S3 bucket will not load.

Logs/output
If applicable, add logs or error output.

My log error is:
AH00051: child pid 5600 exit signal Segmentation fault (11), possible coredump in /etc/apache2

REMEMBER TO SANITIZE YOUR PERSONAL INFO

Build and test failures

Confirm by changing [ ] to [x] below to ensure that it's a bug:

Describe the bug
I followed the directions in the README in this repository, using the latest release downloaded from PECL, and the tests do not run.

SDK version number
Unclear what this means?

Platform/OS/Hardware/Device
Ubuntu 20.04 amd64 VM with Ondrej Sury's PPA, PHP 8.1.3 (cli) (built: Feb 21 2022 14:48:42) (NTS).

To Reproduce (observed behavior)

sudo apt install --no-install-recommends php8.1-dev cmake
tar zxf awscrt-1.0.9.tgz
cd awscrt-1.0.9
phpize
./configure
make
make test

Expected behavior
Tests should run, and preferably even pass.

Logs/output
Using PECL:

% make test

Build complete.
Don't forget to run 'make test'.

cp -v /home/ubuntu/awscrt-1.0.9/composer.json .
cp: '/home/ubuntu/awscrt-1.0.9/composer.json' and './composer.json' are the same file
make: *** [Makefile:267: vendor/bin/phpunit] Error 1

EDIT: git clone output deleted. Realized the clone was non-recursive. See below for updates.

Additional context
I wanted to install/test this, to see if it's worth deploying to production. It's not looking great. The version alleged on PECL isn't tagged here.

I don't know if the packages noted in the reproduction step are sufficient when starting from a basic Ubuntu image; my VM already had php8.1-cli and several extensions (including php8.1-curl) installed.

Fatal error during compilation on Windows 10 x64

Confirm by changing [ ] to [x] below:

Platform/OS/Hardware/Device
What are you running the sdk on?
Windows 10 x64 with Visual Studio 2017
SDK version: 2.2.0 and 2.2.1-dev as well(same issue)

Describe the question
I tried to compile this extension, because it's required for signature v4a, which is necessary for EventBridge to be able to put events on the bus, but keep getting fatal error. I was documenting what I was doing, and it's the following:

  1. Download SDK:
    https://github.com/Microsoft/php-sdk-binary-tools
  2. Put the SDK somewhere on your machine
  3. Use the following command: phpsdk-starter.bat -c vc15 -a x64
    vc15 is for compiling PHP 7.2+, vc16 for master. vc15 is Visual Studio 2017, vc16 is Visual Studio 2019.
    x64/x86 is your OS architecture.
  4. Prepare the SDK environment for compiling PHP: phpsdk_buildtree php-dev
    This will create a php-dev/vc15/x64 folder structure, and cd into it
  5. Clone the php repo, and checkout the target version's branch:
    git clone https://github.com/php/php-src.git && cd php-src && git checkout PHP-7.4.32
  6. Download the module library dependencies: phpsdk_deps -u - throws error if you didn't have git file showing the correct branch
  7. Get the awscrt library: git clone --recursive https://github.com/awslabs/aws-crt-php.git ..\pecl\awscrt
  8. Check out the lts version of it by cd into the directory and go to the branch:
    cd ..\pecl\awscrt && git checkout tags/v1.0.2 && cd ..\..\php-src
  9. Clone the parallel repository in the same way:
    git clone --recursive https://github.com/krakjoe/parallel.git ..\pecl\parallel
  10. Checkout the LTS version for this one as well:
    cd ..\pecl\parallel && git checkout tags/v1.1.4 && phpize && cd ..\..\php-src - phpize might be a problem, solution?
  11. Build configuration: buildconf
  12. Configure:
configure --disable-all --enable-cli --with-curl --enable-zts --enable-cgi --enable-zip --with-bz2 --enable-ftp --with-gettext --with-readline --with-gmp --enable-intl --enable-soap --enable-sockets --enable-exif --enable-bcmath --enable-mbstring --enable-json --enable-session --enable-opcache --enable-apache2-4handler --enable-embed --enable-pdo --enable-tokenizer --enable-calendar --enable-ctype --with-dom --enable-filter --with-gd --with-mhash --with-iconv --with-libxml --with-mysqli --with-mysqlnd --enable-phar --with-simplexml --enable-zlib --with-openssl --enable-awscrt=shared --enable-parallel=static
  1. Compile php: nmake

Logs/output
Output from the configuration through the build phase: attached in txt file
error output from php compilation.txt

REMEMBER TO SANITIZE YOUR PERSONAL INFO

Thank you for the help!

[1.0.7] build error (gcc 11)

On Fedora 34, with GCC 11

/builddir/build/BUILD/php-pecl-awscrt-1.0.7/NTS/crt/aws-crt-ffi/crt/s2n/pq-crypto/kyber_90s_r2/ntt.c:92:44: error: argument 1 of type 'int16_t[256]' {aka 'short int[256]'} with mismatched bound [-Werror=array-parameter=]
   92 | void PQCLEAN_KYBER51290S_CLEAN_ntt(int16_t poly[256]) {
      |                                    ~~~~~~~~^~~~~~~~~
In file included from /builddir/build/BUILD/php-pecl-awscrt-1.0.7/NTS/crt/aws-crt-ffi/crt/s2n/pq-crypto/kyber_90s_r2/ntt.c:1:
/builddir/build/BUILD/php-pecl-awscrt-1.0.7/NTS/crt/aws-crt-ffi/crt/s2n/pq-crypto/kyber_90s_r2/ntt.h:9:45: note: previously declared as 'int16_t *' {aka 'short int *'}
    9 | void PQCLEAN_KYBER51290S_CLEAN_ntt(int16_t *poly);
      |                                    ~~~~~~~~~^~~~
/builddir/build/BUILD/php-pecl-awscrt-1.0.7/NTS/crt/aws-crt-ffi/crt/s2n/pq-crypto/kyber_90s_r2/ntt.c:116:47: error: argument 1 of type 'int16_t[256]' {aka 'short int[256]'} with mismatched bound [-Werror=array-parameter=]
  116 | void PQCLEAN_KYBER51290S_CLEAN_invntt(int16_t poly[256]) {
      |                                       ~~~~~~~~^~~~~~~~~
In file included from /builddir/build/BUILD/php-pecl-awscrt-1.0.7/NTS/crt/aws-crt-ffi/crt/s2n/pq-crypto/kyber_90s_r2/ntt.c:1:
/builddir/build/BUILD/php-pecl-awscrt-1.0.7/NTS/crt/aws-crt-ffi/crt/s2n/pq-crypto/kyber_90s_r2/ntt.h:10:48: note: previously declared as 'int16_t *' {aka 'short int *'}
   10 | void PQCLEAN_KYBER51290S_CLEAN_invntt(int16_t *poly);
      |                                       ~~~~~~~~~^~~~
cc1: all warnings being treated as errors
[ 37%] Building C object crt/aws-c-cal/CMakeFiles/aws-c-cal.dir/source/unix/opensslcrypto_hmac.c.o
gmake[3]: *** [crt/s2n/CMakeFiles/s2n.dir/build.make:1182: crt/s2n/CMakeFiles/s2n.dir/pq-crypto/kyber_90s_r2/ntt.c.o] Error 1
gmake[3]: *** Waiting for unfinished jobs....
/builddir/build/BUILD/php-pecl-awscrt-1.0.7/NTS/crt/aws-crt-ffi/crt/s2n/pq-crypto/kyber_r2/ntt.c:92:41: error: argument 1 of type 'int16_t[256]' {aka 'short int[256]'} with mismatched bound [-Werror=array-parameter=]
   92 | void PQCLEAN_KYBER512_CLEAN_ntt(int16_t poly[256]) {
      |                                 ~~~~~~~~^~~~~~~~~
In file included from /builddir/build/BUILD/php-pecl-awscrt-1.0.7/NTS/crt/aws-crt-ffi/crt/s2n/pq-crypto/kyber_r2/ntt.c:1:
/builddir/build/BUILD/php-pecl-awscrt-1.0.7/NTS/crt/aws-crt-ffi/crt/s2n/pq-crypto/kyber_r2/ntt.h:9:42: note: previously declared as 'int16_t *' {aka 'short int *'}
    9 | void PQCLEAN_KYBER512_CLEAN_ntt(int16_t *poly);
      |                                 ~~~~~~~~~^~~~
/builddir/build/BUILD/php-pecl-awscrt-1.0.7/NTS/crt/aws-crt-ffi/crt/s2n/pq-crypto/kyber_r2/ntt.c:116:44: error: argument 1 of type 'int16_t[256]' {aka 'short int[256]'} with mismatched bound [-Werror=array-parameter=]
  116 | void PQCLEAN_KYBER512_CLEAN_invntt(int16_t poly[256]) {
      |                                    ~~~~~~~~^~~~~~~~~
In file included from /builddir/build/BUILD/php-pecl-awscrt-1.0.7/NTS/crt/aws-crt-ffi/crt/s2n/pq-crypto/kyber_r2/ntt.c:1:
/builddir/build/BUILD/php-pecl-awscrt-1.0.7/NTS/crt/aws-crt-ffi/crt/s2n/pq-crypto/kyber_r2/ntt.h:10:45: note: previously declared as 'int16_t *' {aka 'short int *'}
   10 | void PQCLEAN_KYBER512_CLEAN_invntt(int16_t *poly);
      |                                    ~~~~~~~~~^~~~
cc1: all warnings being treated as errors
gmake[3]: *** [crt/s2n/CMakeFiles/s2n.dir/build.make:1322: crt/s2n/CMakeFiles/s2n.dir/pq-crypto/kyber_r2/ntt.c.o] Error 1

Make it PHP 8.2 compatible

Describe the bug

Hi,

I am using this package in one of my Projects. after running the PHPCS for 8.2 found the below issue in this line.

FILE: vendor/aws/aws-crt-php/src/AWS/CRT/NativeResource.php
------------------------------------------------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
------------------------------------------------------------------------------------------------------------------------
 40 | ERROR | "$this" can no longer be unset since PHP 7.1.
(PHPCompatibility.Variables.ForbiddenThisUseContexts.Unset)
------------------------------------------------------------------------------------------------------------------------

https://github.com/awslabs/aws-crt-php/blob/2f1dc7b7eda080498be96a4a6d683a41583030e9/src/AWS/CRT/Internal/Encoding.php#L27C10-L27C35

FILE: vendor/aws/aws-crt-php/src/AWS/CRT/Internal/Encoding.php
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
FOUND 0 ERRORS AND 1 WARNING AFFECTING 1 LINE
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 27 | WARNING | Using ${var} in strings is deprecated since PHP 8.2, use {$var} instead. Found: ${len}
(PHPCompatibility.TextStrings.RemovedDollarBraceStringEmbeds.DeprecatedVariableSyntax)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

can you please fix it to make it compatible?

Expected Behavior

The same behavior as it is now.

Current Behavior

There is no issue in behavior right now. Just need to make the code change to make it PHP 8.1 compatible.

Reproduction Steps

phpcs -s -d memory_limit=2048M --standard=PHPCompatibility --basepath=./ --runtime-set testVersion 8.1- -p --extensions=php file_path_here

Possible Solution

No response

Additional Information/Context

No response

aws-crt-php version used

1.2.2

php version used

8.2.10

Operating System and version

MAC OS

Broken build

On Fedora 34, using GCC 11 and openssl 1.1.1k:

[  9%] Building C object crt/aws-lc/crypto/fipsmodule/CMakeFiles/fipsmodule.dir/bcm.c.o
In file included from /builddir/build/BUILD/php-pecl-awscrt-1.0.0/NTS/crt/aws-crt-ffi/crt/aws-lc/crypto/fipsmodule/bcm.c:104:
/builddir/build/BUILD/php-pecl-awscrt-1.0.0/NTS/crt/aws-crt-ffi/crt/aws-lc/crypto/fipsmodule/sha/sha256.c: In function 'SHA224_Final':
/builddir/build/BUILD/php-pecl-awscrt-1.0.0/NTS/crt/aws-crt-ffi/crt/aws-lc/crypto/fipsmodule/sha/sha256.c:122:10: error: 'SHA256_Final' accessing 32 bytes in a region of size 28 [-Werror=stringop-overflow=]
  122 |   return SHA256_Final(out, ctx);
      |          ^~~~~~~~~~~~~~~~~~~~~~
/builddir/build/BUILD/php-pecl-awscrt-1.0.0/NTS/crt/aws-crt-ffi/crt/aws-lc/crypto/fipsmodule/sha/sha256.c:122:10: note: referencing argument 1 of type 'uint8_t *'
/builddir/build/BUILD/php-pecl-awscrt-1.0.0/NTS/crt/aws-crt-ffi/crt/aws-lc/crypto/fipsmodule/sha/sha256.c:171:20: note: in a call to function 'SHA256_Final'
  171 | #define HASH_FINAL SHA256_Final
      |                    ^~~~~~~~~~~~
In function 'SHA224_Final',
    inlined from 'SHA224' at /builddir/build/BUILD/php-pecl-awscrt-1.0.0/NTS/crt/aws-crt-ffi/crt/aws-lc/crypto/fipsmodule/sha/sha256.c:100:3:
/builddir/build/BUILD/php-pecl-awscrt-1.0.0/NTS/crt/aws-crt-ffi/crt/aws-lc/crypto/fipsmodule/sha/sha256.c:122:10: error: 'SHA256_Final' accessing 32 bytes in a region of size 28 [-Werror=stringop-overflow=]
  122 |   return SHA256_Final(out, ctx);
      |          ^~~~~~~~~~~~~~~~~~~~~~
/builddir/build/BUILD/php-pecl-awscrt-1.0.0/NTS/crt/aws-crt-ffi/crt/aws-lc/crypto/fipsmodule/sha/sha256.c: In function 'SHA224':
/builddir/build/BUILD/php-pecl-awscrt-1.0.0/NTS/crt/aws-crt-ffi/crt/aws-lc/crypto/fipsmodule/sha/sha256.c:122:10: note: referencing argument 1 of type 'uint8_t *'
/builddir/build/BUILD/php-pecl-awscrt-1.0.0/NTS/crt/aws-crt-ffi/crt/aws-lc/crypto/fipsmodule/sha/sha256.c:171:20: note: in a call to function 'SHA256_Final'
  171 | #define HASH_FINAL SHA256_Final
      |                    ^~~~~~~~~~~~

Cleanup composer package

Is your feature request related to a problem? Please describe.

This package is a dependency of aws/aws-sdk-php

# composer why aws/aws-crt-php
aws/aws-sdk-php  3.229.2  requires  aws/aws-crt-php (^1.0.2)  

It installs a lot of completely useless files:

+vendor/aws/aws-crt-php/NOTICE
+vendor/aws/aws-crt-php/gen_stub.php
+vendor/aws/aws-crt-php/php.ini
+vendor/aws/aws-crt-php/config.w32
+vendor/aws/aws-crt-php/.clang-format-ignore
+vendor/aws/aws-crt-php/php-win.ini
+vendor/aws/aws-crt-php/prepare_package_xml.sh
+vendor/aws/aws-crt-php/package.xml-template_post
+vendor/aws/aws-crt-php/builder.json
+vendor/aws/aws-crt-php/Makefile.frag
+vendor/aws/aws-crt-php/format-check.sh
+vendor/aws/aws-crt-php/run_tests
+vendor/aws/aws-crt-php/package.xml-template_pre
+vendor/aws/aws-crt-php/.clang-format
+vendor/aws/aws-crt-php/crt/
+vendor/aws/aws-crt-php/crt/aws-crt-ffi/
+vendor/aws/aws-crt-php/ext/
+vendor/aws/aws-crt-php/ext/php_util.c
+vendor/aws/aws-crt-php/ext/awscrt.stub.php
+vendor/aws/aws-crt-php/ext/php_aws_crt.h
+vendor/aws/aws-crt-php/ext/http.c
+vendor/aws/aws-crt-php/ext/credentials.c
+vendor/aws/aws-crt-php/ext/stream.c
+vendor/aws/aws-crt-php/ext/crt.c
+vendor/aws/aws-crt-php/ext/event_loop.c
+vendor/aws/aws-crt-php/ext/awscrt_arginfo.h
+vendor/aws/aws-crt-php/ext/awscrt.c
+vendor/aws/aws-crt-php/ext/crc.c
+vendor/aws/aws-crt-php/ext/signing.c
+vendor/aws/aws-crt-php/ext/logging.c
+vendor/aws/aws-crt-php/run_tests.bat
+vendor/aws/aws-crt-php/Makefile.frag.w32
+vendor/aws/aws-crt-php/prepare_release.sh
+vendor/aws/aws-crt-php/config.m4

Describe the solution you'd like

Exclude unnecessary files from composer archive via .gitattributes - https://php.watch/articles/composer-gitattributes

Describe alternatives you've considered

N/A

Additional context

Relates to #64, #49

Segfault + deprecated notice emitted when trying to send use S3 headBucket

Confirm by changing [ ] to [x] below to ensure that it's a bug:

Describe the bug

When calling headBucket like this:

$awsClient->headBucket(['Bucket' => $bucketName]);

We are receiving an error

Deprecated: aws_crt_sign_request_aws(): Passing null to parameter #4 ($user_data) of type int is deprecated in /var/task/vendor/aws/aws-crt-php/src/AWS/CRT/Internal/Extension.php on line 27

This appears to be awslabs/aws-crt-php internal issue, as the null mentioned is coming from this on Line 16:

return self::$crt->sign_request_aws($signable->native, $signing_config->native,
function($result, $error_code) use ($on_complete) {
$signing_result = SigningResult::fromNative($result);
$on_complete($signing_result, $error_code);
}, null);

There does not appear to be a way to provide the required $user_data parameter.

SDK version number

aws/aws-crt-php                                v1.0.2             AWS Common Runtime for PHP
aws/aws-sdk-php                                3.227.0            AWS SDK for PHP - Use Amazon Web Services in your PHP project

We are building the aws/aws-crt-php extension using:

# Install the AWS CRT extension. This is required to run on AWS infrastructure
RUN git clone --recursive https://github.com/awslabs/aws-crt-php.git /aws-crt-php \
    && cd /aws-crt-php  \
    && phpize  \
    && ./configure \
    && make

# Copy the awscrt extension to a usable location in this image so that composer can run
RUN mkdir -p /opt/php/lib/php/extensions/no-debug-non-zts-20210902 && \
    cp /aws-crt-php/modules/awscrt.so /opt/php/lib/php/extensions/no-debug-non-zts-20210902

Platform/OS/Hardware/Device

AWS Lambda running a custom Docker image, with PHP 8.1 - the Dockerfile is here

To Reproduce (observed behavior)

$awsClient->headBucket(['Bucket' => $bucketName]);

Expected behavior

We expect the headBucket call to return information about the bucket.

Logs/output

Deprecated: aws_crt_sign_request_aws(): Passing null to parameter #4 ($user_data) of type int is deprecated in /var/task/vendor/aws/aws-crt-php/src/AWS/CRT/Internal/Extension.php on line 27

Note: no stack trace is displayed, and the script seems to terminate with a segfault, although we have not confirmed if this is the extension or not. I suspect if the extension does not accept null, then there may be some memory being accessed or written illegally

Following the Unix instructions in the README does not work on Mac M1

Confirm by changing [ ] to [x] below to ensure that it's a bug:

Describe the bug
Following the Unix instructions in the README does not work on Mac M1.

After executing ./configure the make command fails

SDK version number
Checkout of main branch @ 3942776

Platform/OS/Hardware/Device

  • macOS 12.1
  • M1
  • PHP 8.1 (Homebrew)

To Reproduce (observed behavior)

➜  Sites git clone --recursive https://github.com/awslabs/aws-crt-php.git
Cloning into 'aws-crt-php'...
remote: Enumerating objects: 593, done.
remote: Counting objects: 100% (267/267), done.
remote: Compressing objects: 100% (134/134), done.
remote: Total 593 (delta 165), reused 165 (delta 123), pack-reused 326
Receiving objects: 100% (593/593), 182.62 KiB | 4.35 MiB/s, done.
Resolving deltas: 100% (288/288), done.
Submodule 'crt/aws-crt-ffi' (https://github.com/awslabs/aws-crt-ffi.git) registered for path 'crt/aws-crt-ffi'
Cloning into '/Users/johnny/Sites/aws-crt-php/crt/aws-crt-ffi'...
remote: Enumerating objects: 353, done.
remote: Counting objects: 100% (219/219), done.
remote: Compressing objects: 100% (156/156), done.
remote: Total 353 (delta 138), reused 95 (delta 58), pack-reused 134
Receiving objects: 100% (353/353), 94.97 KiB | 2.88 MiB/s, done.
Resolving deltas: 100% (201/201), done.
Submodule path 'crt/aws-crt-ffi': checked out 'aecdb91b85079de6883bc3643428be0f1e61c153'
Submodule 'aws-c-auth' (https://github.com/awslabs/aws-c-auth.git) registered for path 'crt/aws-crt-ffi/crt/aws-c-auth'
Submodule 'aws-c-cal' (https://github.com/awslabs/aws-c-cal.git) registered for path 'crt/aws-crt-ffi/crt/aws-c-cal'
Submodule 'aws-c-common' (https://github.com/awslabs/aws-c-common.git) registered for path 'crt/aws-crt-ffi/crt/aws-c-common'
Submodule 'aws-c-compression' (https://github.com/awslabs/aws-c-compression.git) registered for path 'crt/aws-crt-ffi/crt/aws-c-compression'
Submodule 'aws-c-event-stream' (https://github.com/awslabs/aws-c-event-stream.git) registered for path 'crt/aws-crt-ffi/crt/aws-c-event-stream'
Submodule 'aws-c-http' (https://github.com/awslabs/aws-c-http.git) registered for path 'crt/aws-crt-ffi/crt/aws-c-http'
Submodule 'aws-c-io' (https://github.com/awslabs/aws-c-io.git) registered for path 'crt/aws-crt-ffi/crt/aws-c-io'
Submodule 'aws-checksums' (https://github.com/awslabs/aws-checksums.git) registered for path 'crt/aws-crt-ffi/crt/aws-checksums'
Submodule 'aws-lc' (https://github.com/awslabs/aws-lc.git) registered for path 'crt/aws-crt-ffi/crt/aws-lc'
Submodule 's2n' (https://github.com/awslabs/s2n.git) registered for path 'crt/aws-crt-ffi/crt/s2n'
Cloning into '/Users/johnny/Sites/aws-crt-php/crt/aws-crt-ffi/crt/aws-c-auth'...
remote: Enumerating objects: 2411, done.
remote: Counting objects: 100% (783/783), done.
remote: Compressing objects: 100% (497/497), done.
remote: Total 2411 (delta 343), reused 607 (delta 257), pack-reused 1628
Receiving objects: 100% (2411/2411), 900.59 KiB | 8.58 MiB/s, done.
Resolving deltas: 100% (1414/1414), done.
Cloning into '/Users/johnny/Sites/aws-crt-php/crt/aws-crt-ffi/crt/aws-c-cal'...
remote: Enumerating objects: 1724, done.
remote: Counting objects: 100% (366/366), done.
remote: Compressing objects: 100% (186/186), done.
remote: Total 1724 (delta 194), reused 289 (delta 155), pack-reused 1358
Receiving objects: 100% (1724/1724), 394.33 KiB | 7.44 MiB/s, done.
Resolving deltas: 100% (1032/1032), done.
Cloning into '/Users/johnny/Sites/aws-crt-php/crt/aws-crt-ffi/crt/aws-c-common'...
remote: Enumerating objects: 13278, done.
remote: Counting objects: 100% (1673/1673), done.
remote: Compressing objects: 100% (849/849), done.
remote: Total 13278 (delta 946), reused 1376 (delta 743), pack-reused 11605
Receiving objects: 100% (13278/13278), 3.37 MiB | 10.04 MiB/s, done.
Resolving deltas: 100% (8684/8684), done.
Cloning into '/Users/johnny/Sites/aws-crt-php/crt/aws-crt-ffi/crt/aws-c-compression'...
remote: Enumerating objects: 538, done.
remote: Counting objects: 100% (157/157), done.
remote: Compressing objects: 100% (111/111), done.
remote: Total 538 (delta 61), reused 90 (delta 26), pack-reused 381
Receiving objects: 100% (538/538), 155.92 KiB | 4.45 MiB/s, done.
Resolving deltas: 100% (243/243), done.
Cloning into '/Users/johnny/Sites/aws-crt-php/crt/aws-crt-ffi/crt/aws-c-event-stream'...
remote: Enumerating objects: 831, done.
remote: Counting objects: 100% (141/141), done.
remote: Compressing objects: 100% (100/100), done.
remote: Total 831 (delta 71), reused 78 (delta 35), pack-reused 690
Receiving objects: 100% (831/831), 276.54 KiB | 4.85 MiB/s, done.
Resolving deltas: 100% (451/451), done.
Cloning into '/Users/johnny/Sites/aws-crt-php/crt/aws-crt-ffi/crt/aws-c-http'...
remote: Enumerating objects: 6535, done.
remote: Counting objects: 100% (1115/1115), done.
remote: Compressing objects: 100% (379/379), done.
remote: Total 6535 (delta 709), reused 940 (delta 575), pack-reused 5420
Receiving objects: 100% (6535/6535), 2.94 MiB | 8.87 MiB/s, done.
Resolving deltas: 100% (4503/4503), done.
Cloning into '/Users/johnny/Sites/aws-crt-php/crt/aws-crt-ffi/crt/aws-c-io'...
remote: Enumerating objects: 5180, done.
remote: Counting objects: 100% (5180/5180), done.
remote: Compressing objects: 100% (1663/1663), done.
remote: Total 5180 (delta 3374), reused 4846 (delta 3117), pack-reused 0
Receiving objects: 100% (5180/5180), 3.36 MiB | 14.04 MiB/s, done.
Resolving deltas: 100% (3374/3374), done.
Cloning into '/Users/johnny/Sites/aws-crt-php/crt/aws-crt-ffi/crt/aws-checksums'...
remote: Enumerating objects: 528, done.
remote: Counting objects: 100% (101/101), done.
remote: Compressing objects: 100% (77/77), done.
remote: Total 528 (delta 34), reused 65 (delta 16), pack-reused 427
Receiving objects: 100% (528/528), 177.46 KiB | 3.86 MiB/s, done.
Resolving deltas: 100% (213/213), done.
Cloning into '/Users/johnny/Sites/aws-crt-php/crt/aws-crt-ffi/crt/aws-lc'...
remote: Enumerating objects: 77617, done.
remote: Counting objects: 100% (143/143), done.
remote: Compressing objects: 100% (124/124), done.
remote: Total 77617 (delta 74), reused 34 (delta 16), pack-reused 77474
Receiving objects: 100% (77617/77617), 99.99 MiB | 16.20 MiB/s, done.
Resolving deltas: 100% (55419/55419), done.
Cloning into '/Users/johnny/Sites/aws-crt-php/crt/aws-crt-ffi/crt/s2n'...
remote: Enumerating objects: 40211, done.
remote: Counting objects: 100% (64/64), done.
remote: Compressing objects: 100% (56/56), done.
remote: Total 40211 (delta 22), reused 16 (delta 8), pack-reused 40147
Receiving objects: 100% (40211/40211), 20.05 MiB | 17.43 MiB/s, done.
Resolving deltas: 100% (28608/28608), done.
Submodule path 'crt/aws-crt-ffi/crt/aws-c-auth': checked out '61b6524960ad5e0c7aa2e38b343425d5941781bf'
Submodule path 'crt/aws-crt-ffi/crt/aws-c-cal': checked out 'aa89aa4950074babe84762413f39bd364ecaf944'
Submodule path 'crt/aws-crt-ffi/crt/aws-c-common': checked out 'fdd4a10243903260f412f587cc748f0ac79629b4'
Submodule 'litani' (https://github.com/awslabs/aws-build-accumulator) registered for path 'crt/aws-crt-ffi/crt/aws-c-common/verification/cbmc/litani'
Submodule 'cbmc-templates' (https://github.com/awslabs/aws-templates-for-cbmc-proofs.git) registered for path 'crt/aws-crt-ffi/crt/aws-c-common/verification/cbmc/templates'
Cloning into '/Users/johnny/Sites/aws-crt-php/crt/aws-crt-ffi/crt/aws-c-common/verification/cbmc/litani'...
remote: Enumerating objects: 1219, done.
remote: Counting objects: 100% (485/485), done.
remote: Compressing objects: 100% (210/210), done.
remote: Total 1219 (delta 340), reused 382 (delta 274), pack-reused 734
Receiving objects: 100% (1219/1219), 296.23 KiB | 6.30 MiB/s, done.
Resolving deltas: 100% (774/774), done.
Cloning into '/Users/johnny/Sites/aws-crt-php/crt/aws-crt-ffi/crt/aws-c-common/verification/cbmc/templates'...
remote: Enumerating objects: 645, done.
remote: Counting objects: 100% (375/375), done.
remote: Compressing objects: 100% (241/241), done.
remote: Total 645 (delta 255), reused 200 (delta 134), pack-reused 270
Receiving objects: 100% (645/645), 147.95 KiB | 4.00 MiB/s, done.
Resolving deltas: 100% (401/401), done.
Submodule path 'crt/aws-crt-ffi/crt/aws-c-common/verification/cbmc/litani': checked out '8b23cb74d5ca47e0f94ee50bb3da7e907fd48f27'
Submodule path 'crt/aws-crt-ffi/crt/aws-c-common/verification/cbmc/templates': checked out '41c333ad41ef8fa4ad1b5573ddfc964c8bd2b4a7'
Submodule path 'crt/aws-crt-ffi/crt/aws-c-compression': checked out 'fc1631ea1ce563b0a453cb7a7233fca949e36970'
Submodule path 'crt/aws-crt-ffi/crt/aws-c-event-stream': checked out 'e87537be561d753ec82e783bc0929b1979c585f8'
Submodule path 'crt/aws-crt-ffi/crt/aws-c-http': checked out 'fa1692ae103dcc40e3d0a9db1b29acfc204a294e'
Submodule path 'crt/aws-crt-ffi/crt/aws-c-io': checked out '14b5e6d73b41eeabf04fc6228276eb1eb59bd99c'
Submodule path 'crt/aws-crt-ffi/crt/aws-checksums': checked out '99bb0ad4b89d335d638536694352c45e0d2188f5'
Submodule path 'crt/aws-crt-ffi/crt/aws-lc': checked out '8b7d44e7c7d0822cb52b92bfa5f92619014cbe31'
Submodule path 'crt/aws-crt-ffi/crt/s2n': checked out 'b5b313b9ccddf268b30c642798f1d2a58d49ecd6'
Submodule 'tests/cbmc/aws-verification-model-for-libcrypto' (https://github.com/awslabs/aws-verification-model-for-libcrypto.git) registered for path 'crt/aws-crt-ffi/crt/s2n/tests/cbmc/aws-verification-model-for-libcrypto'
Submodule 'cbmc-templates' (https://github.com/awslabs/aws-templates-for-cbmc-proofs) registered for path 'crt/aws-crt-ffi/crt/s2n/tests/cbmc/templates'
Submodule 'tests/litani' (https://github.com/awslabs/aws-build-accumulator) registered for path 'crt/aws-crt-ffi/crt/s2n/tests/litani'
Cloning into '/Users/johnny/Sites/aws-crt-php/crt/aws-crt-ffi/crt/s2n/tests/cbmc/aws-verification-model-for-libcrypto'...
remote: Enumerating objects: 194, done.
remote: Counting objects: 100% (194/194), done.
remote: Compressing objects: 100% (150/150), done.
remote: Total 194 (delta 123), reused 76 (delta 39), pack-reused 0
Receiving objects: 100% (194/194), 72.22 KiB | 3.14 MiB/s, done.
Resolving deltas: 100% (123/123), done.
Cloning into '/Users/johnny/Sites/aws-crt-php/crt/aws-crt-ffi/crt/s2n/tests/cbmc/templates'...
remote: Enumerating objects: 645, done.
remote: Counting objects: 100% (375/375), done.
remote: Compressing objects: 100% (241/241), done.
remote: Total 645 (delta 255), reused 200 (delta 134), pack-reused 270
Receiving objects: 100% (645/645), 147.95 KiB | 6.16 MiB/s, done.
Resolving deltas: 100% (401/401), done.
Cloning into '/Users/johnny/Sites/aws-crt-php/crt/aws-crt-ffi/crt/s2n/tests/litani'...
remote: Enumerating objects: 1219, done.
remote: Counting objects: 100% (485/485), done.
remote: Compressing objects: 100% (210/210), done.
remote: Total 1219 (delta 340), reused 382 (delta 274), pack-reused 734
Receiving objects: 100% (1219/1219), 296.23 KiB | 6.30 MiB/s, done.
Resolving deltas: 100% (774/774), done.
Submodule path 'crt/aws-crt-ffi/crt/s2n/tests/cbmc/aws-verification-model-for-libcrypto': checked out '42caa4790273b37cbdf303427b53f445ab1b3480'
Submodule path 'crt/aws-crt-ffi/crt/s2n/tests/cbmc/templates': checked out '7fdd7048b01e68fd549e20da1d216e34d719043a'
Submodule path 'crt/aws-crt-ffi/crt/s2n/tests/litani': checked out 'ea0a5ce88ecccc9a75bdf8790921f11f5c76f17a'
➜  Sites cd aws-crt-php
➜  aws-crt-php git:(main) phpize
Configuring for:
PHP Api Version:         20210902
Zend Module Api No:      20210902
Zend Extension Api No:   420210902
configure.ac:18: warning: $as_echo is obsolete; use AS_ECHO(["message"]) instead
build/php.m4:2111: PHP_CONFIG_NICE is expanded from...
configure.ac:18: the top level
configure.ac:161: warning: The macro `AC_LANG_C' is obsolete.
configure.ac:161: You should run autoupdate.
./lib/autoconf/c.m4:72: AC_LANG_C is expanded from...
build/libtool.m4:2739: _LT_AC_LANG_C_CONFIG is expanded from...
build/libtool.m4:2738: AC_LIBTOOL_LANG_C_CONFIG is expanded from...
build/libtool.m4:70: AC_LIBTOOL_SETUP is expanded from...
build/libtool.m4:52: _AC_PROG_LIBTOOL is expanded from...
build/libtool.m4:39: AC_PROG_LIBTOOL is expanded from...
configure.ac:161: the top level
configure.ac:161: warning: The macro `AC_LANG_C' is obsolete.
configure.ac:161: You should run autoupdate.
./lib/autoconf/c.m4:72: AC_LANG_C is expanded from...
lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from...
lib/m4sugar/m4sh.m4:699: AS_IF is expanded from...
./lib/autoconf/general.m4:2249: AC_CACHE_VAL is expanded from...
./lib/autoconf/general.m4:2270: AC_CACHE_CHECK is expanded from...
build/libtool.m4:561: _LT_AC_LOCK is expanded from...
build/libtool.m4:1185: AC_LIBTOOL_SYS_HARD_LINK_LOCKS is expanded from...
build/libtool.m4:2739: _LT_AC_LANG_C_CONFIG is expanded from...
build/libtool.m4:2738: AC_LIBTOOL_LANG_C_CONFIG is expanded from...
build/libtool.m4:70: AC_LIBTOOL_SETUP is expanded from...
build/libtool.m4:52: _AC_PROG_LIBTOOL is expanded from...
build/libtool.m4:39: AC_PROG_LIBTOOL is expanded from...
configure.ac:161: the top level
configure.ac:161: warning: The macro `AC_TRY_LINK' is obsolete.
configure.ac:161: You should run autoupdate.
./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from...
lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from...
lib/m4sugar/m4sh.m4:699: AS_IF is expanded from...
./lib/autoconf/general.m4:2249: AC_CACHE_VAL is expanded from...
./lib/autoconf/general.m4:2270: AC_CACHE_CHECK is expanded from...
build/libtool.m4:561: _LT_AC_LOCK is expanded from...
build/libtool.m4:1185: AC_LIBTOOL_SYS_HARD_LINK_LOCKS is expanded from...
build/libtool.m4:2739: _LT_AC_LANG_C_CONFIG is expanded from...
build/libtool.m4:2738: AC_LIBTOOL_LANG_C_CONFIG is expanded from...
build/libtool.m4:70: AC_LIBTOOL_SETUP is expanded from...
build/libtool.m4:52: _AC_PROG_LIBTOOL is expanded from...
build/libtool.m4:39: AC_PROG_LIBTOOL is expanded from...
configure.ac:161: the top level
configure.ac:161: warning: back quotes and double quotes must not be escaped in: $as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe
build/libtool.m4:1185: AC_LIBTOOL_SYS_HARD_LINK_LOCKS is expanded from...
build/libtool.m4:2739: _LT_AC_LANG_C_CONFIG is expanded from...
build/libtool.m4:2738: AC_LIBTOOL_LANG_C_CONFIG is expanded from...
build/libtool.m4:70: AC_LIBTOOL_SETUP is expanded from...
build/libtool.m4:52: _AC_PROG_LIBTOOL is expanded from...
build/libtool.m4:39: AC_PROG_LIBTOOL is expanded from...
configure.ac:161: the top level
configure.ac:161: warning: back quotes and double quotes must not be escaped in: $as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe
build/libtool.m4:1185: AC_LIBTOOL_SYS_HARD_LINK_LOCKS is expanded from...
build/libtool.m4:2739: _LT_AC_LANG_C_CONFIG is expanded from...
build/libtool.m4:2738: AC_LIBTOOL_LANG_C_CONFIG is expanded from...
build/libtool.m4:70: AC_LIBTOOL_SETUP is expanded from...
build/libtool.m4:52: _AC_PROG_LIBTOOL is expanded from...
build/libtool.m4:39: AC_PROG_LIBTOOL is expanded from...
configure.ac:161: the top level
configure.ac:161: warning: back quotes and double quotes must not be escaped in: $as_me:${as_lineno-$LINENO}: WARNING: output file \`$ofile' does not exist
build/libtool.m4:1929: _LT_AC_TAGCONFIG is expanded from...
build/libtool.m4:70: AC_LIBTOOL_SETUP is expanded from...
build/libtool.m4:52: _AC_PROG_LIBTOOL is expanded from...
build/libtool.m4:39: AC_PROG_LIBTOOL is expanded from...
configure.ac:161: the top level
configure.ac:161: warning: back quotes and double quotes must not be escaped in: $as_me: WARNING: output file \`$ofile' does not exist
build/libtool.m4:1929: _LT_AC_TAGCONFIG is expanded from...
build/libtool.m4:70: AC_LIBTOOL_SETUP is expanded from...
build/libtool.m4:52: _AC_PROG_LIBTOOL is expanded from...
build/libtool.m4:39: AC_PROG_LIBTOOL is expanded from...
configure.ac:161: the top level
configure.ac:161: warning: back quotes and double quotes must not be escaped in: $as_me:${as_lineno-$LINENO}: WARNING: output file \`$ofile' does not look like a libtool script
build/libtool.m4:1929: _LT_AC_TAGCONFIG is expanded from...
build/libtool.m4:70: AC_LIBTOOL_SETUP is expanded from...
build/libtool.m4:52: _AC_PROG_LIBTOOL is expanded from...
build/libtool.m4:39: AC_PROG_LIBTOOL is expanded from...
configure.ac:161: the top level
configure.ac:161: warning: back quotes and double quotes must not be escaped in: $as_me: WARNING: output file \`$ofile' does not look like a libtool script
build/libtool.m4:1929: _LT_AC_TAGCONFIG is expanded from...
build/libtool.m4:70: AC_LIBTOOL_SETUP is expanded from...
build/libtool.m4:52: _AC_PROG_LIBTOOL is expanded from...
build/libtool.m4:39: AC_PROG_LIBTOOL is expanded from...
configure.ac:161: the top level
configure.ac:161: warning: back quotes and double quotes must not be escaped in: $as_me:${as_lineno-$LINENO}: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'
build/libtool.m4:1929: _LT_AC_TAGCONFIG is expanded from...
build/libtool.m4:70: AC_LIBTOOL_SETUP is expanded from...
build/libtool.m4:52: _AC_PROG_LIBTOOL is expanded from...
build/libtool.m4:39: AC_PROG_LIBTOOL is expanded from...
configure.ac:161: the top level
configure.ac:161: warning: back quotes and double quotes must not be escaped in: $as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'
build/libtool.m4:1929: _LT_AC_TAGCONFIG is expanded from...
build/libtool.m4:70: AC_LIBTOOL_SETUP is expanded from...
build/libtool.m4:52: _AC_PROG_LIBTOOL is expanded from...
build/libtool.m4:39: AC_PROG_LIBTOOL is expanded from...
configure.ac:161: the top level
configure.ac:161: warning: back quotes and double quotes must not be escaped in: tag name \"$tagname\" already exists
build/libtool.m4:1929: _LT_AC_TAGCONFIG is expanded from...
build/libtool.m4:70: AC_LIBTOOL_SETUP is expanded from...
build/libtool.m4:52: _AC_PROG_LIBTOOL is expanded from...
build/libtool.m4:39: AC_PROG_LIBTOOL is expanded from...
configure.ac:161: the top level
configure.ac:161: warning: The macro `AC_LANG_CPLUSPLUS' is obsolete.
configure.ac:161: You should run autoupdate.
./lib/autoconf/c.m4:262: AC_LANG_CPLUSPLUS is expanded from...
build/libtool.m4:2821: _LT_AC_LANG_CXX_CONFIG is expanded from...
build/libtool.m4:2820: AC_LIBTOOL_LANG_CXX_CONFIG is expanded from...
build/libtool.m4:1929: _LT_AC_TAGCONFIG is expanded from...
build/libtool.m4:70: AC_LIBTOOL_SETUP is expanded from...
build/libtool.m4:52: _AC_PROG_LIBTOOL is expanded from...
build/libtool.m4:39: AC_PROG_LIBTOOL is expanded from...
configure.ac:161: the top level
configure.ac:161: warning: back quotes and double quotes must not be escaped in: $as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe
build/libtool.m4:1185: AC_LIBTOOL_SYS_HARD_LINK_LOCKS is expanded from...
build/libtool.m4:2821: _LT_AC_LANG_CXX_CONFIG is expanded from...
build/libtool.m4:2820: AC_LIBTOOL_LANG_CXX_CONFIG is expanded from...
build/libtool.m4:1929: _LT_AC_TAGCONFIG is expanded from...
build/libtool.m4:70: AC_LIBTOOL_SETUP is expanded from...
build/libtool.m4:52: _AC_PROG_LIBTOOL is expanded from...
build/libtool.m4:39: AC_PROG_LIBTOOL is expanded from...
configure.ac:161: the top level
configure.ac:161: warning: back quotes and double quotes must not be escaped in: $as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe
build/libtool.m4:1185: AC_LIBTOOL_SYS_HARD_LINK_LOCKS is expanded from...
build/libtool.m4:2821: _LT_AC_LANG_CXX_CONFIG is expanded from...
build/libtool.m4:2820: AC_LIBTOOL_LANG_CXX_CONFIG is expanded from...
build/libtool.m4:1929: _LT_AC_TAGCONFIG is expanded from...
build/libtool.m4:70: AC_LIBTOOL_SETUP is expanded from...
build/libtool.m4:52: _AC_PROG_LIBTOOL is expanded from...
build/libtool.m4:39: AC_PROG_LIBTOOL is expanded from...
configure.ac:161: the top level
➜  aws-crt-php git:(main) ./configure
./configure: line 655: test: too many arguments
./configure: line 655: test: too many arguments
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for a sed that does not truncate output... /usr/bin/sed
checking for pkg-config... no
checking for cc... cc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether the compiler supports GNU C... yes
checking whether cc accepts -g... yes
checking for cc option to enable C11 features... none needed
checking how to run the C preprocessor... cc -E
checking for icc... no
checking for suncc... no
checking for system library directory... lib
checking if compiler supports -R... no
checking if compiler supports -Wl,-rpath,... yes
checking build system type... aarch64-apple-darwin21.2.0
checking host system type... aarch64-apple-darwin21.2.0
checking target system type... aarch64-apple-darwin21.2.0
checking for PHP prefix... /opt/homebrew/Cellar/php/8.1.0
checking for PHP includes... -I/opt/homebrew/Cellar/php/8.1.0/include/php -I/opt/homebrew/Cellar/php/8.1.0/include/php/main -I/opt/homebrew/Cellar/php/8.1.0/include/php/TSRM -I/opt/homebrew/Cellar/php/8.1.0/include/php/Zend -I/opt/homebrew/Cellar/php/8.1.0/include/php/ext -I/opt/homebrew/Cellar/php/8.1.0/include/php/ext/date/lib
checking for PHP extension directory... /opt/homebrew/Cellar/php/8.1.0/pecl/20210902
checking for PHP installed headers prefix... /opt/homebrew/Cellar/php/8.1.0/include/php
checking if debug is enabled... no
checking if zts is enabled... no
checking for gawk... no
checking for nawk... no
checking for awk... awk
checking if awk is broken... no
checking for AWS Common Runtime support... yes, shared
checking for a sed that does not truncate output... /usr/bin/sed
checking for ld used by cc... /Library/Developer/CommandLineTools/usr/bin/ld
checking if the linker (/Library/Developer/CommandLineTools/usr/bin/ld) is GNU ld... no
checking for /Library/Developer/CommandLineTools/usr/bin/ld option to reload object files... -r
checking for BSD-compatible nm... /usr/bin/nm -B
checking whether ln -s works... yes
checking how to recognize dependent libraries... pass_all
checking for stdio.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for strings.h... yes
checking for sys/stat.h... yes
checking for sys/types.h... yes
checking for unistd.h... yes
checking for dlfcn.h... yes
checking the maximum length of command line arguments... 786432
checking command to parse /usr/bin/nm -B output from cc object... ok
checking for objdir... .libs
checking for ar... ar
checking for ranlib... ranlib
checking for strip... strip
checking for dsymutil... dsymutil
checking for nmedit... nmedit
checking for -single_module linker flag... yes
checking for -exported_symbols_list linker flag... yes
checking if cc supports -fno-rtti -fno-exceptions... yes
checking for cc option to produce PIC... -fno-common
checking if cc PIC flag -fno-common works... yes
checking if cc static flag -static works... no
checking if cc supports -c -o file.o... yes
checking whether the cc linker (/Library/Developer/CommandLineTools/usr/bin/ld) supports shared libraries... yes
checking dynamic linker characteristics... darwin21.2.0 dyld
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... no

creating libtool
appending configuration tag "CXX" to libtool
configure: patching config.h.in
configure: creating ./config.status
config.status: creating config.h
➜  aws-crt-php git:(main) make && make test
cmake -DCMAKE_INSTALL_PREFIX=build/install -DBUILD_TESTING=OFF -DCMAKE_BUILD_TYPE=RelWithDebInfo -DUSE_OPENSSL=ON  -Hcrt/aws-crt-ffi -Bbuild/aws-crt-ffi-static -DBUILD_SHARED_LIBS=OFF
make: cmake: No such file or directory
make: *** [build/aws-crt-ffi-static/CMakeCache.txt] Error 1
➜  aws-crt-php git:(main)

Expected behavior
I expected the instructions in the README to work

Logs/output
See Above

REMEMBER TO SANITIZE YOUR PERSONAL INFO

Additional context
I'm just trying to use the AWS PHP SDK and it appears that I can't connect to S3 without the CRT. The SDK prerequisites do not mention needing the CRT at all. It's most likely something I'm doing incorrectly, but not a lot of information for how to proceed without CRT.

Aws\Exception\CommonRuntimeException: AWS Common Runtime for PHP is required to use Signature V4A and multi-region access points.  Please install it using the instructions found at https://github.com/aws/aws-sdk-php/blob/master/CRT_INSTRUCTIONS.md in file /var/www/html/vendor/aws/aws-sdk-php/src/Signature/S3SignatureV4.php on line 105

#0 /var/www/html/vendor/aws/aws-sdk-php/src/Signature/S3SignatureV4.php(48): Aws\Signature\S3SignatureV4->signWithV4a()
#1 /var/www/html/vendor/aws/aws-sdk-php/src/Middleware.php(126): Aws\Signature\S3SignatureV4->signRequest()

Protect non-declarative scripts

gen_api.php and gen_stub.php should be removed from the codebase or their PHP extension should be dropped.

Atm anyone accessing /vendor/awslabs/aws-crt-php/gen_api.php can use it as a POST repeater.

It is also possible to populate $_SERVER["argv"][1] with :
/vendor/awslabs/aws-crt-php/gen_api.php?arg0+/etc/passwd

$argv usually stays undefined but PHP settings to turn it on are available.

[1.0.1] incomplete archive

Following issue #35 (where crt was not part of the archive), 1.0.1 seems better but not complete

CMake Error at crt/aws-lc/CMakeLists.txt:669 (add_subdirectory):
  add_subdirectory given source "ssl" which is not an existing directory.

How to install the required awscrt in my docker environment?

Confirm by changing [ ] to [x] below:

Platform/OS/Hardware/Device

Linux (AWS Elastic Beanstalk), custom docker environment based on debian, running on Amazon AWS Linux 2

Describe the question

I did add code that wants to download from one S3 bucket in a (different) region, and upload to my S3 bucket (in a local region).
I got the exception saying "AWS Common Runtime for PHP is required to use Signature V4A.".
I tried to add the composer package "aws/aws-crt-php", version 1.0.2.
But I still get the same exception.

I don't think that the instructions are very clear.
Should I add a debian package to get the correct code?
Should I build a PECL package?
Is the composer package to old (v.1.0.2)?

Logs/output

I got this stack trace:

PHP Fatal error:  Uncaught Aws\\Exception\\CommonRuntimeException: AWS Common Runtime for PHP is required to use Signature V4A.  Please install it using the instructions found at https://github.com/aws/aws-sdk-php/blob/master/CRT_INSTRUCTIONS.md in /www/prod/external/lib/composer/vendor/aws/aws-sdk-php/src/Signature/SignatureV4.php:451
Stack trace:
#0 /www/prod/external/lib/composer/vendor/aws/aws-sdk-php/src/Signature/S3SignatureV4.php(41): Aws\\Signature\\SignatureV4->signWithV4a(Object(Aws\\Credentials\\Credentials), Object(GuzzleHttp\\Psr7\\Request), 's3')
#1 /www/prod/external/lib/composer/vendor/aws/aws-sdk-php/src/Middleware.php(126): Aws\\Signature\\S3SignatureV4->signRequest(Object(GuzzleHttp\\Psr7\\Request), Object(Aws\\Credentials\\Credentials))
#2 /www/prod/external/lib/composer/vendor/guzzlehttp/promises/src/Promise.php(204): Aws\\Middleware::Aws\\{closure}(Object(Aws\\Credentials\\Credentials))
#3 /www/prod/external/lib/composer/vendor/guzzlehttp/promises/src/Promise.php(153): GuzzleHttp\\Promise\\Promise::callHandler(1, Object(Aws\\Credentials\\Credentials), NULL)
#4 /www/prod/external/lib/composer/vendor/guzzlehttp/promises/src/TaskQueue.php(48): GuzzleHttp\\Promise\\Promise::GuzzleHttp\\Promise\\{closure}()
#5 /www/prod/external/lib/composer/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php(158): GuzzleHttp\\Promise\\TaskQueue->run()
#6 /www/prod/external/lib/composer/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php(183): GuzzleHttp\\Handler\\CurlMultiHandler->tick()
#7 /www/prod/external/lib/composer/vendor/guzzlehttp/promises/src/Promise.php(248): GuzzleHttp\\Handler\\CurlMultiHandler->execute(true)
#8 /www/prod/external/lib/composer/vendor/guzzlehttp/promises/src/Promise.php(224): GuzzleHttp\\Promise\\Promise->invokeWaitFn()
#9 /www/prod/external/lib/composer/vendor/guzzlehttp/promises/src/Promise.php(269): GuzzleHttp\\Promise\\Promise->waitIfPending()
#10 /www/prod/external/lib/composer/vendor/guzzlehttp/promises/src/Promise.php(226): GuzzleHttp\\Promise\\Promise->invokeWaitList()
#11 /www/prod/external/lib/composer/vendor/guzzlehttp/promises/src/Promise.php(62): GuzzleHttp\\Promise\\Promise->waitIfPending()
#12 /www/prod/external/lib/composer/vendor/guzzlehttp/promises/src/Coroutine.php(67): GuzzleHttp\\Promise\\Promise->wait()
#13 /www/prod/external/lib/composer/vendor/guzzlehttp/promises/src/Promise.php(248): GuzzleHttp\\Promise\\Coroutine->GuzzleHttp\\Promise\\{closure}(true)
#14 /www/prod/external/lib/composer/vendor/guzzlehttp/promises/src/Promise.php(224): GuzzleHttp\\Promise\\Promise->invokeWaitFn()
#15 /www/prod/external/lib/composer/vendor/guzzlehttp/promises/src/Promise.php(62): GuzzleHttp\\Promise\\Promise->waitIfPending()
#16 /www/prod/external/lib/composer/vendor/guzzlehttp/promises/src/Coroutine.php(103): GuzzleHttp\\Promise\\Promise->wait(false)
#17 /www/prod/external/lib/composer/vendor/guzzlehttp/promises/src/Promise.php(274): GuzzleHttp\\Promise\\Coroutine->wait(false)
#18 /www/prod/external/lib/composer/vendor/guzzlehttp/promises/src/Promise.php(226): GuzzleHttp\\Promise\\Promise->invokeWaitList()
#19 /www/prod/external/lib/composer/vendor/guzzlehttp/promises/src/Promise.php(62): GuzzleHttp\\Promise\\Promise->waitIfPending()
#20 /www/prod/external/lib/composer/vendor/aws/aws-sdk-php/src/AwsClientTrait.php(58): GuzzleHttp\\Promise\\Promise->wait()
#21 /www/prod/external/lib/composer/vendor/aws/aws-sdk-php/src/AwsClientTrait.php(86): Aws\\AwsClient->execute(Object(Aws\\Command))
#22 /myrepo-path/lib/satellite/IngestScene.php(129): Aws\\AwsClient->__call('getObject', Array)
#23 /myrepo-path/lib/satellite/IngestScene.php(71): IngestScene->downloadFiles('sentinel-s2-l2a...')
#24 /myrepo-path/lib/satellite/request_image.php(78): IngestScene->doWork()
#25 /myrepo-path/htdocs/application/satellite/request_image.html(3): require_once('/www/filer/sand...')
#26 {main}
  thrown in /www/prod/external/lib/composer/vendor/aws/aws-sdk-php/src/Signature/SignatureV4.php on line 451

Cannot install into Beanstlak Linux 2

Describe the bug

trying to install via pecl install and get error;

running: make
which: no cmake3 in (/root/pear:/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/var/lib/snapd/snap/bin)
cmake -DCMAKE_SOURCE_DIR=/root/pear/temp/awscrt -DCMAKE_BINARY_DIR=./cmake_build -DCMAKE_INSTALL_PREFIX=./build/install -DBUILD_TESTING=OFF -DCMAKE_BUILD_TYPE=RelWithDebInfo -DUSE_OPENSSL=ON  -H/root/pear/temp/awscrt/crt/aws-crt-ffi -B./cmake_build/aws-crt-ffi-static -DBUILD_SHARED_LIBS=OFF
make: cmake: No such file or directory
make: *** [Makefile:25

How can we install into linux 2?

Expected Behavior

to install

Current Behavior

Getting error

Reproduction Steps

Run pecl install awscrt in linux 2 beanstalk

Possible Solution

No response

Additional Information/Context

No response

aws-crt-php version used

latest

php version used

8.2

Operating System and version

linux 2

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.