LINUX.ORG.RU

asdf, quicklisp и зависимости в git

 , ,


1

2

Привет, ЛОР!

А расскажи, как в quicklisp подключить зависимый пакет, который лежит где-то в репозитарии на github? Я быстро погуглил, но ничего толкового найти не смог. Может, не то гуглил? Что именно нужно писать в :depends-on части в вызове defsystem? Или это вообще не туда идёт?

UPD: asdf, quicklisp и зависимости в git (комментарий)

★★★★★

Последнее исправление: hateyoufeel (всего исправлений: 4)

Извини конечно, проверить не могу, перед тем как выразить мысль, но в новомодных штуках сейчас по дефолту с GitHub зависимости берутся. Как в Go или Crystal.

Пробовал просто указать?

:depends-on ("github-user-name" "github-package-name")
IIIypuk ★★★
()
Последнее исправление: IIIypuk (всего исправлений: 1)
Ответ на: комментарий от IIIypuk

Это так не работает. Ну и Common Lisp – это далеко не новомодная штука.

Если что, меня интересует возможность указать в принципе любой пакет, которого нет в стандартном регистре, будь то URL к git репозитарию или локальный путь.

hateyoufeel ★★★★★
() автор топика
Последнее исправление: hateyoufeel (всего исправлений: 1)

Ты либо ленивый, либо троллишь.

Скачал себе CommonLisp, с трудом осилил HelloWorld.

