Make an inventory of required php extensions
I noticed that probably not all compoer.json files from flow packages are fully up to date, especially about the required extensions. Those are all extensions the monorepo requires (some might not be used by any packages)
"ext-bcmath": "*",
"ext-dom": "*",
"ext-hash": "*",
"ext-json": "*",
"ext-mbstring": "*",
"ext-xml": "*",
"ext-xmlreader": "*",
"ext-xmlwriter": "*",
"ext-zlib": "*"
We need to walk through all packages and check which one is needed by which package.
src
├── src/adapter
│ ├── src/adapter/etl-adapter-avro
│ │ ├── src/adapter/etl-adapter-avro/composer.json
│ ├── src/adapter/etl-adapter-chartjs
│ │ ├── src/adapter/etl-adapter-chartjs/composer.json
│ ├── src/adapter/etl-adapter-csv
│ │ ├── src/adapter/etl-adapter-csv/composer.json
│ ├── src/adapter/etl-adapter-doctrine
│ │ ├── src/adapter/etl-adapter-doctrine/composer.json
│ ├── src/adapter/etl-adapter-elasticsearch
│ │ ├── src/adapter/etl-adapter-elasticsearch/composer.json
│ ├── src/adapter/etl-adapter-google-sheet
│ │ ├── src/adapter/etl-adapter-google-sheet/composer.json
│ ├── src/adapter/etl-adapter-http
│ │ ├── src/adapter/etl-adapter-http/composer.json
│ ├── src/adapter/etl-adapter-json
│ │ ├── src/adapter/etl-adapter-json/composer.json
│ ├── src/adapter/etl-adapter-logger
│ │ ├── src/adapter/etl-adapter-logger/composer.json
│ ├── src/adapter/etl-adapter-meilisearch
│ │ ├── src/adapter/etl-adapter-meilisearch/composer.json
│ ├── src/adapter/etl-adapter-parquet
│ │ ├── src/adapter/etl-adapter-parquet/composer.json
│ ├── src/adapter/etl-adapter-text
│ │ ├── src/adapter/etl-adapter-text/composer.json
│ └── src/adapter/etl-adapter-xml
│ ├── src/adapter/etl-adapter-xml/composer.json
├── src/bridge
│ ├── src/bridge/filesystem
│ │ ├── src/bridge/filesystem/async-aws
│ │ │ ├── src/bridge/filesystem/async-aws/composer.json
│ │ └── src/bridge/filesystem/azure
│ │ ├── src/bridge/filesystem/azure/composer.json
│ ├── src/bridge/monolog
│ │ └── src/bridge/monolog/http
│ │ ├── src/bridge/monolog/http/composer.json
│ └── src/bridge/symfony
│ └── src/bridge/symfony/http-foundation
│ ├── src/bridge/symfony/http-foundation/composer.json
├── src/cli
│ ├── src/cli/composer.json
├── src/core
│ └── src/core/etl
│ ├── src/core/etl/composer.json
├── src/lib
│ ├── src/lib/array-dot
│ │ ├── src/lib/array-dot/composer.json
│ ├── src/lib/azure-sdk
│ │ ├── src/lib/azure-sdk/composer.json
│ ├── src/lib/doctrine-dbal-bulk
│ │ ├── src/lib/doctrine-dbal-bulk/composer.json
│ ├── src/lib/dremel
│ │ ├── src/lib/dremel/composer.json
│ ├── src/lib/filesystem
│ │ ├── src/lib/filesystem/composer.json
│ ├── src/lib/parquet
│ │ ├── src/lib/parquet/composer.json
│ ├── src/lib/parquet-viewer
│ │ ├── src/lib/parquet-viewer/composer.json
│ ├── src/lib/rdsl
│ │ ├── src/lib/rdsl/composer.json
│ └── src/lib/snappy
│ ├── src/lib/snappy/composer.json
As a first step we can just put the inventory in the comment, without making any changes/adjustments in the code since there might be some improvements needed like in case of #1347
-
As for the extensions from the composer.json files, excluding those from external dependencies, the list is as follows:
- ext-bcmath: -> src/lib/parquet/composer.json
- ext-dom: -> src/adapter/etl-adapter-xml/composer.json
- ext-hash: -> src/adapter/etl-adapter-elasticsearch/composer.json -> src/adapter/etl-adapter-meilisearch/composer.json
- ext-json: -> src/adapter/etl-adapter-avro/composer.json -> src/adapter/etl-adapter-elasticsearch/composer.json -> src/adapter/etl-adapter-http/composer.json -> src/adapter/etl-adapter-json/composer.json -> src/adapter/etl-adapter-meilisearch/composer.json -> src/adapter/etl-adapter-parquet/composer.json -> src/core/etl/composer.json
- ext-mbstring: -> src/core/etl/composer.json
- ext-xml: -> src/adapter/etl-adapter-xml/composer.json
- ext-xmlreader: -> src/adapter/etl-adapter-xml/composer.json
- ext-xmlwriter: -> src/adapter/etl-adapter-xml/composer.json
- ext-zlib: -> src/lib/parquet/composer.json
-
With external dependencies:
- ext-bcmath: -> src/lib/parquet/composer.json
- ext-dom: -> src/adapter/etl-adapter-xml/composer.json -> vendor/openspout/openspout/composer.json -> vendor/async-aws/s3/composer.json
- ext-fileinfo: -> vendor/openspout/openspout/composer.json
- ext-filter: -> vendor/openspout/openspout/composer.json -> vendor/async-aws/s3/composer.json
- ext-hash: -> src/adapter/etl-adapter-elasticsearch/composer.json -> src/adapter/etl-adapter-meilisearch/composer.json -> vendor/async-aws/s3/composer.json
- ext-json: -> src/adapter/etl-adapter-avro/composer.json -> src/adapter/etl-adapter-elasticsearch/composer.json -> src/adapter/etl-adapter-http/composer.json -> src/adapter/etl-adapter-json/composer.json -> src/adapter/etl-adapter-meilisearch/composer.json -> src/adapter/etl-adapter-parquet/composer.json -> src/core/etl/composer.json -> vendor/meilisearch/meilisearch-php/composer.json
- ext-libxml: -> vendor/openspout/openspout/composer.json
- ext-mbstring: -> src/core/etl/composer.json
- ext-simplexml: -> vendor/async-aws/s3/composer.json
- ext-xml: -> src/adapter/etl-adapter-xml/composer.json
- ext-xmlreader: -> src/adapter/etl-adapter-xml/composer.json -> vendor/openspout/openspout/composer.json
- ext-xmlwriter: -> src/adapter/etl-adapter-xml/composer.json
- ext-zip: -> vendor/openspout/openspout/composer.json
- ext-zlib: -> src/lib/parquet/composer.json
Nice!
What we need to do with them is:
- put all mandatory "not bundled with symfoy" extensions in composer.json of packages that are using them (even if this extension is required only by a dependency or dependency of dependency)
- try to replace those that can be replaced with polyfills (like symfony mbstring)
- make sure that monorepo composer.json contains them all