diff --git a/ecl-12.12.1-fixes.patch b/ecl-12.12.1-fixes.patch new file mode 100644 index 0000000..ab72793 --- /dev/null +++ b/ecl-12.12.1-fixes.patch @@ -0,0 +1,173 @@ +ENSURE-DIRECTORIES-EXIST ignores the host and device from the original +pathname when creating the directories. + +diff --git a/src/lsp/mislib.lsp b/src/lsp/mislib.lsp +index 0f6eb45..9b37225 100644 +--- a/src/lsp/mislib.lsp ++++ b/src/lsp/mislib.lsp +@@ -282,7 +282,7 @@ where CREATED is true only if we succeeded on creating all directories." + :defaults full-pathname))) + (dolist (item (pathname-directory full-pathname)) + (setf d (nconc d (list item))) +- (let* ((p (make-pathname :directory d))) ++ (let* ((p (make-pathname :directory d :defaults *default-pathname-defaults*))) + (unless (or (symbolp item) (si::file-kind p nil)) + (setf created t) + (let ((ps (namestring p))) + +ffi:definline referenced a symbol from the C package without package prefix. + +diff --git a/src/lsp/ffi.lsp b/src/lsp/ffi.lsp +index a38288c..8b66a2e 100644 +--- a/src/lsp/ffi.lsp ++++ b/src/lsp/ffi.lsp +@@ -681,7 +681,7 @@ the actual arguments are of the specified type." + ;; defCbody must go first, because it clears symbol-plist of fun + (defCbody ,fun ,arg-types ,type ,code) + (declaim (ftype (function ,arg-types ,type) ,fun)) +- (def-inline ,fun :always ,arg-types ,type ,code))) ++ (c::def-inline ,fun :always ,arg-types ,type ,code))) + + (defmacro defla (&rest body) + "Syntax: (defla name lambda-list &body body)" " + +Write SCALE-FLOAT so that it cannot lead to infinite loops. + +diff --git a/src/lsp/format.lsp b/src/lsp/format.lsp +index a44b810..d18054f 100644 +--- a/src/lsp/format.lsp ++++ b/src/lsp/format.lsp +@@ -196,6 +196,20 @@ + ;; Note that we have to compute the exponential _every_ _time_ in the loop + ;; because multiplying just by 10.0l0 every time would lead to a greater + ;; loss of precission. ++ (let ((ex (round (* exponent #.(log 2l0 10))))) ++ (declare (fixnum ex)) ++ (if (minusp ex) ++ (loop for y of-type long-float ++ = (* x (the long-float (expt 10.0l0 (- ex)))) ++ while (<= y 0.1l0) ++ do (decf ex) ++ finally (return (values y (the fixnum (+ delta ex))))) ++ (loop for y of-type long-float ++ = (/ x (the long-float (expt 10.0l0 ex))) ++ while (> y 1.0l0) ++ do (incf ex) ++ finally (return (values y (the fixnum (+ delta ex))))))) ++ #+(or) + (loop with ex of-type fixnum + = (round (* exponent #.(log 2l0 10))) + for y of-type long-float + +(CONCATENATE 'SIMPLE-BASE-STRING ...) returns an ordinary string. + +diff --git a/src/lsp/seq.lsp b/src/lsp/seq.lsp +index ee24580..16ff41f 100644 +--- a/src/lsp/seq.lsp ++++ b/src/lsp/seq.lsp +@@ -72,7 +72,7 @@ + (setq elt-type 'BASE-CHAR + length (if (endp args) '* (first args)))) + #+unicode +- ((BASE-STRING BASE-SIMPLE-STRING) ++ ((BASE-STRING SIMPLE-BASE-STRING) + (setq elt-type 'BASE-CHAR + length (if (endp args) '* (first args)))) + #+unicode + +Null terminate the base-strings created by make-array. + +diff --git a/src/c/array.d b/src/c/array.d +index d844602..e6b8e76 100644 +--- a/src/c/array.d ++++ b/src/c/array.d +@@ -552,6 +552,13 @@ ecl_array_allocself(cl_object x) + return; + } + #endif ++ case ecl_aet_bc: { ++ cl_index elt_size = 1; ++ x->vector.self.bc = (ecl_base_char *)ecl_alloc_atomic(d+1); ++ /* Null terminate the string */ ++ x->vector.self.bc[d] = 0; ++ break; ++ } + case ecl_aet_bit: + d = (d + (CHAR_BIT-1)) / CHAR_BIT; + x->vector.self.bit = (byte *)ecl_alloc_atomic(d); +@@ -574,7 +581,7 @@ ecl_alloc_simple_vector(cl_index l, cl_elttype aet) + case ecl_aet_bc: + x = ecl_alloc_compact_object(t_base_string, l+1); + x->base_string.self = ECL_COMPACT_OBJECT_EXTRA(x); +- memset(x->base_string.self, 0, l+1); ++ x->base_string.self[l] = 0; + break; + #ifdef ECL_UNICODE + case ecl_aet_ch: + +In type propagators, the function name is rarely use: declare it ignorable. + +diff --git a/src/cmp/cmptype-prop.lsp b/src/cmp/cmptype-prop.lsp +index f266ef0..0b6ae1d 100644 +--- a/src/cmp/cmptype-prop.lsp ++++ b/src/cmp/cmptype-prop.lsp +@@ -71,7 +71,7 @@ + (setf lambda-list (append lambda-list (list '&rest var)) + body (list* `(declare (ignorable ,var)) body)))) + `(setf (gethash ',fname *p0-dispatch-table*) +- #'(lambda ,lambda-list ,@body))) ++ #'(lambda ,lambda-list (declare (ignorable ,(first lambda-list))) ,@body))) + + (defun copy-type-propagator (orig dest-list) + (loop with function = (gethash orig *p0-dispatch-table*) + +Missing argument to LOGAND. + +diff --git a/src/cmp/cmpopt-bits.lsp b/src/cmp/cmpopt-bits.lsp +index f097e19..0e27fbc 100644 +--- a/src/cmp/cmpopt-bits.lsp ++++ b/src/cmp/cmpopt-bits.lsp +@@ -75,7 +75,7 @@ + ;;; TYPE PROPAGATION + ;;; + +-(def-type-propagator logand (&rest args) ++(def-type-propagator logand (fname &rest args) + (values args + (if args + (dolist (int-type '((UNSIGNED-BYTE 8) FIXNUM) 'integer) + +Some statements from si::bc-disassemble were written to the wrong stream. + +diff --git a/src/c/disassembler.d b/src/c/disassembler.d +index c45bc29..4680982 100644 +--- a/src/c/disassembler.d ++++ b/src/c/disassembler.d +@@ -156,10 +156,10 @@ disassemble_tagbody(cl_object bytecodes, cl_opcode *vector) { + print_noarg("TAGBODY"); + for (i=0; i + + +-ECL"> +-CMUCL"> +-SBCL"> +-FFI"> +-UFFI"> +-CFFI"> +-ASDF"> +-FASL"> +-"> +-"> +-CLOS"> +-PCL"> +-"> +-"> ++ECL"> ++CMUCL"> ++SBCL"> ++FFI"> ++UFFI"> ++CFFI"> ++ASDF"> ++FASL"> ++"> ++"> ++CLOS"> ++PCL"> ++"> ++"> + + + +@@ -25,21 +25,21 @@ + + + +-UFFI"> +-FFI"> +-Lispworks"> +-OpenMCL"> +-MCL"> +-AllegroCL"> +-T"> +-NIL"> +-NULL"> +-C"> +-defsystem"> ++UFFI"> ++FFI"> ++Lispworks"> ++OpenMCL"> ++MCL"> ++AllegroCL"> ++T"> ++NIL"> ++NULL"> ++C"> ++defsystem"> + +-Cygwin"> +-Mingw"> +-[Only in Common Lisp]"> ++Cygwin"> ++Mingw"> ++[Only in Common Lisp]"> + +-nil"> +-t"> +\ No newline at end of file ++nil"> ++t"> +\ No newline at end of file diff --git a/ecl.spec b/ecl.spec index e1e783e..b5d6515 100644 --- a/ecl.spec +++ b/ecl.spec @@ -1,6 +1,6 @@ Name: ecl Version: 12.12.1 -Release: 2%{?dist} +Release: 3%{?dist} Summary: Embeddable Common-Lisp Group: Development/Languages @@ -31,15 +31,20 @@ Patch0: %{name}-12.12.1-warnings.patch # http://trac.sagemath.org/sage_trac/ticket/11752 # http://www.mail-archive.com/ecls-list@lists.sourceforge.net/msg00644.html Patch1: %{name}-12.12.1-signal_handling_thread.patch +# Bug-fixing patches cherry picked from upstream's git. +Patch2: %{name}-12.12.1-fixes.patch +# Work around xsltproc requiring namespace declarations for entities. +Patch3: %{name}-12.12.1-xsltproc.patch BuildRequires: libX11-devel BuildRequires: pkgconfig BuildRequires: gmp-devel BuildRequires: gc-devel -BuildRequires: libatomic_ops-devel +BuildRequires: libatomic_ops-static BuildRequires: libffi-devel BuildRequires: emacs-common -BuildRequires: docbook-dtds +BuildRequires: docbook5-schemas +BuildRequires: docbook5-style-xsl BuildRequires: xmlto BuildRequires: desktop-file-utils Requires: gcc @@ -68,6 +73,8 @@ Gray streams. %setup -q -T -D -a 1 %patch0 %patch1 +%patch2 -p1 +%patch3 # Remove spurious executable bits chmod a-x src/CHANGELOG @@ -149,6 +156,11 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor >&/dev/null ||: %changelog +* Thu Dec 20 2012 Jerry James - 12.12.1-3 +- BR libatomic_ops-static instead of -devel (bz 889173) +- Pull in upstream patches for bugs discovered post-release +- Documentation needs docbook 5 schemas and XSL + * Sat Dec 08 2012 Rex Dieter 12.12.1-2 - track libecl soname, so bumps aren't a surprise