From: Viktor Szakats Date: Sat, 29 Mar 2025 13:43:10 +0000 (+0100) Subject: genserv.pl: detect `openssl` in `PATH`, omit `command -v` X-Git-Tag: curl-8_13_0~22 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3e2860f66d8fd5a5f0561543c42e68ea948928e6;p=thirdparty%2Fcurl.git genserv.pl: detect `openssl` in `PATH`, omit `command -v` Before this patch the script relied on Perl `system()` finding `openssl` in `PATH`, plus tried to display the full path of `openssl` by using `command -v` (or `which` on Windows). `command -v` did not work in CI for unknown reasons. To resolve it, this patch detects `openssl` in `PATH` manually, displays the detected full path and calls `openssl` with the detected full path, and stops relying on `system` for this. It also follows how `sshhelp.pm` is detecting executables. Though this patch uses Perl `-f` instead of `-e && -d` used there . Silencing this in CI logs: ``` Can't exec "command": No such file or directory at ../../../tests/certs/genserv.pl line 51. ``` Ref: https://github.com/curl/curl/actions/runs/14145795884/job/39632942668?pr=16865#step:39:108 Closes #16868 --- diff --git a/tests/certs/genserv.pl b/tests/certs/genserv.pl index 092848988c..5475ee96a9 100755 --- a/tests/certs/genserv.pl +++ b/tests/certs/genserv.pl @@ -27,6 +27,7 @@ use strict; use warnings; use File::Basename; +use File::Spec; my $OPENSSL = 'openssl'; if(-f '/usr/local/ssl/bin/openssl') { @@ -48,7 +49,18 @@ if(!$CAPREFIX) { } elsif(! -f "$CAPREFIX-ca.cacert" || ! -f "$CAPREFIX-ca.key") { - system($^O eq 'MSWin32' ? 'which' : 'command -v' ." $OPENSSL"); + if($OPENSSL eq basename($OPENSSL)) { # has no dir component + # find openssl in PATH + foreach(File::Spec->path()) { + my $file = File::Spec->catfile($_, $OPENSSL); + if(-f $file) { + $OPENSSL = $file; + last; + } + } + } + + print "$OPENSSL\n"; system("$OPENSSL version"); $PREFIX = $CAPREFIX;