diff --git a/third_party/lisp/mime4cl/.skip-subtree b/third_party/lisp/mime4cl/.skip-subtree new file mode 100644 index 000000000..5051f60d6 --- /dev/null +++ b/third_party/lisp/mime4cl/.skip-subtree @@ -0,0 +1 @@ +prevent readTree from creating entries for subdirs that don't contain an .nix files diff --git a/third_party/lisp/mime4cl/OWNERS b/third_party/lisp/mime4cl/OWNERS new file mode 100644 index 000000000..f16dd105d --- /dev/null +++ b/third_party/lisp/mime4cl/OWNERS @@ -0,0 +1,3 @@ +inherited: true +owners: + - sterni diff --git a/third_party/lisp/mime4cl/README b/third_party/lisp/mime4cl/README new file mode 100644 index 000000000..73f0efbda --- /dev/null +++ b/third_party/lisp/mime4cl/README @@ -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 diff --git a/third_party/lisp/mime4cl/default.nix b/third_party/lisp/mime4cl/default.nix new file mode 100644 index 000000000..516577407 --- /dev/null +++ b/third_party/lisp/mime4cl/default.nix @@ -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" + ]; +} diff --git a/third_party/lisp/mime4cl/streams.lisp b/third_party/lisp/mime4cl/streams.lisp index 4b3da19a9..64c7adeec 100644 --- a/third_party/lisp/mime4cl/streams.lisp +++ b/third_party/lisp/mime4cl/streams.lisp @@ -1,6 +1,7 @@ ;;; eds.lisp --- En/De-coding Streams ;;; Copyright (C) 2012 by Walter C. Pelissero + ;;; Copyright (C) 2021 by the TVL Authors ;;; Author: Walter C. Pelissero ;;; Project: mime4cl @@ -63,7 +64,8 @@ :initarg :dont-close))) (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) ()) diff --git a/third_party/lisp/mime4cl/test/mime.lisp b/third_party/lisp/mime4cl/test/mime.lisp index d1a56b0c0..1488f927f 100644 --- a/third_party/lisp/mime4cl/test/mime.lisp +++ b/third_party/lisp/mime4cl/test/mime.lisp @@ -1,6 +1,7 @@ ;;; mime.lisp --- MIME regression tests ;;; Copyright (C) 2012 by Walter C. Pelissero + ;;; Copyright (C) 2021 by the TVL Authors ;;; Author: Walter C. Pelissero ;;; Project: mime4cl @@ -28,11 +29,13 @@ *load-pathname* #P""))) +(defvar *sample1-file* (make-pathname :defaults #.(or *compile-file-pathname* + *load-pathname*) + :name "sample1" + :type "msg")) + (deftest mime.1 - (let* ((orig (mime-message (make-pathname :defaults #.(or *compile-file-pathname* - *load-pathname*) - :name "sample1" - :type "msg"))) + (let* ((orig (mime-message *sample1-file*)) (dup (mime-message (with-output-to-string (out) (encode-mime-part orig out))))) (mime= orig dup)) t)