From f1f76dead78c3e9461bdb7e7b373058bfcb16af8 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 28 Apr 2014 08:41:31 +0000 Subject: [PATCH] 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. --- .../alien/libraries/finder/linux/linux.factor | 38 +++++++++++-------- 1 file changed, 22 insertions(+), 16 deletions(-) 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>