diff --git a/pkgs/development/interpreters/guile/default.nix b/pkgs/development/interpreters/guile/default.nix index ac9b7e9871ae..0c3aeb07a1e1 100644 --- a/pkgs/development/interpreters/guile/default.nix +++ b/pkgs/development/interpreters/guile/default.nix @@ -2,15 +2,13 @@ , gawk, makeWrapper }: stdenv.mkDerivation rec { - name = "guile-1.8.4"; + name = "guile-1.8.5"; src = fetchurl { url = "mirror://gnu/guile/" + name + ".tar.gz"; - sha256 = "1cz1d4n6vzw0lfsvplsiarwqk675f12j596dzfv0h5r9cljpc0ya"; + sha256 = "12b215bbqqkanapwh4dp3lnkg7k239dqiawfcdrb1zjz8hnkvxp2"; }; - patches = [ ./test-tmpdir.patch - ./srcprop-no-deadlock.patch - ./popen-zombie.patch ]; + patches = [ ./popen-zombie.patch ]; buildInputs = [ makeWrapper ]; propagatedBuildInputs = [readline libtool gmp gawk]; @@ -32,6 +30,6 @@ stdenv.mkDerivation rec { ''; homepage = http://www.gnu.org/software/guile/; - license = "LGPL"; + license = "LGPLv2+"; }; } diff --git a/pkgs/development/interpreters/guile/srcprop-no-deadlock.patch b/pkgs/development/interpreters/guile/srcprop-no-deadlock.patch deleted file mode 100644 index 26d10e07d17c..000000000000 --- a/pkgs/development/interpreters/guile/srcprop-no-deadlock.patch +++ /dev/null @@ -1,288 +0,0 @@ -Index: guile/libguile/eval.c -=================================================================== -RCS file: /sources/guile/guile/guile-core/guile/libguile/eval.c,v -retrieving revision 1.405.2.13 -diff -u -r1.405.2.13 eval.c ---- guile/libguile/eval.c 10 Mar 2008 22:13:33 -0000 1.405.2.13 -+++ guile/libguile/eval.c 13 Mar 2008 22:42:30 -0000 -@@ -3039,7 +3039,7 @@ - do { \ - SCM_SET_ARGSREADY (debug);\ - if (scm_check_apply_p && SCM_TRAPS_P)\ -- if (SCM_APPLY_FRAME_P || (SCM_TRACE_P && PROCTRACEP (proc)))\ -+ if (SCM_APPLY_FRAME_P || (SCM_TRACE_P && SCM_PROCTRACEP (proc)))\ - {\ - SCM tmp, tail = scm_from_bool(SCM_TRACED_FRAME_P (debug)); \ - SCM_SET_TRACED_FRAME (debug); \ -Index: guile/libguile/srcprop.c -=================================================================== -RCS file: /sources/guile/guile/guile-core/guile/libguile/srcprop.c,v -retrieving revision 1.73.2.1 -diff -u -r1.73.2.1 srcprop.c ---- guile/libguile/srcprop.c 12 Feb 2006 13:42:51 -0000 1.73.2.1 -+++ guile/libguile/srcprop.c 13 Mar 2008 22:42:30 -0000 -@@ -37,7 +37,7 @@ - /* {Source Properties} - * - * Properties of source list expressions. -- * Five of these have special meaning and optimized storage: -+ * Five of these have special meaning: - * - * filename string The name of the source file. - * copy list A copy of the list expression. -@@ -55,29 +55,47 @@ - SCM_GLOBAL_SYMBOL (scm_sym_column, "column"); - SCM_GLOBAL_SYMBOL (scm_sym_breakpoint, "breakpoint"); - --scm_t_bits scm_tc16_srcprops; --static scm_t_srcprops_chunk *srcprops_chunklist = 0; --static scm_t_srcprops *srcprops_freelist = 0; - - -+/* -+ * Source properties are stored as double cells with the -+ * following layout: -+ -+ * car = tag -+ * cbr = pos -+ * ccr = copy -+ * cdr = plist -+ */ -+ -+#define SRCPROPSP(p) (SCM_SMOB_PREDICATE (scm_tc16_srcprops, (p))) -+#define SRCPROPBRK(p) (SCM_SMOB_FLAGS (p) & SCM_SOURCE_PROPERTY_FLAG_BREAK) -+#define SRCPROPPOS(p) (SCM_CELL_WORD(p,1)) -+#define SRCPROPLINE(p) (SRCPROPPOS(p) >> 12) -+#define SRCPROPCOL(p) (SRCPROPPOS(p) & 0x0fffL) -+#define SRCPROPCOPY(p) (SCM_CELL_OBJECT(p,2)) -+#define SRCPROPPLIST(p) (SCM_CELL_OBJECT_3(p)) -+#define SETSRCPROPBRK(p) \ -+ (SCM_SET_SMOB_FLAGS ((p), \ -+ SCM_SMOB_FLAGS (p) | SCM_SOURCE_PROPERTY_FLAG_BREAK)) -+#define CLEARSRCPROPBRK(p) \ -+ (SCM_SET_SMOB_FLAGS ((p), \ -+ SCM_SMOB_FLAGS (p) & ~SCM_SOURCE_PROPERTY_FLAG_BREAK)) -+#define SRCPROPMAKPOS(l, c) (((l) << 12) + (c)) -+#define SETSRCPROPPOS(p, l, c) (SCM_SET_CELL_WORD(p,1, SRCPROPMAKPOS (l, c))) -+#define SETSRCPROPLINE(p, l) SETSRCPROPPOS (p, l, SRCPROPCOL (p)) -+#define SETSRCPROPCOL(p, c) SETSRCPROPPOS (p, SRCPROPLINE (p), c) -+ -+ -+ -+scm_t_bits scm_tc16_srcprops; -+ - static SCM - srcprops_mark (SCM obj) - { -- scm_gc_mark (SRCPROPFNAME (obj)); - scm_gc_mark (SRCPROPCOPY (obj)); - return SRCPROPPLIST (obj); - } - -- --static size_t --srcprops_free (SCM obj) --{ -- *((scm_t_srcprops **) SCM_SMOB_DATA (obj)) = srcprops_freelist; -- srcprops_freelist = (scm_t_srcprops *) SCM_SMOB_DATA (obj); -- return 0; /* srcprops_chunks are not freed until leaving guile */ --} -- -- - static int - srcprops_print (SCM obj, SCM port, scm_print_state *pstate) - { -@@ -99,38 +117,45 @@ - } - - -+/* -+ * We remember the last file name settings, so we can share that plist -+ * entry. This works because scm_set_source_property_x does not use -+ * assoc-set! for modifying the plist. -+ * -+ * This variable contains a protected cons, whose cdr is the cached -+ * plist -+ */ -+static SCM scm_last_plist_filename; -+ - SCM - scm_make_srcprops (long line, int col, SCM filename, SCM copy, SCM plist) - { -- register scm_t_srcprops *ptr; -- SCM_CRITICAL_SECTION_START; -- if ((ptr = srcprops_freelist) != NULL) -- srcprops_freelist = *(scm_t_srcprops **)ptr; -- else -+ if (!SCM_UNBNDP (filename)) - { -- size_t i; -- scm_t_srcprops_chunk *mem; -- size_t n = sizeof (scm_t_srcprops_chunk) -- + sizeof (scm_t_srcprops) * (SRCPROPS_CHUNKSIZE - 1); -- SCM_SYSCALL (mem = (scm_t_srcprops_chunk *) scm_malloc (n)); -- if (mem == NULL) -- scm_memory_error ("srcprops"); -- scm_gc_register_collectable_memory (mem, n, "srcprops"); -- -- mem->next = srcprops_chunklist; -- srcprops_chunklist = mem; -- ptr = &mem->srcprops[0]; -- for (i = 1; i < SRCPROPS_CHUNKSIZE - 1; ++i) -- *(scm_t_srcprops **)&ptr[i] = &ptr[i + 1]; -- *(scm_t_srcprops **)&ptr[SRCPROPS_CHUNKSIZE - 1] = 0; -- srcprops_freelist = (scm_t_srcprops *) &ptr[1]; -+ SCM old_plist = plist; -+ -+ /* -+ have to extract the acons, and operate on that, for -+ thread safety. -+ */ -+ SCM last_acons = SCM_CDR (scm_last_plist_filename); -+ if (old_plist == SCM_EOL -+ && SCM_CDAR (last_acons) == filename) -+ { -+ plist = last_acons; -+ } -+ else -+ { -+ plist = scm_acons (scm_sym_filename, filename, plist); -+ if (old_plist == SCM_EOL) -+ SCM_SETCDR (scm_last_plist_filename, plist); -+ } - } -- ptr->pos = SRCPROPMAKPOS (line, col); -- ptr->fname = filename; -- ptr->copy = copy; -- ptr->plist = plist; -- SCM_CRITICAL_SECTION_END; -- SCM_RETURN_NEWSMOB (scm_tc16_srcprops, ptr); -+ -+ SCM_RETURN_NEWSMOB3 (scm_tc16_srcprops, -+ SRCPROPMAKPOS (line, col), -+ copy, -+ plist); - } - - -@@ -140,8 +165,6 @@ - SCM plist = SRCPROPPLIST (obj); - if (!SCM_UNBNDP (SRCPROPCOPY (obj))) - plist = scm_acons (scm_sym_copy, SRCPROPCOPY (obj), plist); -- if (!SCM_UNBNDP (SRCPROPFNAME (obj))) -- plist = scm_acons (scm_sym_filename, SRCPROPFNAME (obj), plist); - plist = scm_acons (scm_sym_column, scm_from_int (SRCPROPCOL (obj)), plist); - plist = scm_acons (scm_sym_line, scm_from_int (SRCPROPLINE (obj)), plist); - plist = scm_acons (scm_sym_breakpoint, scm_from_bool (SRCPROPBRK (obj)), plist); -@@ -206,7 +229,6 @@ - if (scm_is_eq (scm_sym_breakpoint, key)) p = scm_from_bool (SRCPROPBRK (p)); - else if (scm_is_eq (scm_sym_line, key)) p = scm_from_int (SRCPROPLINE (p)); - else if (scm_is_eq (scm_sym_column, key)) p = scm_from_int (SRCPROPCOL (p)); -- else if (scm_is_eq (scm_sym_filename, key)) p = SRCPROPFNAME (p); - else if (scm_is_eq (scm_sym_copy, key)) p = SRCPROPCOPY (p); - else - { -@@ -277,13 +299,6 @@ - scm_make_srcprops (0, scm_to_int (datum), - SCM_UNDEFINED, SCM_UNDEFINED, p)); - } -- else if (scm_is_eq (scm_sym_filename, key)) -- { -- if (SRCPROPSP (p)) -- SRCPROPFNAME (p) = datum; -- else -- SCM_WHASHSET (scm_source_whash, h, scm_make_srcprops (0, 0, datum, SCM_UNDEFINED, p)); -- } - else if (scm_is_eq (scm_sym_copy, key)) - { - if (SRCPROPSP (p)) -@@ -308,29 +323,18 @@ - { - scm_tc16_srcprops = scm_make_smob_type ("srcprops", 0); - scm_set_smob_mark (scm_tc16_srcprops, srcprops_mark); -- scm_set_smob_free (scm_tc16_srcprops, srcprops_free); - scm_set_smob_print (scm_tc16_srcprops, srcprops_print); - - scm_source_whash = scm_make_weak_key_hash_table (scm_from_int (2047)); - scm_c_define ("source-whash", scm_source_whash); - -+ scm_last_plist_filename -+ = scm_permanent_object (scm_cons (SCM_EOL, -+ scm_acons (SCM_EOL, SCM_EOL, SCM_EOL))); -+ - #include "libguile/srcprop.x" - } - --void --scm_finish_srcprop () --{ -- register scm_t_srcprops_chunk *ptr = srcprops_chunklist, *next; -- size_t n= sizeof (scm_t_srcprops_chunk) -- + sizeof (scm_t_srcprops) * (SRCPROPS_CHUNKSIZE - 1); -- while (ptr) -- { -- next = ptr->next; -- scm_gc_unregister_collectable_memory (ptr, n, "srcprops"); -- free ((char *) ptr); -- ptr = next; -- } --} - - /* - Local Variables: -Index: guile/libguile/srcprop.h -=================================================================== -RCS file: /sources/guile/guile/guile-core/guile/libguile/srcprop.h,v -retrieving revision 1.36.2.1 -diff -u -r1.36.2.1 srcprop.h ---- guile/libguile/srcprop.h 12 Feb 2006 13:42:51 -0000 1.36.2.1 -+++ guile/libguile/srcprop.h 13 Mar 2008 22:42:30 -0000 -@@ -49,46 +49,10 @@ - - /* {Source properties} - */ -- --SCM_API scm_t_bits scm_tc16_srcprops; -- --typedef struct scm_t_srcprops --{ -- unsigned long pos; -- SCM fname; -- SCM copy; -- SCM plist; --} scm_t_srcprops; -- --#define SRCPROPS_CHUNKSIZE 2047 /* Number of srcprops per chunk */ --typedef struct scm_t_srcprops_chunk --{ -- struct scm_t_srcprops_chunk *next; -- scm_t_srcprops srcprops[1]; --} scm_t_srcprops_chunk; -- -+#define SCM_PROCTRACEP(x) (scm_is_true (scm_procedure_property (x, scm_sym_trace))) - #define SCM_SOURCE_PROPERTY_FLAG_BREAK 1 - --#define SRCPROPSP(p) (SCM_SMOB_PREDICATE (scm_tc16_srcprops, (p))) --#define SRCPROPBRK(p) (SCM_SMOB_FLAGS (p) & SCM_SOURCE_PROPERTY_FLAG_BREAK) --#define SRCPROPPOS(p) ((scm_t_srcprops *) SCM_SMOB_DATA (p))->pos --#define SRCPROPLINE(p) (SRCPROPPOS(p) >> 12) --#define SRCPROPCOL(p) (SRCPROPPOS(p) & 0x0fffL) --#define SRCPROPFNAME(p) ((scm_t_srcprops *) SCM_SMOB_DATA (p))->fname --#define SRCPROPCOPY(p) ((scm_t_srcprops *) SCM_SMOB_DATA (p))->copy --#define SRCPROPPLIST(p) ((scm_t_srcprops *) SCM_SMOB_DATA (p))->plist --#define SETSRCPROPBRK(p) \ -- (SCM_SET_SMOB_FLAGS ((p), \ -- SCM_SMOB_FLAGS (p) | SCM_SOURCE_PROPERTY_FLAG_BREAK)) --#define CLEARSRCPROPBRK(p) \ -- (SCM_SET_SMOB_FLAGS ((p), \ -- SCM_SMOB_FLAGS (p) & ~SCM_SOURCE_PROPERTY_FLAG_BREAK)) --#define SRCPROPMAKPOS(l, c) (((l) << 12) + (c)) --#define SETSRCPROPPOS(p, l, c) (SRCPROPPOS (p) = SRCPROPMAKPOS (l, c)) --#define SETSRCPROPLINE(p, l) SETSRCPROPPOS (p, l, SRCPROPCOL (p)) --#define SETSRCPROPCOL(p, c) SETSRCPROPPOS (p, SRCPROPLINE (p), c) -- --#define PROCTRACEP(x) (scm_is_true (scm_procedure_property (x, scm_sym_trace))) -+SCM_API scm_t_bits scm_tc16_srcprops; - - SCM_API SCM scm_sym_filename; - SCM_API SCM scm_sym_copy; diff --git a/pkgs/development/interpreters/guile/test-tmpdir.patch b/pkgs/development/interpreters/guile/test-tmpdir.patch deleted file mode 100644 index 0fbad9a862c9..000000000000 --- a/pkgs/development/interpreters/guile/test-tmpdir.patch +++ /dev/null @@ -1,148 +0,0 @@ ---- guile/test-suite/standalone/test-unwind.c 2006-01-29 01:23:27.000000000 +0100 -+++ guile/test-suite/standalone/test-unwind.c 2008-03-13 14:11:20.000000000 +0100 -@@ -1,8 +1,55 @@ -+/* Copyright (C) 2004, 2005, 2008 Free Software Foundation, Inc. -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -+ */ -+ -+#if HAVE_CONFIG_H -+# include -+#endif -+ -+/* This blob per the Autoconf manual (under "Particular Functions"), updated -+ to match that of Gnulib. */ -+#ifndef alloca -+# if HAVE_ALLOCA_H -+# include -+# elif defined __GNUC__ -+# define alloca __builtin_alloca -+# elif defined _AIX -+# define alloca __alloca -+# elif defined _MSC_VER -+# include -+# define alloca _alloca -+# else -+# include -+# ifdef __cplusplus -+extern "C" -+# endif -+void *alloca (size_t); -+# endif -+#endif -+ - #include - #include - #include - #include - -+#ifdef HAVE_STRING_H -+# include -+#endif -+ -+ - void set_flag (void *data); - void func1 (void); - void func2 (void); -@@ -170,7 +217,17 @@ delete_file (void *data) - void - check_ports () - { -- char filename[] = "/tmp/check-ports.XXXXXX"; -+#define FILENAME_TEMPLATE "/check-ports.XXXXXX" -+ char *filename; -+ const char *tmpdir = getenv ("TMPDIR"); -+ -+ if (tmpdir == NULL) -+ tmpdir = "/tmp"; -+ -+ filename = (char *) alloca (strlen (tmpdir) + -+ sizeof (FILENAME_TEMPLATE) + 1); -+ strcpy (filename, tmpdir); -+ strcat (filename, FILENAME_TEMPLATE); - - if (mktemp (filename) == NULL) - exit (1); -@@ -205,6 +262,7 @@ check_ports () - } - } - scm_dynwind_end (); -+#undef FILENAME_TEMPLATE - } - - void ---- guile/test-suite/tests/socket.test 2007-06-26 00:36:43.000000000 +0200 -+++ guile/test-suite/tests/socket.test 2008-03-13 14:44:29.000000000 +0100 -@@ -1,6 +1,6 @@ - ;;;; socket.test --- test socket functions -*- scheme -*- - ;;;; --;;;; Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. -+;;;; Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. - ;;;; - ;;;; This library is free software; you can redistribute it and/or - ;;;; modify it under the terms of the GNU Lesser General Public -@@ -174,6 +174,15 @@ - ;;; AF_UNIX sockets and `make-socket-address' - ;;; - -+(define (temp-file-path) -+ ;; Return a temporary file path that honors `$TMPDIR', which `tmpnam' -+ ;; doesn't do. -+ (let ((dir (or (getenv "TMPDIR") "/tmp"))) -+ (string-append dir "/guile-test-socket-" -+ (number->string (current-time)) "-" -+ (number->string (random 100000))))) -+ -+ - (if (defined? 'AF_UNIX) - (with-test-prefix "AF_UNIX/SOCK_DGRAM" - -@@ -181,7 +190,7 @@ - - (let ((server-socket (socket AF_UNIX SOCK_DGRAM 0)) - (server-bound? #f) -- (path (tmpnam))) -+ (path (temp-file-path))) - - (pass-if "bind" - (catch 'system-error -@@ -196,7 +205,7 @@ - - (pass-if "bind/sockaddr" - (let* ((sock (socket AF_UNIX SOCK_STREAM 0)) -- (path (tmpnam)) -+ (path (temp-file-path)) - (sockaddr (make-socket-address AF_UNIX path))) - (catch 'system-error - (lambda () -@@ -233,7 +242,7 @@ - (server-bound? #f) - (server-listening? #f) - (server-pid #f) -- (path (tmpnam))) -+ (path (temp-file-path))) - - (pass-if "bind" - (catch 'system-error -@@ -248,7 +257,7 @@ - - (pass-if "bind/sockaddr" - (let* ((sock (socket AF_UNIX SOCK_STREAM 0)) -- (path (tmpnam)) -+ (path (temp-file-path)) - (sockaddr (make-socket-address AF_UNIX path))) - (catch 'system-error - (lambda () -