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.
parent
72cbd5722c
commit
f1f76dead7
|
@ -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>
|
||||
|
||||
|
|
Loading…
Reference in New Issue