alien.libraries.finder: Linux32 ldconfig has (libc6) or (libc6,x32) as the platform strings. Refactor parsing to not use regular expressions and change the matching from exact to requiring the ldconfig line to be a subset of the supported platforms.

db4
Doug Coleman 2014-04-28 08:41:31 +00:00
parent 72cbd5722c
commit f1f76dead7
1 changed files with 22 additions and 16 deletions
basis/alien/libraries/finder/linux

View File

@ -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
<PRIVATE
CONSTANT: mach-map {
{ ppc.64 "libc6,64bit" }
{ x86.32 "libc6,x86-32" }
{ x86.64 "libc6,x86-64" }
{ ppc.64 { "libc6" "64bit" } }
{ x86.32 { "libc6" "x32" } }
{ x86.64 { "libc6" "x86-64" } }
}
: ldconfig-cache ( -- seq )
"/sbin/ldconfig -p" utf8 [ lines ] with-process-reader rest
[ "=>" "" 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>