]> gitweb.factorcode.org Git - factor.git/commitdiff
alien.libraries.finder.windows: more like MSDN search order.
authorJohn Benediktsson <mrjbq7@gmail.com>
Sun, 17 Nov 2013 00:09:53 +0000 (16:09 -0800)
committerJohn Benediktsson <mrjbq7@gmail.com>
Sun, 17 Nov 2013 00:10:31 +0000 (16:10 -0800)
basis/alien/libraries/finder/windows/platforms.txt [new file with mode: 0644]
basis/alien/libraries/finder/windows/windows.factor

diff --git a/basis/alien/libraries/finder/windows/platforms.txt b/basis/alien/libraries/finder/windows/platforms.txt
new file mode 100644 (file)
index 0000000..8e1a559
--- /dev/null
@@ -0,0 +1 @@
+windows
index cef5b54a05e13eca421d70c2902f5356e7648770..1ebfa6ed34cb1fe7cff9ffcaf1efd78898978bdd 100644 (file)
@@ -1,22 +1,32 @@
-! Copyright (C) 2013 Björn Lindqvist
+! Copyright (C) 2013 Björn Lindqvist, John Benediktsson
 ! See http://factorcode.org/license.txt for BSD license
 
-USING: alien.libraries alien.libraries.finder arrays combinators
-kernel sequences system ;
+USING: alien.libraries.finder arrays combinators.short-circuit
+environment io.files io.files.info io.pathnames kernel sequences
+splitting system system-info.windows ;
 
 IN: alien.libraries.finder.windows
 
 <PRIVATE
 
-: candidate-paths ( name -- paths )
-    {
-        [ ".dll" append ]
-        [ "lib" ".dll" surround ]
-        [ "dlls/" ".dll" surround ]
-        [ "dlls/lib" ".dll" surround ]
-    } cleave 4array ;
+: search-paths ( -- seq )
+    "resource:" system-directory windows-directory 3array
+    "PATH" os-env [ ";" split ] [ f ] if* append ;
+
+: candidate-paths ( name -- seq )
+    search-paths over ".dll" tail? [
+        [ prepend-path ] with map
+    ] [
+        [
+            [ prepend-path ]
+            [ [ ".dll" append ] [ prepend-path ] bi* ] 2bi
+            2array
+        ] with map concat
+    ] if ;
 
 PRIVATE>
 
 M: windows find-library
-    candidate-paths [ dlopen dll-valid? ] map-find nip ;
+    candidate-paths [
+        { [ exists? ] [ file-info regular-file? ] } 1&&
+    ] map-find nip ;