diff --git a/src/libs/utils/fileutils.cpp b/src/libs/utils/fileutils.cpp index fdae7c6b8d8..3d8f074962e 100644 --- a/src/libs/utils/fileutils.cpp +++ b/src/libs/utils/fileutils.cpp @@ -6,6 +6,7 @@ #include "algorithm.h" #include "devicefileaccess.h" +#include "environment.h" #include "qtcassert.h" #include "utilstr.h" @@ -843,4 +844,18 @@ qint64 FileUtils::bytesAvailableFromDFOutput(const QByteArray &dfOutput) return -1; } +FilePaths FileUtils::usefulExtraSearchPaths() +{ + if (HostOsInfo::isMacHost()) { + return {"/opt/homebrew/bin"}; + } else if (HostOsInfo::isWindowsHost()) { + const QString programData = + qtcEnvironmentVariable("ProgramData", + qtcEnvironmentVariable("ALLUSERSPROFILE", "C:/ProgramData")); + return {FilePath::fromUserInput(programData) / "chocolatey/bin"}; + } + + return {}; +} + } // namespace Utils diff --git a/src/libs/utils/fileutils.h b/src/libs/utils/fileutils.h index a1a7ffef977..316030b0397 100644 --- a/src/libs/utils/fileutils.h +++ b/src/libs/utils/fileutils.h @@ -85,6 +85,9 @@ public: static FilePathInfo filePathInfoFromTriple(const QString &infos, int modeBase); + //! Returns known paths like /opt/homebrew on macOS that might not be in PATH + static FilePaths usefulExtraSearchPaths(); + #ifdef QT_WIDGETS_LIB static void setDialogParentGetter(const std::function &getter); diff --git a/src/plugins/screenrecorder/screenrecordersettings.cpp b/src/plugins/screenrecorder/screenrecordersettings.cpp index 2d492af2509..cc00f6da065 100644 --- a/src/plugins/screenrecorder/screenrecordersettings.cpp +++ b/src/plugins/screenrecorder/screenrecordersettings.cpp @@ -54,16 +54,18 @@ ScreenRecorderSettings::ScreenRecorderSettings() ffmpegTool.setSettingsKey("FFmpegTool"); ffmpegTool.setExpectedKind(PathChooser::ExistingCommand); ffmpegTool.setCommandVersionArguments(versionArgs); - const FilePath ffmpegDefault = - Environment::systemEnvironment().searchInPath(Constants::FFMPEG_COMMAND); + const FilePath ffmpegDefault + = Environment::systemEnvironment().searchInPath(Constants::FFMPEG_COMMAND, + FileUtils::usefulExtraSearchPaths()); ffmpegTool.setDefaultValue(ffmpegDefault.toUserOutput()); ffmpegTool.setLabelText(Tr::tr("ffmpeg tool:")); ffprobeTool.setSettingsKey("FFprobeTool"); ffprobeTool.setExpectedKind(PathChooser::ExistingCommand); ffprobeTool.setCommandVersionArguments(versionArgs); - const FilePath ffprobeDefault = - Environment::systemEnvironment().searchInPath(Constants::FFPROBE_COMMAND); + const FilePath ffprobeDefault + = Environment::systemEnvironment().searchInPath(Constants::FFPROBE_COMMAND, + FileUtils::usefulExtraSearchPaths()); ffprobeTool.setDefaultValue(ffprobeDefault.toUserOutput()); ffprobeTool.setLabelText(Tr::tr("ffprobe tool:"));