-(defparameter *pkg-config* "pkg-config")
+(defpackage #:pkg-config
+ (:use #:common-lisp #+cmu #:ext #+sbcl #:sb-ext)
+ (:export #:pkg-cflags #:pkg-libs #:pkg-exists-p #:pkg-version
+ #:pkg-variable))
+
+(in-package #:pkg-config)
+
+(defparameter *pkg-config* "/usr/bin/pkg-config")
(defun split-string (string &key (start 0) (end (length string)))
(let ((position (position #\sp string :start start :end end)))
((error 'end-of-file :stream stream)))))
+#+(or sbcl cmu)
(defun run-pkg-config (package error &rest options)
(let ((process
(run-program
(process-close process)
(values output exit-code)))))
+#+clisp
+;; I haven't figured out how to do error checking with CLISP's run-program
+(defun run-pkg-config (package error &rest options)
+ (declare (ignore error))
+ (let ((stream (ext:run-program *pkg-config* :arguments (cons package options) :output :stream)))
+ (read-lines stream)))
(defun pkg-cflags (package)
(split-string (first (run-pkg-config package t "--cflags"))))
+(defun pkg-libs (package)
+ (split-string (first (run-pkg-config package t "--libs"))))
+
(defun pkg-exists-p (package &key version atleast-version max-version
( error t))