Wednesday, June 28, 2023

lang/ecl: backport a fix for building recent lang/sbcl

Hi,

The following diff backports a commit
(https://gitlab.com/embeddable-common-lisp/ecl/-/commit/f3d4cf4b66ab6c3cd8629ab6d0c7f7c50d7fd8a4)
to fix a compiler bug.

This bug is on the way to update lang/sbcl to more recent version (I tested
compiling sbcl-2.3.6 with ecl on amd64).

While here, some smalls changes:
- V isn't present in PLIST, no need to add it to SUBST_VARS
- the licence is wrong: it is LGPLv2 or later
- use --enable-gmp=system instead of --with-system-gmp to unify the way system libraries are configured

Comments or OK ?
--
Sebastien Marie

diff /home/semarie/repos/openbsd/ports
commit - d5e6a0c0580dc3232cdef998743855ad7ea2aaa7
path + /home/semarie/repos/openbsd/ports
blob - a2867ce45cd5dfb740d810a62664d2b1f2cc5c8a
file + lang/ecl/Makefile
--- lang/ecl/Makefile
+++ lang/ecl/Makefile
@@ -5,13 +5,14 @@ HOMEPAGE = https://common-lisp.net/project/ecl/
DISTNAME = ecl-$V
SHARED_LIBS += ecl 8.0

+REVISION = 0
+
HOMEPAGE = https://common-lisp.net/project/ecl/
MAINTAINER = Timo Myyra <timo.myyra@bittivirhe.fi>

-SUBST_VARS = V
EXTRACT_SUFX = .tgz

-# GPLv2 or later
+# LGPLv2 or later
PERMIT_PACKAGE = Yes

MASTER_SITES = ${HOMEPAGE}static/files/release/
@@ -27,7 +28,7 @@ CONFIGURE_ARGS += --enable-boehm=system \

CONFIGURE_ARGS += --enable-boehm=system \
--enable-libatomic=system \
- --with-system-gmp \
+ --enable-gmp=system \
--with-gmp-prefix=${LOCALBASE}

# etags gets picked up if it's installed, and dumps core while
blob - /dev/null
file + lang/ecl/patches/patch-src_cmp_cmpc-wt_lsp (mode 640)
--- /dev/null
+++ lang/ecl/patches/patch-src_cmp_cmpc-wt_lsp
@@ -0,0 +1,25 @@
+backport https://gitlab.com/embeddable-common-lisp/ecl/-/commit/f3d4cf4b66ab6c3cd8629ab6d0c7f7c50d7fd8a4
+
+Index: src/cmp/cmpc-wt.lsp
+--- src/cmp/cmpc-wt.lsp.orig
++++ src/cmp/cmpc-wt.lsp
+@@ -19,18 +19,7 @@
+ (defun wt1 (form)
+ (cond ((not (floatp form))
+ (typecase form
+- (INTEGER
+- (princ form *compiler-output1*)
+- (princ
+- (cond ((typep form (rep-type->lisp-type :int)) "")
+- ((typep form (rep-type->lisp-type :unsigned-int)) "U")
+- ((typep form (rep-type->lisp-type :long)) "L")
+- ((typep form (rep-type->lisp-type :unsigned-long)) "UL")
+- ((typep form (rep-type->lisp-type :long-long)) "LL")
+- ((typep form (rep-type->lisp-type :unsigned-long-long)) "ULL")
+- (t (baboon :format-control "wt1: The number ~A doesn't fit any integer type." form)))
+- *compiler-output1*))
+- ((or STRING CHARACTER)
++ ((or INTEGER STRING CHARACTER)
+ (princ form *compiler-output1*))
+ (VAR (wt-var form))
+ (t (wt-loc form))))
blob - /dev/null
file + lang/ecl/patches/patch-src_cmp_cmploc_lsp (mode 640)
--- /dev/null
+++ lang/ecl/patches/patch-src_cmp_cmploc_lsp
@@ -0,0 +1,36 @@
+backport https://gitlab.com/embeddable-common-lisp/ecl/-/commit/f3d4cf4b66ab6c3cd8629ab6d0c7f7c50d7fd8a4
+
+Index: src/cmp/cmploc.lsp
+--- src/cmp/cmploc.lsp.orig
++++ src/cmp/cmploc.lsp
+@@ -181,10 +181,30 @@
+ (defun wt-temp (temp)
+ (wt "T" temp))
+
++(defun wt-fixnum (value &optional vv)
++ (declare (ignore vv))
++ (princ value *compiler-output1*)
++ ;; Specify explicit type suffix as a workaround for MSVC. C99
++ ;; standard compliant compilers don't need type suffixes and choose
++ ;; the correct type themselves. Note that we cannot savely use
++ ;; anything smaller than a long long here, because we might perform
++ ;; some other computation on the integer constant which could
++ ;; overflow if we use a smaller integer type (overflows in long long
++ ;; computations are taken care of by the compiler before we get to
++ ;; this point).
++ #+msvc (princ (cond ((typep value (rep-type->lisp-type :long-long)) "LL")
++ ((typep value (rep-type->lisp-type :unsigned-long-long)) "ULL")
++ (t (baboon :format-control
++ "wt-fixnum: The number ~A doesn't fit any integer type."
++ value)))
++ *compiler-output1*))
++
+ (defun wt-number (value &optional vv)
++ (declare (ignore vv))
+ (wt value))
+
+ (defun wt-character (value &optional vv)
++ (declare (ignore vv))
+ ;; We do not use the '...' format because this creates objects of type
+ ;; 'char' which have sign problems
+ (wt value))
blob - /dev/null
file + lang/ecl/patches/patch-src_cmp_cmptables_lsp (mode 640)
--- /dev/null
+++ lang/ecl/patches/patch-src_cmp_cmptables_lsp
@@ -0,0 +1,14 @@
+backport https://gitlab.com/embeddable-common-lisp/ecl/-/commit/f3d4cf4b66ab6c3cd8629ab6d0c7f7c50d7fd8a4
+
+Index: src/cmp/cmptables.lsp
+--- src/cmp/cmptables.lsp.orig
++++ src/cmp/cmptables.lsp
+@@ -182,7 +182,7 @@
+
+ (temp . wt-temp)
+ (lcl . wt-lcl-loc)
+- (fixnum-value . wt-number)
++ (fixnum-value . wt-fixnum)
+ (long-float-value . wt-number)
+ (double-float-value . wt-number)
+ (single-float-value . wt-number)

No comments:

Post a Comment