{"author":"Viktor Szakats","author_email":"commit@vsz.me","author_time":1725834784,"commit_time":1742130128,"committer":"Viktor Szakats","committer_email":"commit@vsz.me","hash":"f4f25505df1d2ede727071eb0c518368a206f64b","message":"tests/server: support bundle binary\n\nExtend existing `--enable-test-bundles` and `-DCURL_TEST_BUNDLES=ON`\noptions to also bundle test server programs into a single binary. With\nautotools, also bundle auxiliary libcurl sources for a \"unity\"-style\nbuild.\n\nIt saves almost 10 minutes per run, across all CI jobs.\nOn average it makes `build tests` steps 25% faster.\n\nWith CMake, it brings down `testdeps` build steps to 32 to 37, from\n45 to 64 before this patch, with unity. Without unity it brings it down\nfrom 400-420 to 280-300. For comparison, without unity and bundles,\nthe number of build steps is around 1850.\n\nWith autotools the gain is possibly larger because this patch does unity\nand bundle for test servers.\n\nThe total reduction of build steps / log lines is 12000. It's 44% of\nreduction on average across all CI jobs.\n\nFollow-up to 77401af4852103b215fe74989e89be61bbf435d2 #16695\nFollow-up to 71cf0d1fca9e1f53524e1545ef0c08d174458d80 #14772\n\nComparison of 'build tests' targets in S(econds) and L(ines/steps),\nbetween before and after this patch:\n\nCI job                                    |BefS|AftS|Gain|BefL|AftL|Gain| Comments\n:---------------------------------------- | -: | -: | -: | --:| --:| --:| :-------\nGHA/windows                               |    |    |    |    |    |    |\nCygwin AM                                 |110 | 95 | 15 | 237|  88| 149| l(ines)\nCygwin CM                                 | 34 | 27 |  7 |  63|  36|  27| s(teps, with Ninja)\nmsys2, AM x86_64 !proxy                   | 35 | 21 | 14 | 255| 108| 147| l\nmsys2, AM x86_64 default                  | 35 | 22 | 13 | 255| 108| 147| l\nmsys2, CM x86_64 default                  | 14 | 11 |  3 |  63|  36|  27| s\nmsys2, AM x86_64 default R                | 41 | 29 | 12 | 245|  96| 149| l\nmingw, AM x86_64 default                  | 69 | 33 | 36 | 331| 156| 175| l\nmingw, AM x86_64 c-ares U                 | 69 | 33 | 36 | 331| 156| 175| l\nmingw, CM x86_64 schannel c-ares U        | 32 | 24 |  8 |  63|  36|  27| s\nmingw, CM clang-x86_64 gnutls             |  9 |  6 |  3 |  63|  36|  27| s\nmingw, CM ucrt-x86_64 schannel R TrackMem | 43 | 35 |  8 |  64|  37|  27| s\nmingw, CM clang-x86_64 openssl            | 20 | 18 |  2 |  63|  36|  27| s\nmingw, CM ucrt-x86_64 schannel uwp        | 36 | 34 |  2 |  47|  34|  13| s\nmingw, CM x86_64 schannel dev debug       | 32 | 24 |  8 |  64|  37|  27| s\nmingw, CM i686 schannel R                 | 38 | 37 |  1 |  47|  34|  13| s\ndl-mingw, CM 9.5.0-x86_64 schan           |102 | 94 |  8 |  63|  36|  27| s\ndl-mingw, CM 7.3.0-x86_64 schan mbedtls U | 32 | 24 |  8 |  94|  60|  34| l\ndl-mingw, CM 6.4.0-i686 schannel !unity   | 42 | 31 | 11 | 427| 297| 130| l (no unity, yes bundle)\nlinux-mingw, AM gcc                       |  - |  - |    |   -|   -|    |\nlinux-mingw, CM gcc                       | 12 | 10 |  2 |  46|  33|  13| s\nmingw32ce, AM 4.4.0-arm schannel          |  - |  - |    |   -|   -|    |\nmingw32ce, CM 4.4.0-arm schannel          | 30 | 31 | -1 |  81|  61|  20| l\nmsvc, CM x64-uwp openssl +examples        | 13 | 10 |  3 | 102|  68|  34| l\nmsvc, CM x64-windows openssl              | 13 | 10 |  3 | 102|  68|  34| l\nmsvc, CM x64-windows schannel MultiSSL U  | 13 | 10 |  3 | 102|  68|  34| l\nmsvc, CM x64-windows libressl             | 14 | 13 |  1 | 102|  68|  34| l\nmsvc, CM x64-windows boringssl            | 11 | 11 |  0 |  84|  64|  20| l\nmsvc, CM x64-windows wolfssl +examples    | 13 | 10 |  3 | 102|  68|  34| l\nmsvc, CM x64-windows mbedtls libssh       | 14 | 10 |  4 | 102|  68|  34| l\nGHA/old-linux:                            |    |    |    |    |    |    |\nlinux (cmake & autoconf) AM               | 14 | 11 |  3 | 217|  75| 142| l\nlinux (cmake & autoconf) CM               | 15 | 13 |  2 | 545| 380| 165| l\nGHA/non-native:                           |    |    |    |    |    |    |\nAmigaOS, AM gcc AmiSSL m68k               |  - |  - |    |   -|   -|    |\nAmigaOS, CM gcc AmiSSL m68k               |  8 |  7 |  1 |  78|  58|  20| l\nAndroid 21, AM openssl arm64              |  7 |  5 |  2 | 222|  80| 142| l\nAndroid 21, CM openssl arm64              |  4 |  5 | -1 |  81|  61|  20| l\nAndroid 35, AM openssl arm64              |  7 |  5 |  2 | 222|  80| 142| l\nAndroid 35, CM boringssl !zstd arm64      |  4 |  3 |  1 |  81|  61|  20| l\nAndroid 35, CM openssl arm64              |  5 |  4 |  1 |  81|  61|  20| l\nFreeBSD, AM clang openssl arm64           |  - |  - |    |   -|   -|    |\nFreeBSD, AM clang openssl x86_64          |  7 |  3 |  4 | 513| 133| 380| l\nFreeBSD, CM clang openssl !unity !bundle..| 49 | 47 |  2 |1841|1841|    | s (no unity, no bundle)\nFreeBSD, CM clang openssl arm64           |  - |  - |    |   -|   -|    |\nMS-DOS, AM djgpp openssl i586             |  - |  - |    |   -|   -|    |\nMS-DOS, CM djgpp openssl i586             |  6 |  7 | -1 |  45|  32|  13| s\nNetBSD, CM clang openssl x86_64           | 15 | 13 |  2 |  62|  35|  27| s\nOmniOS, AM gcc openssl amd64              | 20 | 11 |  9 | 216|  74| 142| l\nOpenBSD, CM clang libressl x86_64         |  9 |  7 |  2 |  62|  35|  27| s\niOS, AM libressl arm64                    |  6 |  3 |  3 | 217|  68| 149| l\niOS, CM libressl arm64                    | 10 | 10 |  0 | 236| 175|  61| l\niOS, CM-Xcode libressl arm64              | 13 |  8 |  5 | 899| 627| 272| l\nGHA/linux:                                |    |    |    |    |    |    |\nAM bearssl                                |  9 |  8 |  1 | 258| 111| 147| l\nAM bearssl clang                          |  6 |  4 |  2 | 258| 111| 147| l\nAM libressl heimdal                       | 11 |  8 |  3 | 267| 120| 147| l\nCM libressl heimdal valgrind              |  8 |  5 |  3 |  62|  35|  27| s\nAM libressl clang                         |  7 |  4 |  3 | 258| 111| 147| l\nAM wolfssl-all                            | 11 |  8 |  3 | 258| 111| 147| l\nAM wolfssl-opensslextra valgrind          | 11 |  7 |  4 | 258| 111| 147| l\nAM mbedtls valgrind                       | 10 |  7 |  3 | 258| 111| 147| l\nAM mbedtls clang                          |  6 |  3 |  3 | 258| 111| 147| l\nCM mbedtls                                |  7 |  6 |  1 |  62|  35|  27| s\nCM mbedtls-pkg                            |  7 |  7 |  0 |  62|  35|  27| s\nCM mbedtls-pkg !pc                        |  - |  - |    |   -|   -|    |\nAM msh3                                   | 10 |  7 |  3 | 258| 111| 147| l\nCM msh3                                   |  7 |  7 |  0 |  62|  35|  27| s\nAM awslc                                  | 18 | 15 |  3 | 247|  98| 149| l\nCM awslc                                  | 13 | 11 |  2 | 400| 277| 123| s (no unity, yes bundle)\nAM openssl default                        | 10 |  7 |  3 | 258| 111| 147| l\nAM openssl libssh2 sync-resolver valgrind | 10 |  7 |  3 | 258| 111| 147| l\nAM openssl                                | 11 |  7 |  4 | 258| 111| 147| l\nAM openssl -O3 valgrind                   | 26 | 21 |  5 | 258| 111| 147| l\nAM openssl clang krb5                     |  7 |  3 |  4 | 265| 118| 147| l\nCM openssl clang krb5 LTO                 |  - |  - |    |   -|   -|    |\nAM openssl !ipv6 !--libcurl               | 10 |  7 |  3 | 258| 111| 147| l\nAM openssl https-only                     | 11 |  8 |  3 | 258| 111| 147| l\nCM openssl torture !FTP                   |  7 |  6 |  1 |  62|  35|  27| s\nCM openssl torture FTP                    |  8 |  6 |  2 |  62|  35|  27| s\nAM openssl i686                           | 12 |  9 |  3 | 258| 111| 147| l\nAM !ssl !http !smtp !imap                 | 10 |  7 |  3 | 258| 111| 147| l\nAM clang-tidy                             |  - |  - |    |   -|   -|    |\nAM scanbuild                              |  - |  - |    |   -|   -|    |\nAM address-sanitizer                      | 10 |  6 |  4 | 258| 111| 147| l\nAM thread-sanitizer                       |  7 |  4 |  3 | 258| 111| 147| l\nAM memory-sanitizer                       | 10 |  6 |  4 | 258| 111| 147| l\nAM event-based                            | 10 |  7 |  3 | 253| 106| 147| l\nAM duphandle                              | 10 |  8 |  2 | 253| 106| 147| l\nAM rustls valgrind                        | 10 |  8 |  2 | 258| 111| 147| l\nCM rustls                                 |  7 |  5 |  2 |  62|  35|  27| s\nAM IntelC openssl                         | 18 | 14 |  4 | 572| 282| 290| l\nAM Slackware openssl gssapi gcc           | 17 | 14 |  3 | 252| 103| 149| l\nAM Alpine MUSL https-rr                   | 15 | 11 |  4 | 266| 119| 147| l\nAM Alpine MUSL c-ares https-rr            | 15 | 11 |  4 | 266| 119| 147| l\nGHA/linux-http3:                          |    |    |    |    |    |    |\nAM quictls                                | 12 |  8 |  4 | 258| 111| 147| l\nAM gnutls                                 | 11 |  8 |  3 | 257| 110| 147| l\nAM wolfssl                                | 11 |  9 |  2 | 257| 110| 147| l\nCM wolfssl                                |  8 |  7 |  1 |  62|  35|  27| s\nAM openssl-quic                           | 11 |  8 |  3 | 257| 110| 147| l\nAM quiche                                 | 11 |  9 |  2 | 257| 110| 147| l\nCM quiche                                 |  8 |  6 |  2 |  62|  35|  27| s\nGHA/macos:                                |    |    |    |    |    |    |\nAM clang !ssl !debug brotli zstd          |  5 |  3 |  2 | 218|  69| 149| l\nAM clang !ssl                             |  4 |  5 | -1 | 227|  80| 147| l\nAM clang !ssl libssh2 AppleIDN            |  5 |  1 |  4 | 227|  80| 147| l\nAM clang OpenSSL libssh c-ares            |  4 |  2 |  2 | 227|  80| 147| l\nAM clang !ssl c-ares                      |  4 |  5 | -1 | 227|  80| 147| l\nAM clang !ssl HTTP-only                   |  4 |  2 |  2 | 222|  75| 147| l\nAM clang SecureTransport libssh2          |  3 |  3 |  0 | 227|  80| 147| l\nAM clang SecureTransport libssh2 10.12    |  4 |  2 |  2 | 227|  80| 147| l\nAM clang LibreSSL +examples               |  5 |  2 |  3 | 227|  80| 147| l\nAM clang OpenSSL                          |  6 |  1 |  5 | 227|  80| 147| l\nAM clang OpenSSL event-based              |  5 |  3 |  2 | 227|  80| 147| l\nAM clang quictls libssh2 !ldap 10.15      |  4 |  2 |  2 | 227|  80| 147| l\nCM clang OpenSSL gsasl rtmp AppleIDN      |  2 |  2 |  0 |  45|  32|  13| s\nCM clang OpenSSL AppleIDN clang-tidy +e   |150 | 76 | 74 | 400| 277| 123| s (clang-tidy)\nCM clang quictls +static libssh +examples |  2 |  2 |  0 |  45|  32|  13| s\nCM clang SecureTransport debug            |  2 |  2 |  0 |  62|  35|  27| s\nCM clang LibreSSL !ldap heimdal c-ares +e |  4 |  2 |  2 |  45|  32|  13| s\nCM clang wolfSSL !ldap brotli zstd        |  1 |  2 | -1 |  45|  32|  13| s\nCM clang mbedTLS openldap brotli zstd     |  1 |  2 | -1 |  45|  32|  13| s\nCM clang GnuTLS !ldap krb5                |  0 |  1 |  0 |  45|  32|  13| s\nCM clang OpenSSL torture !FTP             |  2 |  1 |  1 |  61|  34|  27| s\nCM clang OpenSSL torture FTP              |  2 |  1 |  1 |  61|  34|  27| s\nAM llvm@15 OpenSSL libssh                 |  5 |  4 |  1 | 227|  80| 147| l\nCM llvm@15 OpenSSL gsasl rtmp AppleIDN    |  3 |  2 |  1 |  45|  32|  13| s\nCM llvm@15 quictls +static libssh +e      |  2 |  2 |  0 |  45|  32|  13| s\nCM llvm@15 SecureTransport debug          |  3 |  2 |  1 |  62|  35|  27| s\nCM llvm@15 LibreSSL !ldap heimdal c-ares..|  3 |  1 |  2 |  45|  32|  13| s\nCM llvm@15 wolfSSL !ldap brotli zstd      |  3 |  2 |  1 |  45|  32|  13| s\nCM llvm@15 mbedTLS openldap brotli zstd   |  2 |  2 |  0 |  45|  32|  13| s\nCM llvm@15 GnuTLS !ldap krb5              |  2 |  1 |  1 |  45|  32|  13| s\nAM gcc-12 !ssl !debug                     | 18 | 12 |  6 | 218|  69| 149| l\nAM gcc-12 SecureTransport libssh2         | 13 |  6 |  7 | 227|  80| 147| l\nCM gcc-12 OpenSSL gsasl rtmp AppleIDN     |  7 |  5 |  2 |  45|  32|  13| s\nCM gcc-12 quictls +static libssh +e       |  8 |  6 |  2 |  45|  32|  13| s\nCM gcc-12 SecureTransport debug           |  8 |  6 |  2 |  62|  35|  27| s\nCM gcc-12 LibreSSL !ldap heimdal c-ares...|  7 |  6 |  1 |  45|  32|  13| s\nCM gcc-12 wolfSSL !ldap brotli zstd       | 16 |  6 | 10 |  45|  32|  13| s\nCM gcc-12 mbedTLS openldap brotli zstd    | 11 |  6 |  5 |  45|  32|  13| s\nCM gcc-12 GnuTLS !ldap krb5               |  7 |  5 |  2 |  45|  32|  13| s\nAppVeyor:                                 |    |    |    |    |    |    |\nVS2008 D x86 OpenSSL + Schannel SH +e     | 56 | 39 | 17 |  21|  14|   7| s (VCBuild)\nVS2010 D x64 Schannel SH +e               | 14 | 12 |  2 | 105|  78|  27| l\nVS2012 R x86 OpenSSL + Schannel SH        | 23 | 21 |  2 |  84|  64|  20| l\nVS2013 D x64 OpenSSL SH Build-only        |  - |  - |    |   -|   -|    | (no build tests)\nVS2015 D x64 OpenSSL ST Build-only        |  - |  - |    |   -|   -|    | (no build tests)\nVS2017 D x64 OpenSSL SH Build-only        |  - |  - |    |   -|   -|    | (no build tests)\nVS2019 D x64 OpenSSL + Schannel SH        | 33 | 26 |  7 |  81|  61|  20| l\nVS2022 D x64 !SSL ST                      | 32 | 25 |  7 |  79|  59|  20| l\nVS2022 D x64 !SSL ST HTTP-only            | 33 | 22 | 11 |  79|  59|  20| l\nVS2022 R arm64 Schannel ST                | 74 | 69 |  5 |  79|  59|  20| l\nVS2022 R x64 Schannel SH U DBGBLD !CURLDBG| 66 | 61 |  5 |  78|  58|  20| l\nVS2022 D x64 Schannel ST U                | 34 | 25 |  9 |  79|  59|  20| l\nVS2022 D x64 Schannel ST U clang-cl +e    | 42 | 34 |  8 |  53|  40|  13| l\nVS2022 R x64 OpenSSL SH                   | 60 | 58 |  2 |  83|  63|  20| l\nTotal                                     |2394|1807|-587| 26k| 14k|-12k|\nin %                                      |    |    |-24%|    |    |-45%|\nin minutes                                |    |    |9m47|    |    |    |\n\nBefore:\nGHA/windows: https://github.com/curl/curl/actions/runs/13854983424\nGHA/old-linux: https://github.com/curl/curl/actions/runs/13854983399\nGHA/non-native: https://github.com/curl/curl/actions/runs/13854983427\nGHA/linux-http3: https://github.com/curl/curl/actions/runs/13854983409\nGHA/linux: https://github.com/curl/curl/actions/runs/13854983406\nGHA/macos: https://github.com/curl/curl/actions/runs/13854983401\nAppveyor: https://ci.appveyor.com/project/curlorg/curl/builds/51703551\n\nAfter:\nGHA/windows: https://github.com/curl/curl/actions/runs/13860433850?pr=15000\nGHA/old-linux: https://github.com/curl/curl/actions/runs/13860433809?pr=15000\nGHA/non-native: https://github.com/curl/curl/actions/runs/13860433828?pr=15000\nGHA/linux-http3: https://github.com/curl/curl/actions/runs/13860433806?pr=15000\nGHA/linux: https://github.com/curl/curl/actions/runs/13860433848?pr=15000\nGHA/macos: https://github.com/curl/curl/actions/runs/13860433835?pr=15000\nAppveyor: https://ci.appveyor.com/project/curlorg/curl/builds/51704222\n\nCloses #15000\n","parents":["d5b403074ed2b28e41e0c17dcd436252d38adfa3"],"tree_hash":"903c9214a51fda51e3c700cd005547a8e6ff9cbd"}