diff -r dc5c210295d0 -r f466b4c7d9b1 src/StreamletAttributeFinder.h --- a/src/StreamletAttributeFinder.h Sat Jan 18 16:41:59 2020 +0100 +++ b/src/StreamletAttributeFinder.h Sat Jan 18 20:09:34 2020 +0100 @@ -43,11 +43,15 @@ std::map> subProcesses; std::map> cachedMetadata; - string_t getExecCommand(const RequestedField& field) { - // TODO: move to another directory, exec, not script + use custom $PATH with no prefix - return SCRIPT_PREFIX + field.name; + string_t getStreamletPath() { + const char* originalPath = getenv("PATH"); + const char* streamletPath = getenv("RELPIPE_IN_FILESYSTEM_STREAMLET_PATH"); + + if (originalPath && streamletPath) return convertor.from_bytes(std::string(streamletPath) + ":" + originalPath); + else if (originalPath) return convertor.from_bytes(std::string(originalPath)); + else if (streamletPath) return convertor.from_bytes(std::string(streamletPath)); + else return L""; } - protected: void startFile(const fs::path& file, const string& fileRaw, bool exists) override { @@ -86,7 +90,7 @@ return cachedMetadata[field.id]; } else { - std::vector commandLine = {getExecCommand(field)}; + std::vector commandLine = {field.name}; std::map environment; for (auto mn : StreamletMsg::getMessageNames()) { @@ -94,6 +98,8 @@ environment[L"EXEC_MSG_" + std::to_wstring(mn.first)] = mn.second; } + environment[L"PATH"] = getStreamletPath(); + shared_ptr subProcess(SubProcess::create(commandLine, environment)); subProcesses[field.id] = subProcess;