; in: DEFSYSTEM CFFI
; ((:MODULE SRC :SERIAL T :COMPONENTS
; ((:FILE "cffi-sbcl") (:FILE "package") (:FILE "utils") (:FILE "libraries")
; (:FILE "early-types") (:FILE "types") (:FILE "enum") (:FILE "strings")
; (:FILE "functions") (:FILE "foreign-vars") (:FILE "features"))))
;
; caught ERROR:
; illegal function call
; in: DEFSYSTEM CFFI
; (ALEXANDRIA TRIVIAL-FEATURES BABEL)
;
; caught STYLE-WARNING:
; undefined function: ALEXANDRIA
;
; caught WARNING:
; undefined variable: BABEL
; (DEFSYSTEM CFFI :DESCRIPTION "The Common Foreign Function Interface" :AUTHOR
; "James Bielman <jamesjb@jamesjb.com>" :VERSION "0.10.5" :LICENCE "MIT"
; :DEPENDS-ON (ALEXANDRIA TRIVIAL-FEATURES BABEL) ...)
;
; caught WARNING:
; undefined variable: CFFI
;
; caught STYLE-WARNING:
; undefined function: DEFSYSTEM
; (ALEXANDRIA TRIVIAL-FEATURES BABEL)
;
; caught WARNING:
; undefined variable: TRIVIAL-FEATURES
;
; compilation unit finished
; Undefined functions:
; ALEXANDRIA DEFSYSTEM
; Undefined variables:
; BABEL CFFI TRIVIAL-FEATURES
; caught 1 ERROR condition
; caught 3 WARNING conditions
; caught 2 STYLE-WARNING conditions
debugger invoked on a UNBOUND-VARIABLE:
The variable TRIVIAL-FEATURES is unbound.
Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.
restarts (invokable by number or by possibly-abbreviated name):
0: [ABORT] Exit debugger, returning to top level.
((LAMBDA ()))
0]
Это ещё почему?!
P.S. Я даже сами программы оформляю как asdf-пакеты, не то что библиотеки.
> Это ещё почему?!
Мне дали понять в этой теме http://lisper.ru/forum/thread/107 , что это невозможно (или по крайней мере очень сложно).
Буквально сегодня я воспользовался своим же кодом из указанной темы и установил кучу всяких asdf-пакетов на работе (Windows 7, SBCL).
asdf-install не работает в Windows, но я его запускал, ждал пока вывалится с ошибкой, копировал url из консоли и ставил вручную :-D.
> Думаю автор просто не понял, что делать с этим кодом, куда его пихать.
Да, из того обсуждения мало что понял. Как заметку напишите, дадите почитать? Может подробнее получится..
По поводу планеты. Тот блог исключительно развлекательного характера. Если и добавлять, то этот.
Отсюда <a href="http://andy128k.blogspot.com/">http://andy128k.blogspot.com/</a> стало более менее ясно. Спасибо. Но такого пути у меня нет:
> Для SBCL это будет $HOME/.sbclrc
> Вот я тут набросал немного. Надеюсь поможет.
<a href="http://andy128k.livejournal.com/23461.html">тут</a> not found :(
Имеется в виду (merge-pathnames ".sbclrc" (user-homedir-pathname)). Для sbcl под виндой это вернет что-нибудь вроде "C:/Documents and Settings/_username_/.sbclrc" или "C:/Users/_username_/.sbclrc".
> Ну, дык, через панель инструментов :)
Всплывающие подсказки и возможность редактировать свои сообщения очень бы помогли :)
Из всего написанного я понял, что мне надо вставить этот код:
(defun search-for-system-in-windows (system)
(let ((system-name (asdf::coerce-name system)))
(dolist (dir asdf:*central-registry*)
(dolist (lnk (directory (merge-pathnames (eval dir) "*.lnk")))
(let ((system-path (parse-windows-shortcut lnk)))
(when (string-equal system-name (pathname-name system-path))
(return-from search-for-system-in-windows system-path)))))))
(pushnew #'search-for-system-in-windows
asdf:*system-definition-search-functions*)
в некий пользовательский файл инициализации .sbclrc .Где dir это директория, содержащая *.lnk файлы на asd файлы неоходимых библиотек.
Далее: вот это (merge-pathnames ".sbclrc" (user-homedir-pathname)) вернуло #P"C:\\Users\\123\\.sbclrc". Как я понял это и есть этот самый файл инициализации. Но такого файла не существует!:( Поправьте пожалуйста в чем я ошибся. Если у вас получилось, хочу уже разобраться до конца как с этим работать.
Изначально его не существует, надо его создать.
По-видимому, в начало файла (до приведенного кода) надо будет вставить (require 'asdf), иначе asdf не будет доступен, и дальнейший код просто не заработает.
*.lnk — это обычный ярлык в windows.
>И что делает функция (merge-pathnames ".sbclrc" (user-homedir-pathname))?
Объединяет два пути. (user-homedir-pathname) возвращает путь до домашнего каталога пользователя (то, что в юниксах обозначают $HOME).
(require 'asdf)
потом код отсюда,
и в конце код из моей заметки.
Сами пакеты можно разместить где угодно. Создать директорию C:\\Users\\123\\.sbcl\\systems\\ и создать в ней ярлыки на asd-файлы пакетов. Имена ярлыков значения не имеют.
Но лучше всего, если ваша программа тоже будет asdf-пакетом и все нужные пакеты будут загружаться автоматически (указаны в depends-on вашего пакета).