diff --git a/basis/alien/libraries/finder/linux/linux.factor b/basis/alien/libraries/finder/linux/linux.factor index f85946ffd9..6098deb782 100644 --- a/basis/alien/libraries/finder/linux/linux.factor +++ b/basis/alien/libraries/finder/linux/linux.factor @@ -1,32 +1,38 @@ -! Copyright (C) 2013 Björn Lindqvist +! Copyright (C) 2013 Björn Lindqvist, Doug Coleman. ! See http://factorcode.org/license.txt for BSD license - -USING: alien.libraries alien.libraries.finder assocs +USING: alien.libraries alien.libraries.finder arrays assocs combinators.short-circuit io io.encodings.utf8 io.files -io.files.info io.launcher kernel sequences splitting system ; - +io.files.info io.launcher kernel sequences sets splitting system +unicode.categories ; IN: alien.libraries.finder.linux " "" replace "\t " split harvest ] map ; +: parse-ldconfig-lines ( string -- triple ) + [ + + "=>" split1 [ [ blank? ] trim ] bi@ + [ " " split1 [ "()" in? ] trim "," split ] dip 3array + ] map ; -: ldconfig-filter ( -- str ) - mach-map cpu of "libc6" or "(" ")" surround ; +: load-ldconfig-cache ( -- seq ) + "/sbin/ldconfig -p" utf8 [ lines ] with-process-reader + rest parse-ldconfig-lines ; -: ldconfig-matches? ( lib this-lib this-arch -- ? ) - [ start 0 = ] [ ldconfig-filter = ] bi* and ; +: ldconfig-arch ( -- str ) + mach-map cpu of { "libc6" } or ; + +: ldconfig-matches? ( lib triple -- ? ) + { [ first head? ] [ nip second ldconfig-arch subset? ] } 2&& ; : ldconfig-find-soname ( lib -- seq ) - ldconfig-cache [ first2 ldconfig-matches? ] with filter [ third ] map ; + load-ldconfig-cache [ ldconfig-matches? ] with filter [ third ] map ; PRIVATE>