feat(3p/lisp/mime4cl): build using buildLisp

The following changes are required to make mime4cl build:

* file-position doesn't like to be called with NIL as the position
  argument, so we have to make sure to not do that in
  stream-file-position. My workaround is a bit clunky, but works.

* Tests discover the sample file via relative path resolution. This
  doesn't work when they are imported into the nix store as individual
  files. Instead we make use of the fact that DEFVAR is a no-op if the
  variable is already defined and inject a file via the nix build that
  sets the relevant ones. For the path to sample1.msg, we need to create
  a new variable.

Change-Id: I74eeda7bf2c2a4f64cc2b90e72081513ec3285d5
Reviewed-on: https://cl.tvl.fyi/c/depot/+/3270
Tested-by: BuildkiteCI
Reviewed-by: grfn <grfn@gws.fyi>
This commit is contained in:
sterni 2021-08-02 15:15:39 +02:00
parent 901364869c
commit 8f6955176f
6 changed files with 69 additions and 5 deletions

View file

@ -0,0 +1 @@
prevent readTree from creating entries for subdirs that don't contain an .nix files

3
third_party/lisp/mime4cl/OWNERS vendored Normal file
View file

@ -0,0 +1,3 @@
inherited: true
owners:
- sterni

7
third_party/lisp/mime4cl/README vendored Normal file
View file

@ -0,0 +1,7 @@
MIME4CL is a Common Lisp library for dealing with MIME messages.
It has originally been written by Walter C. Pelissero and vendored
into depot as upstream has become inactive and provides no repo
of any kind. Upstream and depot version may diverge.
Upstream Website: http://wcp.sdf-eu.org/software/#mime4cl
Vendored Tarball: http://wcp.sdf-eu.org/software/mime4cl-20150207T211851.tbz

48
third_party/lisp/mime4cl/default.nix vendored Normal file
View file

@ -0,0 +1,48 @@
# Copyright (C) 2021 by the TVL Authors
# SPDX-License-Identifier: LGPL-2.1-or-later
{ depot, pkgs, ... }:
depot.nix.buildLisp.library {
name = "mime4cl";
deps = [
depot.third_party.lisp.sclf
depot.third_party.lisp.npg
];
srcs = [
./package.lisp
./endec.lisp
./streams.lisp
./mime.lisp
./address.lisp
];
tests = {
name = "mime4cl-tests";
srcs = [
./test/rt.lisp
./test/package.lisp
(pkgs.writeText "nix-samples.lisp" ''
(in-package :mime4cl-tests)
;; missing from the tarball completely
(defvar *samples-directory* (pathname "/this/does/not/exist"))
;; override auto discovery which doesn't work in store
(defvar *sample1-file* (pathname "${./test/sample1.msg}"))
'')
./test/endec.lisp
./test/address.lisp
./test/mime.lisp
];
expression = "(rtest:do-tests)";
};
# limited by sclf
brokenOn = [
"ccl"
"ecl"
];
}

View file

@ -1,6 +1,7 @@
;;; eds.lisp --- En/De-coding Streams ;;; eds.lisp --- En/De-coding Streams
;;; Copyright (C) 2012 by Walter C. Pelissero ;;; Copyright (C) 2012 by Walter C. Pelissero
;;; Copyright (C) 2021 by the TVL Authors
;;; Author: Walter C. Pelissero <walter@pelissero.de> ;;; Author: Walter C. Pelissero <walter@pelissero.de>
;;; Project: mime4cl ;;; Project: mime4cl
@ -63,7 +64,8 @@
:initarg :dont-close))) :initarg :dont-close)))
(defmethod stream-file-position ((stream coder-stream-mixin) &optional position) (defmethod stream-file-position ((stream coder-stream-mixin) &optional position)
(file-position (slot-value stream 'real-stream) position)) (apply #'file-position (remove nil (list (slot-value stream 'real-stream)
position))))
(defclass coder-input-stream-mixin (fundamental-binary-input-stream coder-stream-mixin) (defclass coder-input-stream-mixin (fundamental-binary-input-stream coder-stream-mixin)
()) ())

View file

@ -1,6 +1,7 @@
;;; mime.lisp --- MIME regression tests ;;; mime.lisp --- MIME regression tests
;;; Copyright (C) 2012 by Walter C. Pelissero ;;; Copyright (C) 2012 by Walter C. Pelissero
;;; Copyright (C) 2021 by the TVL Authors
;;; Author: Walter C. Pelissero <walter@pelissero.de> ;;; Author: Walter C. Pelissero <walter@pelissero.de>
;;; Project: mime4cl ;;; Project: mime4cl
@ -28,11 +29,13 @@
*load-pathname* *load-pathname*
#P""))) #P"")))
(defvar *sample1-file* (make-pathname :defaults #.(or *compile-file-pathname*
*load-pathname*)
:name "sample1"
:type "msg"))
(deftest mime.1 (deftest mime.1
(let* ((orig (mime-message (make-pathname :defaults #.(or *compile-file-pathname* (let* ((orig (mime-message *sample1-file*))
*load-pathname*)
:name "sample1"
:type "msg")))
(dup (mime-message (with-output-to-string (out) (encode-mime-part orig out))))) (dup (mime-message (with-output-to-string (out) (encode-mime-part orig out)))))
(mime= orig dup)) (mime= orig dup))
t) t)