src/StreamletAttributeFinder.h
branchv_0
changeset 45 f466b4c7d9b1
parent 35 926eb93c302f
child 46 b5ae61996281
--- 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<int, std::shared_ptr<SubProcess>> subProcesses;
 	std::map<int, std::vector<AttributeMetadata>> 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<string_t> commandLine = {getExecCommand(field)};
+				std::vector<string_t> commandLine = {field.name};
 				std::map<string_t, string_t> 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(SubProcess::create(commandLine, environment));
 				subProcesses[field.id] = subProcess;