Skip to content

Commit

Permalink
dev-lisp/clisp: Bumps version to 2.49.60
Browse files Browse the repository at this point in the history
Bug: https://bugs.gentoo.org/638942
Package-Manager: Portage-2.3.13, Repoman-2.3.3
  • Loading branch information
Chema Alonso Josa committed Dec 11, 2017
1 parent d86304f commit a08b6ee
Show file tree
Hide file tree
Showing 3 changed files with 355 additions and 0 deletions.
1 change: 1 addition & 0 deletions dev-lisp/clisp/Manifest
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
DIST clisp-2.48.tar.bz2 7885098 BLAKE2B 42ebfe4721015f522184bce710bf95d79aa7f2a239410af249a8e85d80f140344ec80daaa34f7cdbfd2ae86407984657163ce3f6e4201eb132f7c71e21523cba SHA512 3288b6a2973c924006b14bbed1e8e3e688276a187ac2a6c7851dc7ae699e7832d30e5e7eecdabc76c08c7e8e8ce1b562eb97a44570d3035e558ea2310de2b719
DIST clisp-2.49.60.tar.bz2 8745713 BLAKE2B 5dffd594c6d00c2057a98e3f93c888cd5cdc60009cd8fc987e39ff5182e71e575e148839d9c973fbfd0842b82ddf1b5918e86d128d9c79f6d0d4b6afcdc5853f SHA512 656cd59a23ba9be5304a6e0d64d79ac518072c431820b8cf95759fa8f3a66e2efe4d07939315b93e5e06b6e5348d8b32739b129a9e8ac0dc362dd5d1f1eb8aa8
DIST clisp-2.49.tar.bz2 8091011 BLAKE2B e034c581b8100837b34d0adf1ef45bd667272d062945875175958178b4ef5b11e899dfb76505eb8cb51fca6101c11a9f21fb2cc9a78a3c0f82b06166211434f7 SHA512 eef66fc85199a2c283b616db61bf67ff103eeb0f19fa907da48994dc790b6f5f8d0c74fb3bd723c6b827c0ff3cfd89fa6ba67934fc669ed5d5249044b5140d81
147 changes: 147 additions & 0 deletions dev-lisp/clisp/clisp-2.49.60.ebuild
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
# Copyright 1999-2017 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

EAPI=6

inherit eutils flag-o-matic multilib toolchain-funcs

DESCRIPTION="A portable, bytecode-compiled implementation of Common Lisp"
HOMEPAGE="http://clisp.sourceforge.net/"
SRC_URI="https://haible.de/bruno/gnu/clisp-2.49.60.tar.bz2"

LICENSE="GPL-2"
SLOT="2/7"
KEYWORDS="~amd64 ~ppc ~sparc ~x86"
IUSE="hyperspec X berkdb dbus fastcgi gdbm gtk pari +pcre postgres +readline svm -threads +unicode +zlib"
# "jit" disabled ATM

RDEPEND=">=dev-lisp/asdf-2.33-r3
virtual/libiconv
>=dev-libs/libsigsegv-2.10
>=dev-libs/ffcall-1.10
dbus? ( sys-apps/dbus )
fastcgi? ( dev-libs/fcgi )
gdbm? ( sys-libs/gdbm )
gtk? ( >=x11-libs/gtk+-2.10:2 >=gnome-base/libglade-2.6 )
pari? ( <sci-mathematics/pari-2.5.0 )
postgres? ( >=dev-db/postgresql-8.0:* )
readline? ( >=sys-libs/readline-7.0:0= )
pcre? ( dev-libs/libpcre:3 )
svm? ( sci-libs/libsvm )
zlib? ( sys-libs/zlib )
X? ( x11-libs/libXpm )
hyperspec? ( dev-lisp/hyperspec )
berkdb? ( sys-libs/db:4.8 )"

DEPEND="${RDEPEND}
X? ( x11-misc/imake x11-proto/xextproto )"

