libwww-perl / HTTP-Message

The HTTP-Message distribution contains classes useful for representing the messages passed in HTTP style communication.

Home Page:https://metacpan.org/pod/HTTP::Message

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

IO::Compress::Brotli causes build errors

PhilterPaper opened this issue · comments

Somewhere in the build process, HTTP::Message requests that IO::Compress::Brotli be built. This package is apparently no longer maintained, and consistently fails to build on Windows (see RT 125995). While HTTP::Message itself appears to install OK, each time it fails to build IO::Compress::Brotli. Please consider removing the dependency on that package, if possible.

Looks like this was introduced via #172

I wonder if we would have caught this sooner by installing --with-recommends in the Windows builds?

I wonder if we would have caught this sooner by installing --with-recommends in the Windows builds?

I think I didn't do that because Brotli was known not to properly build for Windows. That must have been a conscious decision. I thought it would be fine because it's a recommendation.

I am now wondering if we should downgrade this to suggests.

@PhilterPaper can you provide log output of the installation failing please? In particular how you're running it. I would like to understand why it installs the recommendations. Thank you.

Here you go. I had HTTP::Message 6.44 installed already, so I edited $VERSION back to 6.40 to cause an upgrade. This is Strawberry Perl 5.26 on Windows 10.

C:\Users\Phil\Desktop>cpan

cpan shell -- CPAN exploration and modules installation (v2.34)
Enter 'h' for help.

cpan> r
Database was generated on Fri, 28 Oct 2022 15:03:11 GMT

Package namespace         installed    latest  in CPAN file
App::Music::ChordPro          undef     5.989  JV/App-Music-ChordPro-5.989.tar.gz
DBD::Oracle                    1.74      1.83  ZARQUON/DBD-Oracle-1.83.tar.gz
DBD::Pg                      3.14.2    3.16.0  TURNSTEP/DBD-Pg-3.16.0.tar.gz
Devel::CheckLib                1.14      1.16  MATTN/Devel-CheckLib-1.16.tar.gz
Email::Date::Format           1.005     1.006  RJBS/Email-Date-Format-1.006.tar.gz
FCGI                           0.79      0.82  ETHER/FCGI-0.82.tar.gz
HTTP::Message                  6.40      6.44  OALDERS/HTTP-Message-6.44.tar.gz
IO::Socket::SSL               2.066     2.075  SULLR/IO-Socket-SSL-2.075.tar.gz
IPC::Run                       0.96 20220807.0  TODDR/IPC-Run-20220807.0.tar.gz
Text::Layout                  0.029     0.030  JV/Text-Layout-0.030.tar.gz
B                              1.68      1.83  RJBS/perl-5.36.0.tar.gz
841 installed modules have no parsable version number
(use 'o conf show_unparsable_versions 1' to show them)

cpan> i HTTP::Message
Fetching with HTTP::Tiny:
https://cpan.org/authors/id/O/OA/OALDERS/CHECKSUMS
Module id = HTTP::Message
    CPAN_USERID  OALDERS (Olaf Alders <olaf@wundersolutions.com>)
    CPAN_VERSION 6.44
    CPAN_FILE    O/OA/OALDERS/HTTP-Message-6.44.tar.gz
    UPLOAD_DATE  2022-10-26
    MANPAGE      HTTP::Message - HTTP style message (base class)
    INST_FILE    C:\Strawberry\perl\site\lib\HTTP\Message.pm
    INST_VERSION 6.40


cpan> upgrade HTTP::Message

