runtests: support multi-target cmake, drop workarounds from CI

Support multi-target cmake builds via `CURL_DIRSUFFIX` env. For example:
`export CURL_DIRSUFFIX=Debug/`.

Multi-target generators place their output to `src/<subdir>/`,
`lib/<subdir>/`, `tests/server/<subdir>`, `tests/libtest/<subdir>` and
`tests/unit/<subdir>/` by default. Before this patch, `runtests.pl`
couldn't run on such builds because it expected the binaries under the
their `<subdir>`-less directories. This patch allows to set such subdir
and make `runtests.pl` find the binaries. In CI we use multi-target
builds with tests for MSVC. It also helps Xcode-generator builds, though
in CI we don't have such job running tests.

There may be better solutions to configure this, but passing a custom
value to `runtests.pl` including its subprocesses is somewhat tricky.
The reason the configuration value expects the slash at the end is
because MSYS is automagically expanding the env to a (wrong) absolute
path if the slash is in the front.

Also:
- drop the `-DCMAKE_RUNTIME_OUTPUT_DIRECTORY_*=` workaround from CI.
- replace `resolve` references in tests with a new `%RESOLVE` variable.
  It didn't use a filename extension before. After this patch it uses
  `exe_ext('TOOL')`. I'm not sure if this is the correct choice vs.
  `exe_ext('SRV')`.
- fix `-c` option format in manual.
- fix some whitespace.

Note, in CI we still tweak `CMAKE_RUNTIME_OUTPUT_DIRECTORY_*` in jobs
which share steps between `./configure` and cmake. It's easier that way.

Ref: #15000
Cherry-picked from #16394

Closes #16452
This commit is contained in:
Viktor Szakats 2025-02-24 15:27:35 +01:00
parent db2fd7c3de
commit 3585796049
No known key found for this signature in database
GPG key ID: B5ABD165E2AEF201
16 changed files with 69 additions and 56 deletions

View file

@ -77,6 +77,7 @@ use serverhelp qw(
server_pidfilename
server_portfilename
server_logfilename
server_exe
);
use sshhelp qw(
@ -1959,8 +1960,8 @@ sub runmqttserver {
my $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
# start our MQTT server - on a random port!
my $cmd="server/mqttd".exe_ext('SRV').
" --port 0 ".
my $cmd=server_exe('mqttd').
" --port 0".
" --pidfile $pidfile".
" --portfile $portfile".
" --config $LOGDIR/$SERVERCMD".
@ -2017,7 +2018,7 @@ sub runsocksserver {
# start our socks server, get commands from the FTP cmd file
my $cmd="";
if($is_unix) {
$cmd="server/socksd".exe_ext('SRV').
$cmd=server_exe('socksd').
" --pidfile $pidfile".
" --reqfile $LOGDIR/$SOCKSIN".
" --logfile $logfile".
@ -2025,8 +2026,8 @@ sub runsocksserver {
" --backend $HOSTIP".
" --config $LOGDIR/$SERVERCMD";
} else {
$cmd="server/socksd".exe_ext('SRV').
" --port 0 ".
$cmd=server_exe('socksd').
" --port 0".
" --pidfile $pidfile".
" --portfile $portfile".
" --reqfile $LOGDIR/$SOCKSIN".
@ -3114,6 +3115,8 @@ sub subvariables {
$$thing =~ s/${prefix}VERNUM/$CURLVERNUM/g;
$$thing =~ s/${prefix}DATE/$DATE/g;
$$thing =~ s/${prefix}TESTNUMBER/$testnum/g;
my $resolve = server_exe('resolve', 'TOOL');
$$thing =~ s/${prefix}RESOLVE/$resolve/g;
# POSIX/MSYS/Cygwin curl needs: file://localhost/d/path/to
# Windows native curl needs: file://localhost/D:/path/to