diff --git a/cl-tree-sitter.config.asd b/cl-tree-sitter.config.asd new file mode 100644 index 0000000..23793e5 --- /dev/null +++ b/cl-tree-sitter.config.asd @@ -0,0 +1,13 @@ +;;;; +----------------------------------------------------------------+ +;;;; | cl-tree-sitter | +;;;; +----------------------------------------------------------------+ + +(in-package :asdf-user) + +(asdf:defsystem #:cl-tree-sitter.config + :description "Configure tree-sitter libraries." + :author "death " + :license "MIT" + :defsystem-depends-on ("asdf-package-system") + :components ((:file "config")) + :depends-on ("cffi-libffi")) diff --git a/config.lisp b/config.lisp new file mode 100644 index 0000000..f5bcc71 --- /dev/null +++ b/config.lisp @@ -0,0 +1,28 @@ +;;;; +----------------------------------------------------------------+ +;;;; | cl-tree-sitter | +;;;; +----------------------------------------------------------------+ + +(defpackage #:cl-tree-sitter.config + (:use #:cl) + (:import-from #:cffi + #:use-foreign-library + #:define-foreign-library) + (:export + #:define-tree-sitter-path + #:define-tree-sitter-wrapper-path)) + +(in-package #:cl-tree-sitter.config) + +(defmacro define-tree-sitter-path (path) + `(progn + (define-foreign-library tree-sitter + (t ,path)) + (use-foreign-library tree-sitter))) + +(defmacro define-tree-sitter-wrapper-path (path) + `(progn + (define-foreign-library tree-sitter-wrapper + (t (:default ,path))) + (use-foreign-library tree-sitter-wrapper))) + + diff --git a/low-level.lisp b/low-level.lisp index 0fe992f..04245e7 100644 --- a/low-level.lisp +++ b/low-level.lisp @@ -118,18 +118,24 @@ ;; Library -(define-foreign-library tree-sitter - (:darwin (:default "/usr/local/lib/libtree-sitter")) - (t (:or (:default "tree-sitter") (:default "libtree-sitter")))) - -(use-foreign-library tree-sitter) - -(define-foreign-library (tree-sitter-wrapper - :search-path - (asdf:system-relative-pathname :cl-tree-sitter "")) - (t (:default "tree-sitter-wrapper"))) - -(use-foreign-library tree-sitter-wrapper) +(handler-case + (cffi:foreign-library-loaded-p 'cl-tree-sitter.config::tree-sitter) + (t (e) + (declare (ignorable e)) + (define-foreign-library cl-tree-sitter.config::tree-sitter + (:darwin (:default "/usr/local/lib/libtree-sitter")) + (t (:or (:default "tree-sitter") (:default "libtree-sitter")))) + (use-foreign-library cl-tree-sitter.config::tree-sitter-wrapper))) + +(handler-case + (cffi:foreign-library-loaded-p 'cl-tree-sitter.config::tree-sitter-wrapper) + (t (e) + (declare (ignorable e)) + (define-foreign-library (cl-tree-sitter.config::tree-sitter-wrapper + :search-path + (asdf:system-relative-pathname :cl-tree-sitter "")) + (t (:default "tree-sitter-wrapper"))) + (use-foreign-library cl-tree-sitter.config::tree-sitter-wrapper))) ;; Types