curl/scripts
Viktor Szakats 60c3d04465
autotools: add support for 'unity' builds, enable in CI
Implement the "unity" builds as known from CMake, but for autotools.
It's limited to `lib` and `src` (CMake also supports it in `tests`).

Enable with: `--enable-unity` (disabled by default)

Unity builds speed up builds significantly. Cygwin and Windows builds in
particular, but the effect is noticeable on most systems. It also allows
discovering unity issues with autotools, benefitting also CMake when
building the same combination. In CI it makes turnaround times quicker.

This closes build performance with CMake. autotools still lags behind
because it builds shared and static libcurl in two, separate passes.
CMake does it in one. Manpage compilation isn't batched, it is in CMake.
After unity and test bundle support the slowest parts of the build are
the configuration phase (which is effectively a tedious, non-parallel,
compilation and/or linking of 300+ tiny programs. The next bottleneck
is compiling individual examples and finally test servers (only slow
with autotools).

The autotools implementation is slightly less efficient than CMake,
because 3 sources are permanently excluded while in CMake this isn't
necessary and solved more efficiently while building libtests. There is
also no 'unity' support for tests, making them a less efficient also.

Enable it in CI for most `configure` jobs. Except in GHA/dist (though
it works fine there too), to use the default config there. Also skip for
the Linux AWC-LC job where it made builds time a few seconds longer
(reason undiscovered.)

Autotools test suite builds compared between master -> `--enable-unity`:
- GHA/Linux: 32s -> 12s
  https://github.com/curl/curl/actions/runs/10705668823/job/29681617374
  https://github.com/curl/curl/actions/runs/10742978889/job/29796766297
- GHA/macOS: 37s -> 10s
  https://github.com/curl/curl/actions/runs/10705668813/job/29681632885
  https://github.com/curl/curl/actions/runs/10742978699/job/29796768875
- GHA/FreeBSD: 15m25 -> 10m58 (full workflow time, ~qemu)
  https://github.com/curl/curl/actions/runs/10705668811/job/29681607915
  https://github.com/curl/curl/actions/runs/10742978937/job/29796766115
- GHA/Cygwin: 3m32 -> 1m21
  https://github.com/curl/curl/actions/runs/10705668809/job/29681609965
  https://github.com/curl/curl/actions/runs/10742978645/job/29796756933
- GHA/MSYS2: 2m42 -> 50s
  https://github.com/curl/curl/actions/runs/10705668808/job/29681621166
  https://github.com/curl/curl/actions/runs/10742978662/job/29799739289
- GHA/mingw-w64: 5m32 -> 1m23
  https://github.com/curl/curl/actions/runs/10705668808/job/29681628787
  https://github.com/curl/curl/actions/runs/10742978662/job/29799741568

Closes #14815
2024-09-20 23:53:33 +02:00
..
cd2cd docs: introduce "curldown" for libcurl man page format 2024-01-23 00:29:02 +01:00
cd2nroff libcurl-docs: CURLINFO_LOCAL_* work for QUIC as well as TCP 2024-09-11 08:16:28 +02:00
cdall docs: introduce "curldown" for libcurl man page format 2024-01-23 00:29:02 +01:00
checksrc.pl checksrc: check for spaces around '?', '>' and '<' 2024-09-19 14:59:12 +02:00
ciconfig.pl tidy-up: use /usr/bin/env perl shebang 2024-06-26 23:58:10 +02:00
cijobs.pl tidy-up: use /usr/bin/env perl shebang 2024-06-26 23:58:10 +02:00
cmakelint.sh CI: add a script and job to run cmakelint 2024-08-27 08:33:44 -07:00
completion.pl copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
contributors.sh GHA: add shellcheck job and fix warnings, shell tidy-ups 2024-04-08 09:37:24 +00:00
contrithanks.sh contrithanks.sh: use -F with -v to match lines as strings 2024-07-30 12:17:00 +02:00
coverage.sh GHA: add shellcheck job and fix warnings, shell tidy-ups 2024-04-08 09:37:24 +00:00
delta scripts/delta: output bugfixes/day 2024-09-06 08:47:06 +02:00
dmaketgz maketgz: move from / into scripts 2024-09-05 17:07:41 +02:00
firefox-db2pem.sh firefox-db2pem: mention what "certutil" the script uses 2024-09-06 08:57:34 +02:00
installcheck.sh GHA: add shellcheck job and fix warnings, shell tidy-ups 2024-04-08 09:37:24 +00:00
Makefile.am autotools: add support for 'unity' builds, enable in CI 2024-09-20 23:53:33 +02:00
maketgz maketgz: fix RELEASE-TOOLS.md for daily tarballs 2024-09-07 09:33:09 -07:00
managen managen: in man output, remove the leading space from examples 2024-08-30 10:09:48 +02:00
mk-ca-bundle.pl mk-ca-bundle.pl: include a link to the caextract webpage 2024-08-09 08:20:43 +02:00
mk-unity.pl autotools: add support for 'unity' builds, enable in CI 2024-09-20 23:53:33 +02:00
nroff2cd tidy-up: one comment and EOF newlines 2024-03-12 15:38:44 +00:00
release-notes.pl copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
release-tools.sh maketgz: fix RELEASE-TOOLS.md for daily tarballs 2024-09-07 09:33:09 -07:00
schemetable.c lib/src: white space edits to comply better with code style 2024-09-19 14:59:12 +02:00
singleuse.pl lib: add curl_multi_waitfds 2024-04-09 16:53:40 +02:00
verify-release configure: fail if PSL is not disabled but not found 2024-08-05 08:33:58 +02:00