Package namespace         installed    latest  in CPAN file
HTTP::Message                  6.40      6.44  OALDERS/HTTP-Message-6.44.tar.gz
Running install for module 'HTTP::Message'
Checksum for C:\STRAWB~1\cpan\sources\authors\id\O\OA\OALDERS\HTTP-Message-6.44.tar.gz ok
Scanning cache C:\STRAWB~1\cpan\build for sizes
......................................--------------------------------------DONE
DEL(1/16): C:\STRAWB~1\cpan\build\App-Music-ChordPro-5.989-10
DEL(2/16): C:\STRAWB~1\cpan\build\App-Music-ChordPro-5.989-10.yml
DEL(3/16): C:\STRAWB~1\cpan\build\App-Music-ChordPro-5.989-0
DEL(4/16): C:\STRAWB~1\cpan\build\App-Music-ChordPro-5.989-0.yml
DEL(5/16): C:\STRAWB~1\cpan\build\App-Music-ChordPro-5.989-1
DEL(6/16): C:\STRAWB~1\cpan\build\App-Music-ChordPro-5.989-1.yml
DEL(7/16): C:\STRAWB~1\cpan\build\DateTime-1.59-0
DEL(8/16): C:\STRAWB~1\cpan\build\DateTime-1.59-0.yml
DEL(9/16): C:\STRAWB~1\cpan\build\DateTime-Locale-1.37-0
DEL(10/16): C:\STRAWB~1\cpan\build\DateTime-Locale-1.37-0.yml
DEL(11/16): C:\STRAWB~1\cpan\build\Email-Sender-2.600-0
DEL(12/16): C:\STRAWB~1\cpan\build\Email-Sender-2.600-0.yml
DEL(13/16): C:\STRAWB~1\cpan\build\App-Music-ChordPro-5.989-2
DEL(14/16): C:\STRAWB~1\cpan\build\App-Music-ChordPro-5.989-2.yml
DEL(15/16): C:\STRAWB~1\cpan\build\experimental-0.029-0
DEL(16/16): C:\STRAWB~1\cpan\build\experimental-0.029-0.yml
Configuring O/OA/OALDERS/HTTP-Message-6.44.tar.gz with Makefile.PL
Checking if your kit is complete...
Looks good
Generating a gmake-style Makefile
Writing Makefile for HTTP::Message
Writing MYMETA.yml and MYMETA.json
  OALDERS/HTTP-Message-6.44.tar.gz
  C:\Strawberry\perl\bin\perl.exe Makefile.PL -- OK
Running make for O/OA/OALDERS/HTTP-Message-6.44.tar.gz
---- Unsatisfied dependencies detected during ----
----     OALDERS/HTTP-Message-6.44.tar.gz     ----
    IO::Compress::Brotli [requires,optional]
    IO::Uncompress::Brotli [requires,optional]
cp lib/HTTP/Response.pm blib\lib\HTTP\Response.pm
cp lib/HTTP/Request.pm blib\lib\HTTP\Request.pm
cp lib/HTTP/Headers/Auth.pm blib\lib\HTTP\Headers\Auth.pm
cp lib/HTTP/Headers.pm blib\lib\HTTP\Headers.pm
cp lib/HTTP/Request/Common.pm blib\lib\HTTP\Request\Common.pm
cp lib/HTTP/Status.pm blib\lib\HTTP\Status.pm
cp lib/HTTP/Headers/Util.pm blib\lib\HTTP\Headers\Util.pm
cp lib/HTTP/Config.pm blib\lib\HTTP\Config.pm
cp lib/HTTP/Message.pm blib\lib\HTTP\Message.pm
cp lib/HTTP/Headers/ETag.pm blib\lib\HTTP\Headers\ETag.pm
  OALDERS/HTTP-Message-6.44.tar.gz
  C:\STRAWB~1\c\bin\gmake.exe -- OK
Running make test for OALDERS/HTTP-Message-6.44.tar.gz
"C:\Strawberry\perl\bin\perl.exe" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib\lib', 'blib\arch')" t/*.t
t/00-report-prereqs.t .......... #
# Versions for all modules listed in MYMETA.json (including optional ones):
#
# === Configure Requires ===
#
#     Module              Want Have
#     ------------------- ---- ----
#     ExtUtils::MakeMaker  any 7.64
#
# === Configure Suggests ===
#
#     Module      Want Have
#     -------- ------- ----
#     JSON::PP 2.27300 4.12
#
# === Build Requires ===
#
#     Module              Want Have
#     ------------------- ---- ----
#     ExtUtils::MakeMaker  any 7.64
#
# === Test Requires ===
#
#     Module              Want     Have
#     ------------------- ---- --------
#     ExtUtils::MakeMaker  any     7.64
#     File::Spec           any     3.75
#     File::Temp           any   0.2311
#     PerlIO::encoding     any     0.25
#     Test::More          0.88 1.302191
#     Test::Needs          any 0.002009
#     Time::Local          any     1.30
#     Try::Tiny            any     0.31
#     URI::URL             any     5.16
#     lib                  any     0.64
#     overload             any     1.28
#
# === Test Recommends ===
#
#     Module                     Want     Have
#     ---------------------- -------- --------
#     CPAN::Meta             2.120900 2.150010
#     IO::Compress::Brotli   0.004001  missing
#     IO::Uncompress::Brotli 0.004001  missing
#
# === Runtime Requires ===
#
#     Module                      Want  Have
#     -------------------------- ----- -----
#     Carp                         any  1.50
#     Clone                       0.46  0.46
#     Compress::Raw::Bzip2         any 2.201
#     Compress::Raw::Zlib        2.062 2.202
#     Encode                      3.01  3.19
#     Encode::Locale                 1  1.05
#     Exporter                    5.57  5.74
#     File::Spec                   any  3.75
#     HTTP::Date                     6  6.05
#     IO::Compress::Bzip2        2.021 2.201
#     IO::Compress::Deflate        any 2.201
#     IO::Compress::Gzip           any 2.201
#     IO::HTML                     any 1.004
#     IO::Uncompress::Inflate      any 2.201
#     IO::Uncompress::RawInflate   any 2.201
#     LWP::MediaTypes                6  6.04
#     MIME::Base64                 2.1  3.16
#     MIME::QuotedPrint            any  3.16
#     URI                         1.10  5.16
#     parent                       any 0.238
#     strict                       any  1.11
#     warnings                     any  1.37
#
# === Runtime Recommends ===
#
#     Module                     Want    Have
#     ---------------------- -------- -------
#     IO::Compress::Brotli   0.004001 missing
#     IO::Uncompress::Brotli 0.004001 missing
#
t/00-report-prereqs.t .......... ok
t/common-req.t ................. ok
t/headers-auth.t ............... ok
t/headers-etag.t ............... ok
t/headers-util.t ............... ok
t/headers.t .................... ok
t/http-config.t ................ ok
t/message-brotli.t ............. skipped: Need IO::Compress::Brotli, IO::Uncompress::Brotli
t/message-charset.t ............ ok
t/message-decode-brotlibomb.t .. skipped: Need IO::Compress::Brotli, IO::Uncompress::Brotli
t/message-decode-bzipbomb.t .... ok
t/message-decode-xml.t ......... ok
t/message-decode-zipbomb.t ..... ok
t/message-old.t ................ ok
t/message-parts.t .............. ok
t/message.t .................... ok
t/request.t .................... ok
t/request_type_with_data.t ..... ok
t/response.t ................... ok
t/status-old.t ................. ok
t/status.t ..................... ok
All tests successful.
Files=21, Tests=836, 10 wallclock secs ( 0.19 usr +  0.12 sys =  0.31 CPU)
Result: PASS
Lockfile removed.
  OALDERS/HTTP-Message-6.44.tar.gz
  C:\STRAWB~1\c\bin\gmake.exe test -- OK
