D5447: Only add auto-detected compilers to model if they actually exist

Milian Wolff noreply at phabricator.kde.org
Sun Apr 14 09:41:15 BST 2019

mwolff requested changes to this revision.
mwolff added inline comments.
This revision now requires changes to proceed.


> iruntime.h:85
> +    virtual QString findExecutable(const QString& executableName,
> +                                   const QStringList& paths = QStringList()) const = 0;
> +

you can remove the `paths` arg - it's currently never used as far as I can see. we can add it if need be in the future

> arrowd wrote in androidruntime.cpp:98
> `getenv` there is `IRuntime::getenv()`. If I understand it right, it returns paths inside the RT, just what we need.

yes, a path in the runtime is by definition not a `pathInHost`. So `getenv("PATH")` will give use e.g. `/usr/bin` but then we need to map that into, say, `/opt/android/something/usr/bin`, no?

also, I just notice: please use `QByteArrayLiteral` around `"PATH"`

> arrowd wrote in compilerfactories.cpp:51
> Hmm. But the second arg of `createCompiler` is called `path`, and whole this patch is about passing a full path there.
> Probably, in presence of such thing as runtimes, we need to revise Compiler's API and do something about `path()` method?

afaik it's called path since it can be a user-provided absolute path. But the builtin compiler defaults all want to do dynamic lookups. so no, I think it's fine to keep the API but again - don't hardcode an absolute path in the host here - it should be a name that's checked in either the runtime or the host

> mwolff wrote in compilerprovider.cpp:264
> remove the `QFileInfo` and `.fileName()` here, just use the path like previously. note how the path could be an absolute path not inside the PATH, your patch would break this

see this comment again

> dockerruntime.cpp:253
> +QString DockerRuntime::findExecutable(const QString& executableName,
> +                                       const QStringList& paths) const {
> +    QStringList rtPaths;

open brace on its own line

> arrowd wrote in dockerruntime.cpp:256
> > also, the code is identical, so share it trough some "runtime helper header"
> Where to put it?

hmm good question. but see my comment above - since paths is never filled, we can simplify this code a lot and then the code duplication is potentially not that bad anymore.

but I would be OK with a trivial `runtimehelpers.h` with an inline implementation of this function for now. bonus points if you make this a proper static lib

> dockerruntime.cpp:258
> +        auto envPaths = getenv("PATH").split(':');
> +        std::transform(envPaths.begin(), envPaths.end(), rtPaths.begin(),
> +                       [](QByteArray p) {

all duplicated code paths that use transform will crash: you have to resize rtPaths to the correct size, or use a back_inserter

  R32 KDevelop


To: arrowd, mwolff, arichardson
Cc: skalinichev, apol, kdevelop-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kdevelop-devel/attachments/20190414/4e2ff310/attachment-0001.html>

More information about the KDevelop-devel mailing list