Skip to content

Instantly share code, notes, and snippets.

@lukego
Last active October 24, 2022 08:40

Revisions

  1. lukego revised this gist Oct 24, 2022. 1 changed file with 3 additions and 0 deletions.
    3 changes: 3 additions & 0 deletions shell.nix
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,3 @@
    { nixpkgs ? <nixpkgs> }:
    with import nixpkgs {};
    lispPackages_new.sbclWithPackages (p: with p; [ alexandria serapeum cl-ppcre])
  2. lukego created this gist Oct 24, 2022.
    35 changes: 35 additions & 0 deletions nixpkgs-lisp-surveylisp
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,35 @@
    (defpackage :nixpkgs-lisp-survey
    (:nicknames :survey)
    (:use :common-lisp :alexandria :serapeum))
    (in-package :nixpkgs-lisp-survey)

    ;;;; Conditions

    (define-condition build-error (error)
    ((transcript :initarg :transcript :accessor transcript)))
    (define-condition library-load-error (build-error)
    ((alternatives :initarg :alternatives :accessor alternatives)))
    (define-condition dependency-error (build-error)
    ((dependency :initarg :dependency :accessor dependency)))
    (define-condition unrecognized-error (build-error)
    ())

    ;;;; Testing

    (defun test-package (name lisp)
    (check-transcript (run-nix-build name lisp)))

    (defun check-transcript (transcript)
    (when-let (m (missing-libraries transcript))
    (cerror "Ignore" 'library-load-error :alternatives m)))

    (defun missing-libraries (transcript)
    (collecting
    (cl-ppcre:do-matches-as-strings (m "Unable to load any of the alternatives:\\s+\\([^(]+\\)" transcript)
    (cl-ppcre:do-matches-as-strings (s "\"[^\"]+\"" m)
    (collect (remove #\" s))))))

    (defun run-nix-build (name lisp)
    (uiop:run-program
    (format nil "nix-build -E 'with import ../../../../default.nix {}; lispPackages_new.~aPackages.~a'"
    lisp name) :ignore-error-status t :output :string :error-output :output))