Running make install for OALDERS/HTTP-Message-6.44.tar.gz
Installing C:\STRAWB~1\perl\site\lib\HTTP\Message.pm
Appending installation info to C:\STRAWB~1\perl\lib/perllocal.pod
  OALDERS/HTTP-Message-6.44.tar.gz
  C:\STRAWB~1\c\bin\gmake.exe install UNINST=1 -- OK
Running install for module 'IO::Uncompress::Brotli'
Checksum for C:\STRAWB~1\cpan\sources\authors\id\M\MG\MGV\IO-Compress-Brotli-0.004001.tar.gz ok
Configuring M/MG/MGV/IO-Compress-Brotli-0.004001.tar.gz with Makefile.PL
Checking if your kit is complete...
Looks good
Generating a gmake-style Makefile
Writing Makefile for IO::Compress::Brotli
Writing MYMETA.yml and MYMETA.json
  MGV/IO-Compress-Brotli-0.004001.tar.gz
  C:\Strawberry\perl\bin\perl.exe Makefile.PL -- OK
Running make for M/MG/MGV/IO-Compress-Brotli-0.004001.tar.gz
cp Brotli/c/common/platform.h blib\lib\IO\Compress\Brotli\c\common\platform.h
cp Brotli/c/common/transform.c blib\lib\IO\Compress\Brotli\c\common\transform.c
cp Brotli/bootstrap blib\lib\IO\Compress\Brotli\bootstrap
cp Brotli/c/common/version.h blib\lib\IO\Compress\Brotli\c\common\version.h
cp Brotli/c/common/dictionary.h blib\lib\IO\Compress\Brotli\c\common\dictionary.h
cp Brotli/c/common/dictionary.c blib\lib\IO\Compress\Brotli\c\common\dictionary.c
cp Brotli/c/dec/bit_reader.c blib\lib\IO\Compress\Brotli\c\dec\bit_reader.c
cp Brotli/c/common/transform.h blib\lib\IO\Compress\Brotli\c\common\transform.h
cp Brotli/LICENSE blib\lib\IO\Compress\Brotli\LICENSE
cp Brotli/c/common/dictionary.bin blib\lib\IO\Compress\Brotli\c\common\dictionary.bin
cp Brotli/Makefile blib\lib\IO\Compress\Brotli\Makefile
cp Brotli/README.md blib\lib\IO\Compress\Brotli\README.md
cp Brotli/Makefile.am blib\lib\IO\Compress\Brotli\Makefile.am
cp Brotli/c/common/context.h blib\lib\IO\Compress\Brotli\c\common\context.h
cp Brotli/c/common/dictionary.bin.br blib\lib\IO\Compress\Brotli\c\common\dictionary.bin.br
cp Brotli/README blib\lib\IO\Compress\Brotli\README
cp Brotli/c/common/constants.h blib\lib\IO\Compress\Brotli\c\common\constants.h
cp Brotli/c/dec/prefix.h blib\lib\IO\Compress\Brotli\c\dec\prefix.h
cp Brotli/c/dec/bit_reader.h blib\lib\IO\Compress\Brotli\c\dec\bit_reader.h
cp Brotli/c/enc/bit_cost.h blib\lib\IO\Compress\Brotli\c\enc\bit_cost.h
cp Brotli/c/enc/bit_cost.c blib\lib\IO\Compress\Brotli\c\enc\bit_cost.c
cp Brotli/c/dec/huffman.h blib\lib\IO\Compress\Brotli\c\dec\huffman.h
cp Brotli/c/dec/decode.c blib\lib\IO\Compress\Brotli\c\dec\decode.c
cp Brotli/c/dec/huffman.c blib\lib\IO\Compress\Brotli\c\dec\huffman.c
cp Brotli/c/enc/backward_references.c blib\lib\IO\Compress\Brotli\c\enc\backward_references.c
cp Brotli/c/enc/backward_references_inc.h blib\lib\IO\Compress\Brotli\c\enc\backward_references_inc.h
cp Brotli/c/enc/backward_references_hq.c blib\lib\IO\Compress\Brotli\c\enc\backward_references_hq.c
cp Brotli/c/enc/bit_cost_inc.h blib\lib\IO\Compress\Brotli\c\enc\bit_cost_inc.h
cp Brotli/c/enc/backward_references_hq.h blib\lib\IO\Compress\Brotli\c\enc\backward_references_hq.h
cp Brotli/c/enc/backward_references.h blib\lib\IO\Compress\Brotli\c\enc\backward_references.h
cp Brotli/c/dec/state.c blib\lib\IO\Compress\Brotli\c\dec\state.c
cp Brotli/c/dec/state.h blib\lib\IO\Compress\Brotli\c\dec\state.h
cp Brotli/c/enc/compress_fragment.h blib\lib\IO\Compress\Brotli\c\enc\compress_fragment.h
cp Brotli/c/enc/block_splitter.h blib\lib\IO\Compress\Brotli\c\enc\block_splitter.h
cp Brotli/c/enc/block_encoder_inc.h blib\lib\IO\Compress\Brotli\c\enc\block_encoder_inc.h
cp Brotli/c/enc/block_splitter.c blib\lib\IO\Compress\Brotli\c\enc\block_splitter.c
cp Brotli/c/enc/cluster.h blib\lib\IO\Compress\Brotli\c\enc\cluster.h
cp Brotli/c/enc/compress_fragment.c blib\lib\IO\Compress\Brotli\c\enc\compress_fragment.c
cp Brotli/c/enc/block_splitter_inc.h blib\lib\IO\Compress\Brotli\c\enc\block_splitter_inc.h
cp Brotli/c/enc/cluster.c blib\lib\IO\Compress\Brotli\c\enc\cluster.c
cp Brotli/c/enc/brotli_bit_stream.h blib\lib\IO\Compress\Brotli\c\enc\brotli_bit_stream.h
cp Brotli/c/enc/compress_fragment_two_pass.h blib\lib\IO\Compress\Brotli\c\enc\compress_fragment_two_pass.h
cp Brotli/c/enc/command.h blib\lib\IO\Compress\Brotli\c\enc\command.h
cp Brotli/c/enc/cluster_inc.h blib\lib\IO\Compress\Brotli\c\enc\cluster_inc.h
cp Brotli/c/enc/compress_fragment_two_pass.c blib\lib\IO\Compress\Brotli\c\enc\compress_fragment_two_pass.c
cp Brotli/c/enc/brotli_bit_stream.c blib\lib\IO\Compress\Brotli\c\enc\brotli_bit_stream.c
cp Brotli/c/enc/hash_longest_match_inc.h blib\lib\IO\Compress\Brotli\c\enc\hash_longest_match_inc.h
cp Brotli/c/enc/encoder_dict.h blib\lib\IO\Compress\Brotli\c\enc\encoder_dict.h
cp Brotli/c/enc/entropy_encode_static.h blib\lib\IO\Compress\Brotli\c\enc\entropy_encode_static.h
cp Brotli/c/enc/encoder_dict.c blib\lib\IO\Compress\Brotli\c\enc\encoder_dict.c
cp Brotli/c/enc/hash_forgetful_chain_inc.h blib\lib\IO\Compress\Brotli\c\enc\hash_forgetful_chain_inc.h
cp Brotli/c/enc/hash_longest_match64_inc.h blib\lib\IO\Compress\Brotli\c\enc\hash_longest_match64_inc.h
cp Brotli/c/enc/encode.c blib\lib\IO\Compress\Brotli\c\enc\encode.c
cp Brotli/c/enc/fast_log.h blib\lib\IO\Compress\Brotli\c\enc\fast_log.h
cp Brotli/c/enc/hash.h blib\lib\IO\Compress\Brotli\c\enc\hash.h
cp Brotli/c/enc/find_match_length.h blib\lib\IO\Compress\Brotli\c\enc\find_match_length.h
cp Brotli/c/enc/entropy_encode.c blib\lib\IO\Compress\Brotli\c\enc\entropy_encode.c
cp Brotli/c/enc/entropy_encode.h blib\lib\IO\Compress\Brotli\c\enc\entropy_encode.h
cp Brotli/c/enc/dictionary_hash.h blib\lib\IO\Compress\Brotli\c\enc\dictionary_hash.h
cp Brotli/c/enc/dictionary_hash.c blib\lib\IO\Compress\Brotli\c\enc\dictionary_hash.c
cp Brotli/c/enc/params.h blib\lib\IO\Compress\Brotli\c\enc\params.h
cp Brotli/c/enc/ringbuffer.h blib\lib\IO\Compress\Brotli\c\enc\ringbuffer.h
cp Brotli/c/enc/literal_cost.c blib\lib\IO\Compress\Brotli\c\enc\literal_cost.c
cp Brotli/c/enc/prefix.h blib\lib\IO\Compress\Brotli\c\enc\prefix.h
cp Brotli/c/enc/literal_cost.h blib\lib\IO\Compress\Brotli\c\enc\literal_cost.h
cp Brotli/c/enc/quality.h blib\lib\IO\Compress\Brotli\c\enc\quality.h
cp Brotli/c/enc/histogram_inc.h blib\lib\IO\Compress\Brotli\c\enc\histogram_inc.h
cp Brotli/c/enc/metablock.h blib\lib\IO\Compress\Brotli\c\enc\metablock.h
cp Brotli/c/enc/histogram.h blib\lib\IO\Compress\Brotli\c\enc\histogram.h
cp Brotli/c/enc/histogram.c blib\lib\IO\Compress\Brotli\c\enc\histogram.c
cp Brotli/c/enc/metablock_inc.h blib\lib\IO\Compress\Brotli\c\enc\metablock_inc.h
cp Brotli/c/enc/hash_longest_match_quickly_inc.h blib\lib\IO\Compress\Brotli\c\enc\hash_longest_match_quickly_inc.h
cp Brotli/c/enc/metablock.c blib\lib\IO\Compress\Brotli\c\enc\metablock.c
cp Brotli/c/enc/hash_to_binary_tree_inc.h blib\lib\IO\Compress\Brotli\c\enc\hash_to_binary_tree_inc.h
cp Brotli/c/enc/memory.h blib\lib\IO\Compress\Brotli\c\enc\memory.h
cp Brotli/c/enc/memory.c blib\lib\IO\Compress\Brotli\c\enc\memory.c
cp Brotli/c/enc/utf8_util.h blib\lib\IO\Compress\Brotli\c\enc\utf8_util.h
cp Brotli/c/include/brotli/encode.h blib\lib\IO\Compress\Brotli\c\include\brotli\encode.h
cp Brotli/c/enc/static_dict.h blib\lib\IO\Compress\Brotli\c\enc\static_dict.h
cp Brotli/configure.ac blib\lib\IO\Compress\Brotli\configure.ac
cp Brotli/c/include/brotli/decode.h blib\lib\IO\Compress\Brotli\c\include\brotli\decode.h
cp Brotli/c/enc/utf8_util.c blib\lib\IO\Compress\Brotli\c\enc\utf8_util.c
cp Brotli/c/include/brotli/port.h blib\lib\IO\Compress\Brotli\c\include\brotli\port.h
cp Brotli/fetch-spec/shared-brotli-fetch-spec.txt blib\lib\IO\Compress\Brotli\fetch-spec\shared-brotli-fetch-spec.txt
cp Brotli/c/enc/static_dict_lut.h blib\lib\IO\Compress\Brotli\c\enc\static_dict_lut.h
cp Brotli/tests/compatibility_test.sh blib\lib\IO\Compress\Brotli\tests\compatibility_test.sh
cp Brotli/tests/roundtrip_test.sh blib\lib\IO\Compress\Brotli\tests\roundtrip_test.sh
cp Brotli/c/enc/static_dict.c blib\lib\IO\Compress\Brotli\c\enc\static_dict.c
cp Brotli/configure blib\lib\IO\Compress\Brotli\configure
cp Brotli/c/enc/write_bits.h blib\lib\IO\Compress\Brotli\c\enc\write_bits.h
cp Brotli/c/include/brotli/types.h blib\lib\IO\Compress\Brotli\c\include\brotli\types.h
cp Brotli/tests/testdata/10x10y.compressed blib\lib\IO\Compress\Brotli\tests\testdata\10x10y.compressed
cp Brotli/tests/testdata/alice29.txt blib\lib\IO\Compress\Brotli\tests\testdata\alice29.txt
cp Brotli/tests/testdata/backward65536 blib\lib\IO\Compress\Brotli\tests\testdata\backward65536
cp Brotli/tests/testdata/64x.compressed blib\lib\IO\Compress\Brotli\tests\testdata\64x.compressed
cp Brotli/tests/run-compatibility-test.cmake blib\lib\IO\Compress\Brotli\tests\run-compatibility-test.cmake
cp Brotli/tests/testdata/asyoulik.txt blib\lib\IO\Compress\Brotli\tests\testdata\asyoulik.txt
cp Brotli/tests/testdata/alice29.txt.compressed blib\lib\IO\Compress\Brotli\tests\testdata\alice29.txt.compressed
cp Brotli/tests/testdata/64x blib\lib\IO\Compress\Brotli\tests\testdata\64x
cp Brotli/tests/testdata/backward65536.compressed blib\lib\IO\Compress\Brotli\tests\testdata\backward65536.compressed
cp Brotli/tests/testdata/10x10y blib\lib\IO\Compress\Brotli\tests\testdata\10x10y
cp Brotli/tests/testdata/asyoulik.txt.compressed blib\lib\IO\Compress\Brotli\tests\testdata\asyoulik.txt.compressed
cp Brotli/tests/run-roundtrip-test.cmake blib\lib\IO\Compress\Brotli\tests\run-roundtrip-test.cmake
cp Brotli/tests/testdata/empty blib\lib\IO\Compress\Brotli\tests\testdata\empty
cp Brotli/tests/testdata/compressed_repeated blib\lib\IO\Compress\Brotli\tests\testdata\compressed_repeated
cp Brotli/tests/testdata/compressed_repeated.compressed blib\lib\IO\Compress\Brotli\tests\testdata\compressed_repeated.compressed
cp Brotli/tests/testdata/empty.compressed.03 blib\lib\IO\Compress\Brotli\tests\testdata\empty.compressed.03
cp Brotli/tests/testdata/compressed_file blib\lib\IO\Compress\Brotli\tests\testdata\compressed_file
cp Brotli/tests/testdata/empty.compressed.00 blib\lib\IO\Compress\Brotli\tests\testdata\empty.compressed.00
cp Brotli/tests/testdata/empty.compressed.04 blib\lib\IO\Compress\Brotli\tests\testdata\empty.compressed.04
cp Brotli/tests/testdata/empty.compressed.01 blib\lib\IO\Compress\Brotli\tests\testdata\empty.compressed.01
cp Brotli/tests/testdata/bb.binast blib\lib\IO\Compress\Brotli\tests\testdata\bb.binast
cp Brotli/tests/testdata/compressed_file.compressed blib\lib\IO\Compress\Brotli\tests\testdata\compressed_file.compressed
cp Brotli/tests/testdata/empty.compressed blib\lib\IO\Compress\Brotli\tests\testdata\empty.compressed
cp Brotli/tests/testdata/empty.compressed.02 blib\lib\IO\Compress\Brotli\tests\testdata\empty.compressed.02
cp Brotli/tests/testdata/empty.compressed.06 blib\lib\IO\Compress\Brotli\tests\testdata\empty.compressed.06
cp Brotli/tests/testdata/empty.compressed.08 blib\lib\IO\Compress\Brotli\tests\testdata\empty.compressed.08
cp Brotli/tests/testdata/empty.compressed.11 blib\lib\IO\Compress\Brotli\tests\testdata\empty.compressed.11
cp Brotli/tests/testdata/empty.compressed.13 blib\lib\IO\Compress\Brotli\tests\testdata\empty.compressed.13
cp Brotli/tests/testdata/empty.compressed.07 blib\lib\IO\Compress\Brotli\tests\testdata\empty.compressed.07
cp Brotli/tests/testdata/empty.compressed.12 blib\lib\IO\Compress\Brotli\tests\testdata\empty.compressed.12
cp Brotli/tests/testdata/empty.compressed.14 blib\lib\IO\Compress\Brotli\tests\testdata\empty.compressed.14
cp Brotli/tests/testdata/empty.compressed.09 blib\lib\IO\Compress\Brotli\tests\testdata\empty.compressed.09
cp Brotli/tests/testdata/empty.compressed.10 blib\lib\IO\Compress\Brotli\tests\testdata\empty.compressed.10
cp Brotli/tests/testdata/empty.compressed.05 blib\lib\IO\Compress\Brotli\tests\testdata\empty.compressed.05
cp Brotli/tests/testdata/empty.compressed.15 blib\lib\IO\Compress\Brotli\tests\testdata\empty.compressed.15
cp Brotli/tests/testdata/lcet10.txt blib\lib\IO\Compress\Brotli\tests\testdata\lcet10.txt
cp Brotli/tests/testdata/plrabn12.txt blib\lib\IO\Compress\Brotli\tests\testdata\plrabn12.txt
cp Brotli/tests/testdata/quickfox blib\lib\IO\Compress\Brotli\tests\testdata\quickfox
cp Brotli/tests/testdata/lcet10.txt.compressed blib\lib\IO\Compress\Brotli\tests\testdata\lcet10.txt.compressed
cp Brotli/tests/testdata/monkey.compressed blib\lib\IO\Compress\Brotli\tests\testdata\monkey.compressed
cp Brotli/tests/testdata/mapsdatazrh.compressed blib\lib\IO\Compress\Brotli\tests\testdata\mapsdatazrh.compressed
cp Brotli/tests/testdata/empty.compressed.18 blib\lib\IO\Compress\Brotli\tests\testdata\empty.compressed.18
cp Brotli/tests/testdata/empty.compressed.17 blib\lib\IO\Compress\Brotli\tests\testdata\empty.compressed.17
cp Brotli/tests/testdata/monkey blib\lib\IO\Compress\Brotli\tests\testdata\monkey
cp Brotli/tests/testdata/mapsdatazrh blib\lib\IO\Compress\Brotli\tests\testdata\mapsdatazrh
cp Brotli/tests/testdata/plrabn12.txt.compressed blib\lib\IO\Compress\Brotli\tests\testdata\plrabn12.txt.compressed
cp Brotli/tests/testdata/empty.compressed.16 blib\lib\IO\Compress\Brotli\tests\testdata\empty.compressed.16
cp Brotli/tests/testdata/x blib\lib\IO\Compress\Brotli\tests\testdata\x
cp Brotli/tests/testdata/x.compressed blib\lib\IO\Compress\Brotli\tests\testdata\x.compressed
cp Brotli/tests/testdata/quickfox_repeated.compressed blib\lib\IO\Compress\Brotli\tests\testdata\quickfox_repeated.compressed
cp Brotli/tests/testdata/x.compressed.00 blib\lib\IO\Compress\Brotli\tests\testdata\x.compressed.00
cp Brotli/tests/testdata/ukkonooa.compressed blib\lib\IO\Compress\Brotli\tests\testdata\ukkonooa.compressed
cp Brotli/tests/testdata/random_org_10k.bin blib\lib\IO\Compress\Brotli\tests\testdata\random_org_10k.bin
cp Brotli/tests/testdata/ukkonooa blib\lib\IO\Compress\Brotli\tests\testdata\ukkonooa
cp Brotli/tests/testdata/x.compressed.01 blib\lib\IO\Compress\Brotli\tests\testdata\x.compressed.01
cp Brotli/tests/testdata/quickfox_repeated blib\lib\IO\Compress\Brotli\tests\testdata\quickfox_repeated
cp Brotli/tests/testdata/random_org_10k.bin.compressed blib\lib\IO\Compress\Brotli\tests\testdata\random_org_10k.bin.compressed
cp Brotli/tests/testdata/random_chunks blib\lib\IO\Compress\Brotli\tests\testdata\random_chunks
cp Brotli/tests/testdata/quickfox.compressed blib\lib\IO\Compress\Brotli\tests\testdata\quickfox.compressed
cp lib/IO/Compress/Brotli.pm blib\lib\IO\Compress\Brotli.pm
cp lib/IO/Uncompress/Brotli.pm blib\lib\IO\Uncompress\Brotli.pm
cp Brotli/tests/testdata/x.compressed.02 blib\lib\IO\Compress\Brotli\tests\testdata\x.compressed.02
cp Brotli/tests/testdata/zeros blib\lib\IO\Compress\Brotli\tests\testdata\zeros
cp Brotli/tests/testdata/zeros.compressed blib\lib\IO\Compress\Brotli\tests\testdata\zeros.compressed
cp Brotli/tests/testdata/xyzzy blib\lib\IO\Compress\Brotli\tests\testdata\xyzzy
cp Brotli/tests/testdata/xyzzy.compressed blib\lib\IO\Compress\Brotli\tests\testdata\xyzzy.compressed
cp Brotli/tests/testdata/x.compressed.03 blib\lib\IO\Compress\Brotli\tests\testdata\x.compressed.03
cd brotli && CFLAGS=-fPIC `which gmake || echo gmake` lib
'CFLAGS' is not recognized as an internal or external command,
operable program or batch file.
gmake` lib
Running Mkbootstrap for Brotli ()
"C:\Strawberry\perl\bin\perl.exe" -MExtUtils::Command -e chmod -- 644 "Brotli.bs"
"C:\Strawberry\perl\bin\perl.exe" -MExtUtils::Command::MM -e cp_nonempty -- Brotli.bs blib\arch\auto\IO\Compress\Brotli\Brotli.bs 644
"C:\Strawberry\perl\bin\perl.exe" "C:\Strawberry\perl\site\lib\ExtUtils/xsubpp"  -typemap C:\STRAWB~1\perl\lib\ExtUtils\typemap -typemap C:\STRAWB~1\cpan\build\IO-Compress-Brotli-0.004001-1\typemap  Brotli.xs > Brotli.xsc
"C:\Strawberry\perl\bin\perl.exe" -MExtUtils::Command -e mv -- Brotli.xsc Brotli.c
gcc -c  -Ibrotli/c/include -s -O2 -DWIN32 -DWIN64 -DCONSERVATIVE -D__USE_MINGW_ANSI_STDIO -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -fwrapv -fno-strict-aliasing -mms-bitfields -s -O2   -DVERSION=\"0.004001\" -DXS_VERSION=\"0.004001\"  "-IC:\STRAWB~1\perl\lib\CORE"   Brotli.c
"C:\Strawberry\perl\bin\perl.exe" -MExtUtils::Mksymlists \
     -e "Mksymlists('NAME'=>\"IO::Compress::Brotli\", 'DLBASE' => 'Brotli', 'DL_FUNCS' => {  }, 'FUNCLIST' => [], 'IMPORTS' => {  }, 'DL_VARS' => []);"
g++ Brotli.def -o blib\arch\auto\IO\Compress\Brotli\Brotli.xs.dll -mdll -s -L"C:\STRAWB~1\perl\lib\CORE" -L"C:\STRAWB~1\c\lib" Brotli.o  brotli/libbrotli.a "C:\STRAWB~1\perl\lib\CORE\libperl526.a" -lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 -luuid -lws2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 -lcomctl32 -Wl,--enable-auto-image-base
g++: error: brotli/libbrotli.a: No such file or directory
gmake: *** [Makefile:639: blib\arch\auto\IO\Compress\Brotli\Brotli.xs.dll] Error 1
  MGV/IO-Compress-Brotli-0.004001.tar.gz
  C:\STRAWB~1\c\bin\gmake.exe -- NOT OK
Running install for module 'IO::Compress::Brotli'
  MGV/IO-Compress-Brotli-0.004001.tar.gz
  Has already been unwrapped into directory C:\STRAWB~1\cpan\build\IO-Compress-Brotli-0.004001-1
  MGV/IO-Compress-Brotli-0.004001.tar.gz
  Has already been prepared
  MGV/IO-Compress-Brotli-0.004001.tar.gz
  Could not make: Unknown error

Failed during this command:
 (optional) MGV/IO-Compress-Brotli-0.004001.tar.gz: make NO

cpan> i HTTP::Message
Module id = HTTP::Message
    CPAN_USERID  OALDERS (Olaf Alders <olaf@wundersolutions.com>)
    CPAN_VERSION 6.44
    CPAN_FILE    O/OA/OALDERS/HTTP-Message-6.44.tar.gz
    UPLOAD_DATE  2022-10-26
    MANPAGE      HTTP::Message - HTTP style message (base class)
    INST_FILE    C:\Strawberry\perl\site\lib\HTTP\Message.pm
    INST_VERSION 6.44


cpan> q
Lockfile removed.

C:\Users\Phil\Desktop>

Note that HTTP::Message itself does install. IO::Compress::Brotli (corequisite?) blows up during installation due to no libbrotli.a and a possible syntax error (thinks CFLAGS is a command). It's mostly a nuisance that Brotli fails to install, but if it ever was needed, that could cause HTTP::Message to fail.

Note that I do not normally manually install like this. I have a Perl script that loops through Perl 5.24, 5.26, and 5.32, invokes cpan, does an 'r', filters out known problem versions that either won't work on this Perl level (such as 'B') or have already been tried (and failed). Then the survivors get an upgrade done for them.

My understanding is that, with CPAN, even if you list something as optional, it will still try to install it. If it fails, the install still passes (so long as mandatory/required items install successfully). I think that's happening here. It's a nuisance to wade through the messages to see that a "failed" install doesn't really matter, so I'm asking you to consider whether to support Brotli at all. Maybe you can check if the installation is on Windows, and build the Makefile not to request Brotli? You would probably want a dummy stub for Brotli, so that users are told why there are failures if using Brotli compression.