enable_modules() {
[[ $# = 0 ]] && die "${FUNCNAME[0]} must receive at least one argument"
for m in "$@" ; do
einfo "enabling module $m"
myconf+=" --with-module=${m}"
done
}

BUILDDIR="builddir"

# modules not enabled:
# * berkdb: must figure out a way to make the configure script pick up the
# currect version of the library and headers
# * dirkey: fails to compile, requiring windows.h, possibly wrong #ifdefs
# * matlab, netica: not in portage
# * oracle: can't install oracle-instantclient

src_prepare() {
# More than -O1 breaks alpha/ia64
if use alpha || use ia64; then
sed -i -e 's/-O2//g' src/makemake.in || die
fi
eapply "${FILESDIR}"/"${P}"-after_glibc_cfree_bdb.patch
eapply_user
}

src_configure() {
# We need this to build on alpha/ia64
if use alpha || use ia64; then
replace-flags -O? -O1
append-flags '-D NO_MULTIMAP_SHM -D NO_MULTIMAP_FILE -D NO_SINGLEMAP -D NO_TRIVIALMAP'
fi

if use x86; then
append-flags -falign-functions=4
fi

# QA issue with lisp.run
append-flags -Wa,--noexecstack

# built-in features
local myconf="--with-ffcall --without-dynamic-modules"
# There's a problem with jit_allocai function
# if use jit; then
# myconf+=" --with-jitc=lightning"
# fi
if use threads; then
myconf+=" --with-threads=POSIX_THREADS"
fi

# default modules
enable_modules rawsock
# optional modules
use elibc_glibc && enable_modules bindings/glibc
use X && enable_modules clx/new-clx
if use postgres; then
enable_modules postgresql
append-cppflags -I$(pg_config --includedir)
fi
if use berkdb; then
enable_modules berkeley-db
append-cppflags -I/usr/include/db4.8
fi
use dbus && enable_modules dbus
use fastcgi && enable_modules fastcgi
use gdbm && enable_modules gdbm
use gtk && enable_modules gtk2
use pari && enable_modules pari
use pcre && enable_modules pcre
use svm && enable_modules libsvm
use zlib && enable_modules zlib

if use hyperspec; then
CLHSROOT="file:///usr/share/doc/hyperspec/HyperSpec/"
else
CLHSROOT="http://www.lispworks.com/reference/HyperSpec/"
fi

# configure chokes on --sysconfdir option
local configure="./configure --prefix=/usr --enable-portability \
--libdir=/usr/$(get_libdir) $(use_with readline) $(use_with unicode) \
${myconf} --hyperspec=${CLHSROOT} ${BUILDDIR}"
einfo "${configure}"
${configure} || die "./configure failed"

IMPNOTES="file://${ROOT%/}/usr/share/doc/${PN}-${PVR}/html/impnotes.html"
sed -i "s,http://clisp.cons.org/impnotes/,${IMPNOTES},g" \
"${BUILDDIR}"/config.lisp || die "Cannot fix link to implementation notes"
}

src_compile() {
export VARTEXFONTS="${T}"/fonts
cd "${BUILDDIR}" || die
# parallel build fails
emake -j1
}

src_install() {
pushd "${BUILDDIR}"
make DESTDIR="${D}" prefix=/usr install-bin || die "Installation failed"
doman clisp.1
dodoc ../SUMMARY README* ../src/NEWS ../unix/MAGIC.add ../ANNOUNCE
# stripping them removes common symbols (defined but uninitialised variables)
# which are then needed to build modules...
export STRIP_MASK="*/usr/$(get_libdir)/clisp-${PV}/*/*"
popd
dohtml doc/impnotes.{css,html} doc/regexp.html doc/clisp.png
dodoc doc/{CLOS-guide,LISP-tutorial}.txt
}
207 changes: 207 additions & 0 deletions dev-lisp/clisp/files/clisp-2.49.60-after_glibc_cfree_bdb.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,207 @@
diff --git a/modules/berkeley-db/bdb.c b/modules/berkeley-db/bdb.c
index a266d41..942652a 100644
--- a/modules/berkeley-db/bdb.c
+++ b/modules/berkeley-db/bdb.c
@@ -2216,7 +2216,13 @@ DEFUN(BDB:DB-COMPACT, db &key TRANSACTION :START STOP FREE FILL TIMEOUT \
c_data.compact_timeout = timeout;
c_data.compact_pages = pages;
SYSCALL(db->compact,(db,txn,pstart,pstop,&c_data,flags,&end));
- pushSTACK(uint32_to_I(c_data.compact_empty_buckets));
+ /* ====
+ * compact_empty_buckets is in bdb-5.3 as part of output stats
+ * however this version use bdb-4.8 which does not have it
+ * ====
+ *
+ * pushSTACK(uint32_to_I(c_data.compact_empty_buckets));
+ * */
pushSTACK(uint32_to_I(c_data.compact_pages_free));
pushSTACK(uint32_to_I(c_data.compact_pages_examine));
pushSTACK(uint32_to_I(c_data.compact_levels));
diff --git a/modules/bindings/glibc/linux.lisp b/modules/bindings/glibc/linux.lisp
index c960753..2993990 100644
--- a/modules/bindings/glibc/linux.lisp
+++ b/modules/bindings/glibc/linux.lisp
@@ -1,7 +1,7 @@
;; Foreign functions provided by the Linux C library version 6,
;; i.e. the GNU C library version 2.0.7.
;; Bruno Haible 10.4.1998, 19.4.1998
-;; Sam Steingold 2002-2008, 2011
+;; Sam Steingold 2002-2008, 2011, 2013, 2016-2017

;; NB: quite a few functions here have more portable counterparts in POSIX

@@ -649,7 +649,6 @@
(def-call-out calloc (:arguments (nmemb size_t) (size size_t))
(:return-type c-pointer))
(def-call-out free (:arguments (ptr c-pointer)) (:return-type nil))
-(def-call-out cfree (:arguments (ptr c-pointer)) (:return-type nil))
(def-call-out valloc (:arguments (size size_t)) (:return-type c-pointer))

(def-call-out abort (:arguments) (:return-type nil))
@@ -687,9 +686,8 @@
(def-call-out system? (:arguments (null c-string))
(:return-type boolean) (:name "system"))

-; You can uncomment this if your compiler sets __USE_GNU
-; (def-call-out canonicalize_file_name (:arguments (name c-string))
-; (:return-type c-string :malloc-free))
+(def-call-out canonicalize_file_name (:arguments (name c-string))
+ (:return-type c-string :malloc-free) (:guard "defined(__USE_GNU)"))

(def-call-out realpath
(:arguments (name c-string)
@@ -1041,9 +1039,8 @@
(def-call-out access (:arguments (name c-string) (type int))
(:return-type int))

-; You can uncomment this if your compiler sets __USE_GNU
-; (def-call-out euidaccess (:arguments (name c-string) (type int))
-; (:return-type int))
+(def-call-out euidaccess (:arguments (name c-string) (type int))
+ (:return-type int) (:guard "defined(__USE_GNU)"))

(defconstant SEEK_SET 0)
(defconstant SEEK_CUR 1)
@@ -1094,9 +1091,8 @@
;(def-call-out getcwd (:arguments (buf c-string :out) (size size_t)) ; ??
; (:return-type c-string))

-; You can uncomment this if your compiler sets __USE_GNU
-; (def-call-out get_current_dir_name (:arguments)
-; (:return-type c-string :malloc-free))
+(def-call-out get_current_dir_name (:arguments)
+ (:return-type c-string :malloc-free) (:guard "defined(__USE_GNU)"))

;(def-call-out getwd (:arguments (buf c-string :out)) ; ??
; (:return-type c-string))
@@ -1324,8 +1320,8 @@
; (:arguments (size int) (list (c-ptr (c-array gid_t ??)) :out)) ; ??
; (:return-type int))

-; You can uncomment this if your compiler sets __USE_GNU
-; (def-call-out group_member (:arguments (gid gid_t)) (:return-type boolean))
+(def-call-out group_member (:arguments (gid gid_t)) (:return-type boolean)
+ (:guard "defined(__USE_GNU)"))
(def-call-out setuid (:arguments (uid uid_t)) (:return-type int))
(def-call-out setreuid (:arguments (ruid uid_t) (euid uid_t))
(:return-type int))
@@ -1822,8 +1818,8 @@
(:return-type c-string :malloc-free))
(def-call-out ungetc (:arguments (c int) (fp FILE))
(:return-type int))
-; You can uncomment this if your compiler sets __USE_GNU
-; (def-call-out fcloseall (:arguments) (:return-type int))
+(def-call-out fcloseall (:arguments) (:return-type int)
+ (:guard "defined(__USE_GNU)"))
(def-call-out fdopen (:arguments (fildes int) (mode c-string))
(:return-type c-pointer))
(def-call-out fileno (:arguments (fp FILE)) (:return-type int))
@@ -1901,11 +1897,11 @@ typedef __off64_t clisp_dirent_off_t;
(:return-type (c-ptr-null dirent)))
(def-call-out readdir64 (:arguments (dirp c-pointer))
(:return-type (c-ptr-null dirent64)))
-(def-call-out readdir_r
+(def-call-out readdir_r ; deprecated
(:arguments (dirp c-pointer) (entry (c-ptr dirent) :out :alloca)
(result (c-ptr (c-ptr dirent)) :out :alloca)) ; ??
(:return-type int))
-(def-call-out readdir64_r
+(def-call-out readdir64_r ; deprecated
(:arguments (dirp c-pointer) (entry (c-ptr dirent64) :out :alloca)
(result (c-ptr (c-ptr dirent64)) :out :alloca)) ; ??
(:return-type int))
diff --git a/modules/bindings/glibc/test.tst b/modules/bindings/glibc/test.tst
index f807389..b2c1222 100644
--- a/modules/bindings/glibc/test.tst
+++ b/modules/bindings/glibc/test.tst
@@ -5,6 +5,16 @@
(progn (require "linux") T) T
(listp (show (multiple-value-list (ext:module-info "linux" t)) :pretty t)) T

+(stringp (show (linux:get-domain-name))) T
+(stringp (show (linux:get-host-name))) T
+
+;; usually __USE_GNU is defined, so this should work:
+(let* ((d (linux:get_current_dir_name))
+ (c (linux:canonicalize_file_name (concatenate 'string d "/."))))
+ (or (string= d c)
+ (list :cur-dir d :canonical c)))
+T
+
(defparameter *d* (show (linux:opendir "."))) *D*
(linux:dirent64-d_name (show (linux:readdir64 *d*))) "."
(linux:dirent64-d_name (show (linux:readdir64 *d*))) ".."
diff --git a/src/foreign1.lisp b/src/foreign1.lisp
index 26a3ba5..0e43de7 100644
--- a/src/foreign1.lisp
+++ b/src/foreign1.lisp
@@ -1,6 +1,6 @@
;;; Foreign function interface for CLISP
;;; Bruno Haible 19.2.1995
-;;; Sam Steingold 1998-2010
+;;; Sam Steingold 1998-2010, 2017

#+UNICODE
(progn
@@ -805,14 +805,17 @@
c-name (to-c-string c-name) (third variable) (first variable))
(when *foreign-guard* (format *coutput-stream* "# endif~%"))))
(dolist (function *function-list*)
- (let ((c-name (first function)))
- (when *foreign-guard*
- (format *coutput-stream* "# if defined(HAVE_~A)~%"
- (string-upcase c-name)))
+ (let ((c-name (first function))
+ (guard (fourth function)))
+ (when guard
+ (format *coutput-stream* "# if ~A~%"
+ (if (eq guard t)
+ (format nil "defined(HAVE_~A)" (string-upcase c-name))
+ guard)))
(format *coutput-stream*
" register_foreign_function((void*)&~A,~A,~D);~%"
c-name (to-c-string c-name) (svref (second function) 3))
- (when *foreign-guard* (format *coutput-stream* "# endif~%"))))
+ (when guard (format *coutput-stream* "# endif~%"))))
(maphash (lambda (type fun-vec)
(declare (ignore type))
(let ((c-name (to-c-name (car fun-vec))))
@@ -1083,7 +1086,7 @@
(defmacro DEF-CALL-OUT (&whole whole-form name &rest options)
(setq name (check-symbol name (first whole-form)))
(let* ((alist
- (parse-options options '(:name :arguments :return-type :language
+ (parse-options options '(:name :arguments :return-type :language :guard
:built-in :library :version :documentation)
whole-form))
(def (gensym "DEF-CALL-OUT-"))
@@ -1095,6 +1098,7 @@
(version (second (assoc :version alist)))
(c-name (foreign-name name (assoc :name alist)))
(built-in (second (assoc :built-in alist)))
+ (guard (get-assoc :guard alist '*foreign-guard*))
;; Maximize sharing in .fas file, reuse options
;; parse-c-function ignores unknown options, e.g. :name
(ctype `(PARSE-C-FUNCTION ',options ',whole-form)))
@@ -1102,7 +1106,7 @@
',c-name ,ctype ',properties ,library ,version NIL)))
(EXT:COMPILER-LET ((,def ,ctype))
(EVAL-WHEN (COMPILE)
- (UNLESS ,LIBRARY (NOTE-C-FUN ',c-name ,def ',built-in)))
+ (UNLESS ,LIBRARY (NOTE-C-FUN ',c-name ,def ',built-in ,guard)))
(SYSTEM::EVAL-WHEN-COMPILE
(SYSTEM::C-DEFUN ',name (C-TYPE-TO-SIGNATURE ,ctype))))
(WHEN ,def ; found library function
@@ -1110,10 +1114,10 @@
(SYSTEM::%PUTD ',name ,def))
',name)))

-(defun note-c-fun (c-name ctype built-in) ; not ABI, compile-time only
+(defun note-c-fun (c-name ctype built-in guard) ; not ABI, compile-time only
(when (system::prepare-coutput-file)
(prepare-module)
- (push (list c-name ctype built-in)
+ (push (list c-name ctype built-in guard)
*function-list*)))

(defun count-inarguments (arg-vector)

0 comments on commit a08b6ee

Please sign in to comment.