diff --git a/src/lime/system/CFFI.hx b/src/lime/system/CFFI.hx index fed0f62d4..b40c7a807 100644 --- a/src/lime/system/CFFI.hx +++ b/src/lime/system/CFFI.hx @@ -155,15 +155,15 @@ class CFFI if (result == null) { - var haxelib = __findHaxelib("lime"); + var ndllFolder = __findNDLLFolder(); - if (haxelib != "") + if (ndllFolder != "") { - result = __tryLoad(haxelib + "/ndll/" + __sysName() + "/" + library, library, method, args); + result = __tryLoad(ndllFolder + __sysName() + "/" + library, library, method, args); if (result == null) { - result = __tryLoad(haxelib + "/ndll/" + __sysName() + "64/" + library, library, method, args); + result = __tryLoad(ndllFolder + __sysName() + "64/" + library, library, method, args); } } } @@ -204,39 +204,27 @@ class CFFI #end } - private static function __findHaxelib(library:String):String + private static function __findNDLLFolder():String { #if (sys && !macro && !html5) + var process = new Process("haxelib", ["path", "lime"]); + try { - var proc = new Process("haxelib", ["path", library]); - - if (proc != null) + while (true) { - var stream = proc.stdout; + var line = StringTools.trim(process.stdout.readLine()); - try + if (StringTools.startsWith(line, "-L ")) { - while (true) - { - var s = stream.readLine(); - - if (s.substr(0, 1) != "-") - { - stream.close(); - proc.close(); - __loaderTrace("Found haxelib " + s); - return s; - } - } + process.close(); + return Path.addTrailingSlash(line.substr(3)); } - catch (e:Dynamic) {} - - stream.close(); - proc.close(); } } catch (e:Dynamic) {} + + process.close(); #end return ""; @@ -308,7 +296,7 @@ class CFFI } else if (!lazy) { - var ndllFolder = __findHaxelib("lime") + "/ndll/" + __sysName(); + var ndllFolder = __findNDLLFolder() + __sysName(); throw "Could not find lime.ndll. This file is provided with Lime's Haxelib releases, but not via Git. " + "Please copy it from Lime's latest Haxelib release into either " + ndllFolder + " or " + ndllFolder + "64, as appropriate for your system. "