По итогу:

  1. Зашёл на GitHub (https://github.com/search?q=commonlisp&type=), выбрал первую же библиотеку cl-collider.
  2. Написал (ql:quickload "cl-collider") в test.cl
  3. В терминале sbcl --non-interactive --load test.cl и хуяк - пошло скачиваться
❯ sbcl --non-interactive --load test.cl 
This is SBCL 2.2.4, an implementation of ANSI Common Lisp.
More information about SBCL is available at <http://www.sbcl.org/>.

SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses.  See the CREDITS and COPYING files in the
distribution for more information.
To load "cl-collider":
  Load 3 ASDF systems:
    asdf trivial-gray-streams uiop
  Install 17 Quicklisp releases:
    alexandria babel bordeaux-threads cffi cl-collider
    cl-ppcre documentation-utils flexi-streams ieee-floats
    named-readtables osc pileup simple-inferiors
    split-sequence trivial-features trivial-indent usocket
; Fetching #<URL "http://beta.quicklisp.org/archive/trivial-indent/2021-05-31/trivial-indent-20210531-git.tgz">
; 3.48KB
==================================================
3,564 bytes in 0.00 seconds (0.00KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/archive/documentation-utils/2019-07-10/documentation-utils-20190710-git.tgz">
; 8.70KB
==================================================
8,913 bytes in 0.00 seconds (0.00KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/archive/simple-inferiors/2020-03-25/simple-inferiors-20200325-git.tgz">
; 9.40KB
==================================================
9,622 bytes in 0.00 seconds (0.00KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/archive/split-sequence/2021-05-31/split-sequence-v2.0.1.tgz">
; 11.43KB
==================================================
11,705 bytes in 0.00 seconds (0.00KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/archive/usocket/2022-03-31/usocket-0.8.4.tgz">
; 87.67KB
==================================================
89,771 bytes in 0.17 seconds (515.69KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/archive/osc/2019-05-21/osc-20190521-git.tgz">
; 16.79KB
==================================================
17,189 bytes in 0.11 seconds (157.37KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/archive/ieee-floats/2022-02-20/ieee-floats-20220220-git.tgz">
; 5.15KB
==================================================
5,274 bytes in 0.00 seconds (0.00KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/archive/pileup/2015-07-09/pileup-20150709-git.tgz">
; 19.74KB
==================================================
20,217 bytes in 0.03 seconds (658.11KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/archive/named-readtables/2022-03-31/named-readtables-20220331-git.tgz">
; 25.99KB
==================================================
26,611 bytes in 0.02 seconds (1113.76KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/archive/flexi-streams/2022-02-20/flexi-streams-20220220-git.tgz">
; 435.47KB
==================================================
445,922 bytes in 1.02 seconds (428.33KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/archive/cl-ppcre/2022-02-20/cl-ppcre-20220220-git.tgz">
; 153.70KB
==================================================
157,392 bytes in 0.22 seconds (688.22KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/archive/trivial-features/2021-12-09/trivial-features-20211209-git.tgz">
; 11.11KB
==================================================
11,377 bytes in 0.00 seconds (0.00KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/archive/babel/2020-09-25/babel-20200925-git.tgz">
; 266.93KB
==================================================
273,336 bytes in 5.72 seconds (46.64KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/archive/cffi/2021-04-11/cffi_0.24.1.tgz">
; 255.97KB
==================================================
262,118 bytes in 0.45 seconds (573.08KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/archive/bordeaux-threads/2020-06-10/bordeaux-threads-v0.8.8.tgz">
; 23.15KB
==================================================
23,709 bytes in 0.05 seconds (434.12KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/archive/alexandria/2022-03-31/alexandria-20220331-git.tgz">
; 55.51KB
==================================================
56,840 bytes in 0.37 seconds (148.68KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/archive/cl-collider/2022-03-31/cl-collider-20220331-git.tgz">
; 62.99KB
==================================================
64,503 bytes in 0.31 seconds (203.20KB/sec)
; Loading "cl-collider"
..................................................
[package osc].....................................
[package alexandria]..............................
[package alexandria-2]............................
[package ieee-floats].............................
[package bordeaux-threads]........................
[package split-sequence]..........................
[package usocket].................................
[package sc-osc]..................................
[package babel-encodings].........................
[package babel]...................................
..................................................
[package cffi-sys]................................
[package cffi]....................................
..................................................
[package cffi-features]...........................
[package pileup]..................................
[package flexi-streams]...........................
..................................................
..................................................
..................................................
[package editor-hints.named-readtables]...........
[package editor-hints.named-readtables]...........
[package trivial-indent]..........................
[package documentation-utils].....................
[package simple-inferiors]........................
[package cl-ppcre]................................
..................................................
[package cl-collider].............................
[package sc-user].................................
..................................................
........
IIIypuk ★★★
()
Ответ на: комментарий от hateyoufeel

Это в FAQ написано.

Конкретнее в этом абзаце

Can I load a local project that isn’t part of Quicklisp?

Этот вариант я нагуглил первый и сразу, когда увидел этот тред, но подумал, что для тебя уж очень просто и тебе нужно чего-то другого

Храниться это всё добро в ~/quicklisp, включая asdf.lisp

IIIypuk ★★★
()
Последнее исправление: IIIypuk (всего исправлений: 4)
Ответ на: комментарий от IIIypuk

Написал (ql:quickload «cl-collider») в test.cl

Потому что quicklisp про неё знает. Если ты просто закинешь свою библиотеку на гитхаб, ql:quickload выдаст тебе ошибку при попытке просто по названию скачать.

Этот вариант я нагуглил первый и сразу, когда увидел этот тред, но подумал, что для тебя уж очень просто и тебе нужно чего-то другого

Мне нужно другого. Я не хочу класть в общую директорию quicklisp’а, я хочу локальную копию для проекта.

До вот этого я тоже дочитал, если что.

    (push #p"/projects/my-project/" asdf:*central-registry*)
    (ql:quickload "my-project")

Но это не приведёт к автоматическому скачиванию из гита. Я понимаю, что могу сам накостылить скрипт, но хотелось бы готового решения.

hateyoufeel ★★★★★
() автор топика
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от IIIypuk

Угу, я в курсе. А сам lisp этого не может? Потому что сабмодули иногда вызывают тот ещё геморрой. А если пакет не в git, а каком-нибудь mercurial, то просто туши свет.

Смотри, для хацкелла я могу в stack.yaml указать следующее:

extra-deps:
- git: https://github.com/user/repo.git
  commit: abcdef12345yadayada

И мне скачается нужный коммит нужного пакета. Как такое же сделать в лишпе?

hateyoufeel ★★★★★
() автор топика
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от hateyoufeel

Смотря что понимается под сабмодулем. Если это код библиотеки, который может использоваться в совершенно других проектах, то лучше оформить отдельные системы как, например, здесь:

https://github.com/archimag/cl-libxml2/blob/master/cl-libxml2.asd

подобно системам cffi или garbage-pools в секции :depends-on. Если код нужно отделить, но использование в других проектах не предусматривается, то код оформляется в отдельных директориях с помощью кейворда :module в секции :components в том же примере.

А можно ссылку на какой-нибудь ман по теме?

https://asdf.common-lisp.dev/#documentation

ados ★★★★★
()
Ответ на: комментарий от ados

Смотря что понимается под сабмодулем.

git submodule

Если это код библиотеки, который может использоваться в совершенно других проектах

Это сторонняя библиотека, которая по какой-то причине не в quicklisp. Я не хочу запариваться с общими директориями quicklisp, потому что это лишний геморрой, особенно при настройке CI. Вместо этого, я хочу чтобы после git clone моего проекта можно было запустить одну волшебную команду и всё автомагически бы собралось и работало.

hateyoufeel ★★★★★
() автор топика
Ответ на: комментарий от ados

Тут никакой интеграции не нужно. Тут нужно просто git дёрнуть в системе, указав локальную для проекта директорию, и добавить её в пути. Stack, cargo, да даже штука в пистоне так давно умеет. Я, честно, очень удивлён, что в CL такого нет.

hateyoufeel ★★★★★
() автор топика
Последнее исправление: hateyoufeel (всего исправлений: 1)

Про qlot уже написали. Советую сочетать его с Ultralisp.org

Однако если вы просто эксперементируете, то можно (нужно) использовать roswell как-то так:

ros install lem-project/lem

и потом переодически

ros update lem

Roswell скачает проект в ~/.roswell/local-projects, который добавлен в asdf пути загрузки систем для ros run ... и прочих связанных скриптов.

egao1980
()
Ответ на: комментарий от egao1980

Я, честно говоря, повтыкал на всё это и решил, что проще будет nix прикрутить. Там вроде есть какая-никакая поддержка CL.

Но мне всё равно кажется весьма странным, что никто в мире лишпов особо даже не парится насчёт воспроизводимых сборок софта.

hateyoufeel ★★★★★
() автор топика
Последнее исправление: hateyoufeel (всего исправлений: 1)