about summary refs log tree commit diff
path: root/third_party/lisp/sclf
diff options
context:
space:
mode:
authorsterni <sternenseemann@systemli.org>2021-08-02T13·14+0200
committersterni <sternenseemann@systemli.org>2021-09-01T22·57+0000
commit2e08324484aa4fcb8421900a2528ee751f905249 (patch)
tree464c43227a3744a9aaa0db4da25d17c7b3dfcbb2 /third_party/lisp/sclf
parenta5dbd0f5d90f0493c89126fe279400d0e7ad7e5b (diff)
feat(3p/lisp/sclf): build using buildLisp r/2811
Adding the default.nix is quite straightforward, however we have to make
today's SBCL happy: due to package locking it no longer likes sclf using
an sb-impl internal constant for some reason. This is however a good
opportunity to clean up the stat-*-time code: It converted the times in
an implementation specific way even though time.lisp does provide a
generic way to convert between unix and universal time. Note that the
updated ASDF file is untested, but should be a trivial enough change.

Change-Id: If193bf830ac704cc53e0855d8e9fff2b5a5ef291
Reviewed-on: https://cl.tvl.fyi/c/depot/+/3268
Tested-by: BuildkiteCI
Reviewed-by: grfn <grfn@gws.fyi>
Diffstat (limited to 'third_party/lisp/sclf')
-rw-r--r--third_party/lisp/sclf/.skip-subtree1
-rw-r--r--third_party/lisp/sclf/OWNERS3
-rw-r--r--third_party/lisp/sclf/README8
-rw-r--r--third_party/lisp/sclf/default.nix28
-rw-r--r--third_party/lisp/sclf/directory.lisp11
-rw-r--r--third_party/lisp/sclf/package.lisp2
-rw-r--r--third_party/lisp/sclf/sclf.asd3
7 files changed, 45 insertions, 11 deletions
diff --git a/third_party/lisp/sclf/.skip-subtree b/third_party/lisp/sclf/.skip-subtree
new file mode 100644
index 000000000000..5051f60d6b86
--- /dev/null
+++ b/third_party/lisp/sclf/.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/sclf/OWNERS b/third_party/lisp/sclf/OWNERS
new file mode 100644
index 000000000000..f16dd105d761
--- /dev/null
+++ b/third_party/lisp/sclf/OWNERS
@@ -0,0 +1,3 @@
+inherited: true
+owners:
+  - sterni
diff --git a/third_party/lisp/sclf/README b/third_party/lisp/sclf/README
index df51eee3683e..2a1c2c3c5c1c 100644
--- a/third_party/lisp/sclf/README
+++ b/third_party/lisp/sclf/README
@@ -1,2 +1,6 @@
-SCLF is a collection of disparate Common Lisp functions that are
-common enough in my code but couldn't find a place anywhere else.
+SCLF has originally been written by Walter C. Pelissero and vendored
+into depot since it is a dependency of mime4cl. Upstream and depot version
+may diverge.
+
+Upstream Website: http://wcp.sdf-eu.org/software/#sclf
+Vendored Tarball: http://wcp.sdf-eu.org/software/sclf-20150207T213551.tbz
diff --git a/third_party/lisp/sclf/default.nix b/third_party/lisp/sclf/default.nix
new file mode 100644
index 000000000000..fb07f8f764e5
--- /dev/null
+++ b/third_party/lisp/sclf/default.nix
@@ -0,0 +1,28 @@
+# Copyright (C) 2021 by the TVL Authors
+# SPDX-License-Identifier: LGPL-2.1-or-later
+{ depot, pkgs, ... }:
+
+depot.nix.buildLisp.library {
+  name = "sclf";
+
+  deps = [
+    (depot.nix.buildLisp.bundled "sb-posix")
+  ];
+
+  srcs = [
+    ./package.lisp
+    ./sclf.lisp
+    ./sysproc.lisp
+    ./lazy.lisp
+    ./time.lisp
+    ./directory.lisp
+    ./serial.lisp
+    ./mp/sbcl.lisp
+  ];
+
+  # TODO(sterni): implement OS interaction for ECL and CCL
+  brokenOn = [
+    "ecl"
+    "ccl"
+  ];
+}
diff --git a/third_party/lisp/sclf/directory.lisp b/third_party/lisp/sclf/directory.lisp
index 39479f66728e..4684a8e7056a 100644
--- a/third_party/lisp/sclf/directory.lisp
+++ b/third_party/lisp/sclf/directory.lisp
@@ -1,6 +1,7 @@
 ;;;  directory.lisp --- filesystem directory access
 
 ;;;  Copyright (C) 2006, 2007, 2008, 2009, 2010 by Walter C. Pelissero
+;;;  Copyright (C) 2021 by the TVL Authors
 
 ;;;  Author: Walter C. Pelissero <walter@pelissero.de>
 ;;;  Project: sclf
@@ -348,18 +349,12 @@ are defined."
 (defun stat-modification-time (stat)
   "Return the modification time of the STAT structure as Lisp
 Universal Time, which is not the same as the Unix time."
-  #-(or cmu sbcl) (error "Don't know how to adjust Unix time to Lisp Universal Time.")
-  (+ #+cmu lisp::unix-to-universal-time
-     #+sbcl sb-impl::unix-to-universal-time
-     (stat-mtime stat)))
+  (unix->universal-time (stat-mtime stat)))
 
 (defun stat-creation-time (stat)
   "Return the creation time of the STAT structure as Lisp
 Universal Time, which is not the same as the Unix time."
-  #-(or cmu sbcl) (error "Don't know how to adjust Unix time to Lisp Universal Time.")
-  (+ #+cmu lisp::unix-to-universal-time
-     #+sbcl sb-impl::unix-to-universal-time
-     (stat-ctime stat)))
+  (unix->universal-time (stat-ctime stat)))
 
 (defun file-modification-time (file)
   "Return the modification time of FILE as Lisp Universal Time, which
diff --git a/third_party/lisp/sclf/package.lisp b/third_party/lisp/sclf/package.lisp
index 50c42e1a7d62..652194f93cad 100644
--- a/third_party/lisp/sclf/package.lisp
+++ b/third_party/lisp/sclf/package.lisp
@@ -1,6 +1,7 @@
 ;;;  package.lisp --- packages description
 
 ;;;  Copyright (C) 2006, 2007, 2008, 2009, 2010 by Walter C. Pelissero
+;;;  Copyright (C) 2021 by the TVL Authors
 
 ;;;  Author: Walter C. Pelissero <walter@pelissero.de>
 ;;;  Project: sclf
@@ -179,6 +180,7 @@
 	   #:stat-mode
 	   #:save-file-excursion
 	   #:stat-modification-time
+	   #:stat-creation-time
 	   #:file-modification-time
 	   #:file-creation-time
 	   #:show
diff --git a/third_party/lisp/sclf/sclf.asd b/third_party/lisp/sclf/sclf.asd
index dea280401b1f..dfb56a8ded0e 100644
--- a/third_party/lisp/sclf/sclf.asd
+++ b/third_party/lisp/sclf/sclf.asd
@@ -1,6 +1,7 @@
 ;;;  sclf.asd --- system definition
 
 ;;;  Copyright (C) 2005, 2006, 2008, 2009 by Walter C. Pelissero
+;;;  Copyright (C) 2021 by the TVL Authors
 
 ;;;  Author: Walter C. Pelissero <walter@pelissero.de>
 ;;;  Project: SCLF
@@ -44,8 +45,8 @@ uses, too small to fit anywhere else."
      (:file "sclf" :depends-on ("package"))
      (:file "sysproc" :depends-on ("package" "sclf"))
      (:file "lazy" :depends-on ("package" "sclf"))
-     (:file "directory" :depends-on ("package" "sclf"))
      (:file "time" :depends-on ("package" "sclf"))
+     (:file "directory" :depends-on ("package" "sclf" "time"))
      (:file "serial" :depends-on ("package" "sclf"))
      (:module "mp"
 	      :depends-on ("package" "sclf")