lol

* Added ATerm 2.8. Also removed some old versions and patches that were no longer in use.

* A patch for compiling the ATerm library with GCC 4.3. Without it,
the code for resizing ATerm tables gets stuck in an infinite loop
(http://bugzilla.sen.cwi.nl:8080/show_bug.cgi?id=841). The problem
is in this bit of code in hash.c, which tries to dynamically figure
out the maximum signed integer:

long try_long_max;
long long_max;
long delta;

try_long_max = 1;
do {
long_max = try_long_max;
try_long_max = long_max * 2;
} while (try_long_max > 0);

At -O2, GCC 4.3 determines that 1 * 2 * 2 * ... can never be <= 0,
and so it optimises this into a 1-instruction infinite loop:

0x0805a782 <keyPut+1282>: jmp 0x805a782 <keyPut+1282>

Quite beautiful really. ;-)

The fix is to use the LONG_MAX macro instead.

svn path=/nixpkgs/branches/stdenv-updates/; revision=13888

+118 -1001
-13
pkgs/development/libraries/aterm/2.3.nix
··· 1 - {stdenv, fetchurl}: 2 - 3 - stdenv.mkDerivation { 4 - name = "aterm-2.3.1"; 5 - configureFlags = "--with-gcc"; 6 - 7 - src = fetchurl { 8 - url = http://nixos.org/tarballs/aterm-2.3.1.tar.gz; 9 - md5 = "5a2d70acc45a9d301e0dba12fcaf77e7"; 10 - }; 11 - 12 - patches = [ ./aterm-alias-fix.patch ]; 13 - }
+8
pkgs/development/libraries/aterm/2.4.2-fixes.nix
··· 2 2 3 3 stdenv.mkDerivation { 4 4 name = "aterm-2.4.2-fixes-r2"; 5 + 5 6 src = fetchurl { 6 7 url = http://nixos.org/tarballs/aterm-2.4.2-fixes-r2.tar.bz2; 7 8 sha256 = "1w3bxdpc2hz29li5ssmdcz3x0fn47r7g62ns0v8nazxwf40vff4j"; 8 9 }; 10 + 11 + patches = [ 12 + # Fix for http://bugzilla.sen.cwi.nl:8080/show_bug.cgi?id=841 13 + ./max-long.patch 14 + ]; 15 + 9 16 doCheck = true; 17 + 10 18 meta = { 11 19 homepage = http://www.cwi.nl/htbin/sen1/twiki/bin/view/SEN1/ATerm; 12 20 license = "LGPL";
-17
pkgs/development/libraries/aterm/2.4.nix
··· 1 - {stdenv, fetchurl}: 2 - 3 - stdenv.mkDerivation { 4 - name = "aterm-2.4.2"; 5 - src = fetchurl { 6 - url = http://nixos.org/tarballs/aterm-2.4.2.tar.gz; 7 - md5 = "18617081dd112d85e6c4b1b552628114"; 8 - }; 9 - patches = 10 - [./aterm-alias-fix-2.patch] ++ 11 - (if stdenv ? isMinGW && stdenv.isMinGW then [./mingw-asm.patch] else []); 12 - meta = { 13 - homepage = http://www.cwi.nl/htbin/sen1/twiki/bin/view/SEN1/ATerm; 14 - license = "LGPL"; 15 - description = "Library for manipulation of term data structures in C"; 16 - }; 17 - }
+5
pkgs/development/libraries/aterm/2.5.nix
··· 8 8 md5 = "33ddcb1a229baf406ad1f603eb1d5995"; 9 9 }; 10 10 11 + patches = [ 12 + # Fix for http://bugzilla.sen.cwi.nl:8080/show_bug.cgi?id=841 13 + ./max-long.patch 14 + ]; 15 + 11 16 doCheck = true; 12 17 13 18 meta = {
-18
pkgs/development/libraries/aterm/2.7.nix
··· 1 - {stdenv, fetchurl}: 2 - 3 - stdenv.mkDerivation { 4 - name = "aterm-2.7"; 5 - 6 - src = fetchurl { 7 - url = http://homepages.cwi.nl/~daybuild/releases//aterm-2.7.tar.gz; 8 - sha256 = "0zhs0rncn4iankr70kbms64dwxm9i0956gs02dbw7ylx4mln8ynn"; 9 - }; 10 - 11 - doCheck = true; 12 - 13 - meta = { 14 - homepage = http://www.cwi.nl/htbin/sen1/twiki/bin/view/SEN1/ATerm; 15 - license = "LGPL"; 16 - description = "Library for manipulation of term data structures in C"; 17 - }; 18 - }
+23
pkgs/development/libraries/aterm/2.8.nix
··· 1 + {stdenv, fetchurl}: 2 + 3 + stdenv.mkDerivation { 4 + name = "aterm-2.8"; 5 + 6 + src = fetchurl { 7 + url = http://www.meta-environment.org/releases/aterm-2.8.tar.gz; 8 + sha256 = "1vq4qpmcww3n9v7bklgp7z1yqi9gmk6hcahqjqdzc5ksa089rdms"; 9 + }; 10 + 11 + patches = [ 12 + # Fix for http://bugzilla.sen.cwi.nl:8080/show_bug.cgi?id=841 13 + ./max-long.patch 14 + ]; 15 + 16 + doCheck = true; 17 + 18 + meta = { 19 + homepage = http://www.cwi.nl/htbin/sen1/twiki/bin/view/SEN1/ATerm; 20 + license = "LGPL"; 21 + description = "Library for manipulation of term data structures in C"; 22 + }; 23 + }
-224
pkgs/development/libraries/aterm/aterm-alias-fix-2.patch
··· 1 - diff -rc aterm-1142707243.10633/aterm/aterm.c aterm/aterm/aterm.c 2 - *** aterm-1142707243.10633/aterm/aterm.c 2006-02-08 11:35:28.000000000 +0100 3 - --- aterm/aterm/aterm.c 2006-04-25 17:10:52.000000000 +0200 4 - *************** 5 - *** 193,198 **** 6 - --- 193,199 ---- 7 - /* that have char == 2 bytes, and sizeof(header_type) == 2 */ 8 - assert(sizeof(header_type) == sizeof(ATerm *)); 9 - assert(sizeof(header_type) >= 4); 10 - + assert(sizeof(ATerm) == sizeof(MachineWord)); 11 - 12 - /*}}} */ 13 - /*{{{ Initialize buffer */ 14 - diff -rc aterm-1142707243.10633/aterm/memory.c aterm/aterm/memory.c 15 - *** aterm-1142707243.10633/aterm/memory.c 2006-03-09 15:02:56.000000000 +0100 16 - --- aterm/aterm/memory.c 2006-04-25 18:22:00.000000000 +0200 17 - *************** 18 - *** 119,130 **** 19 - hash_number(tmp,3)) 20 - */ 21 - 22 - #define HASHNUMBER3(t)\ 23 - ! FINISH(COMBINE(START(((MachineWord*)t)[0]), ((MachineWord*)t)[2])) 24 - 25 - #define HASHNUMBER4(t)\ 26 - ! FINISH(COMBINE(COMBINE(START(((MachineWord*)t)[0]), \ 27 - ! ((MachineWord*)t)[2]),((MachineWord*)t)[3])) 28 - 29 - #define HASHINT(val) \ 30 - FINISH(COMBINE(START( (AT_INT<<SHIFT_TYPE) ), val)) 31 - --- 119,171 ---- 32 - hash_number(tmp,3)) 33 - */ 34 - 35 - + /* The ATerm library use some heavy aliasing. For instance, the 36 - + various ATermXXX structures are referenced through MachineWord 37 - + arrays. This is not generally allowed by the C standard --- see 38 - + C99, section 6.5, clause 7. In particular, this means that you 39 - + cannot assign something through an ATermXXX pointer, e.g., 40 - + 41 - + protoAppl->header = header; 42 - + 43 - + and then read it through a MachineWord*, e.g., 44 - + 45 - + hnr = hash_number((ATerm) protoAppl, 2); 46 - + 47 - + (hash_number walks over the term by casting it to a MachineWord*). 48 - + 49 - + However, the same clause of the C standard also specifies that you 50 - + *can* read the memory location through a union type that contains 51 - + both the original type (e.g. ATermAppl) and the type used to read 52 - + the memory location (e.g. MachineWord). That's what we do 53 - + below: we have a union of all the types that occur in the various 54 - + ATerm types. We then read the "w" element of the union. The 55 - + compiler is not allowed to assume absence of aliasing with the 56 - + other types in the union. 57 - + 58 - + A better solution would be to hash the term through a character 59 - + pointer (since *any* memory location can be legally read as a 60 - + character), but I'm too lazy right now. Performance might also 61 - + suffer if we do that. */ 62 - + 63 - + typedef union 64 - + { 65 - + MachineWord w; 66 - + header_type header; 67 - + ATerm term; 68 - + ATermList list; 69 - + int i; 70 - + double d; 71 - + void* p; 72 - + } Aliaser; 73 - + 74 - + #define GET_WORD(t, n) (((Aliaser*) (((MachineWord*) t) + n))->w) 75 - + 76 - #define HASHNUMBER3(t)\ 77 - ! FINISH(COMBINE(START(GET_WORD(t, 0)), GET_WORD(t, 2))) 78 - 79 - #define HASHNUMBER4(t)\ 80 - ! FINISH(COMBINE(COMBINE(START(GET_WORD(t, 0)), \ 81 - ! GET_WORD(t, 2)), GET_WORD(t, 3))) 82 - 83 - #define HASHINT(val) \ 84 - FINISH(COMBINE(START( (AT_INT<<SHIFT_TYPE) ), val)) 85 - *************** 86 - *** 132,144 **** 87 - 88 - #endif /* HASHPEM */ 89 - 90 - ! #define PROTO_APPL_ARGS ((ATerm *) (protoTerm + ARG_OFFSET)) 91 - 92 - #define SET_PROTO_APPL_ARG(i, a) \ 93 - ! (PROTO_APPL_ARGS[(i)] = (a)) 94 - 95 - #define GET_PROTO_APPL_ARG(i) \ 96 - ! (PROTO_APPL_ARGS[(i)]) 97 - 98 - #define CHECK_TERM(t) \ 99 - assert((t) != NULL \ 100 - --- 173,185 ---- 101 - 102 - #endif /* HASHPEM */ 103 - 104 - ! #define PROTO_APPL_ARGS (protoTerm + ARG_OFFSET) 105 - 106 - #define SET_PROTO_APPL_ARG(i, a) \ 107 - ! (PROTO_APPL_ARGS[(i)] = (MachineWord) (a)) 108 - 109 - #define GET_PROTO_APPL_ARG(i) \ 110 - ! ((ATerm) PROTO_APPL_ARGS[(i)]) 111 - 112 - #define CHECK_TERM(t) \ 113 - assert((t) != NULL \ 114 - *************** 115 - *** 323,336 **** 116 - #else 117 - static HashNumber hash_number(ATerm t, int size) 118 - { 119 - - MachineWord *words = (MachineWord *) t; 120 - int i; 121 - HashNumber hnr; 122 - 123 - ! hnr = START(HIDE_AGE_MARK(words[0])); 124 - 125 - for (i=2; i<size; i++) { 126 - ! hnr = COMBINE(hnr, words[i]); 127 - } 128 - 129 - return FINISH(hnr); 130 - --- 364,376 ---- 131 - #else 132 - static HashNumber hash_number(ATerm t, int size) 133 - { 134 - int i; 135 - HashNumber hnr; 136 - 137 - ! hnr = START(HIDE_AGE_MARK(GET_WORD(t, 0))); 138 - 139 - for (i=2; i<size; i++) { 140 - ! hnr = COMBINE(hnr, GET_WORD(t, i)); 141 - } 142 - 143 - return FINISH(hnr); 144 - *************** 145 - *** 338,351 **** 146 - 147 - static HashNumber hash_number_anno(ATerm t, int size, ATerm anno) 148 - { 149 - - MachineWord *words = (MachineWord *) t; 150 - int i; 151 - HashNumber hnr; 152 - 153 - ! hnr = START(HIDE_AGE_MARK(words[0])); 154 - 155 - for (i=2; i<size; i++) { 156 - ! hnr = COMBINE(hnr, words[i]); 157 - } 158 - hnr = COMBINE(hnr, (MachineWord)anno); 159 - 160 - --- 378,390 ---- 161 - 162 - static HashNumber hash_number_anno(ATerm t, int size, ATerm anno) 163 - { 164 - int i; 165 - HashNumber hnr; 166 - 167 - ! hnr = START(HIDE_AGE_MARK(GET_WORD(t, 0))); 168 - 169 - for (i=2; i<size; i++) { 170 - ! hnr = COMBINE(hnr, GET_WORD(t, i)); 171 - } 172 - hnr = COMBINE(hnr, (MachineWord)anno); 173 - 174 - *************** 175 - *** 1639,1645 **** 176 - protoAppl->header = header; 177 - CHECK_HEADER(protoAppl->header); 178 - 179 - ! if (args != PROTO_APPL_ARGS) { 180 - for (i=0; i<arity; i++) { 181 - CHECK_TERM(args[i]); 182 - SET_PROTO_APPL_ARG(i, args[i]); 183 - --- 1678,1684 ---- 184 - protoAppl->header = header; 185 - CHECK_HEADER(protoAppl->header); 186 - 187 - ! if (args != (ATerm *) PROTO_APPL_ARGS) { 188 - for (i=0; i<arity; i++) { 189 - CHECK_TERM(args[i]); 190 - SET_PROTO_APPL_ARG(i, args[i]); 191 - *************** 192 - *** 1680,1686 **** 193 - hashtable[hnr] = cur; 194 - } 195 - 196 - ! if (args != PROTO_APPL_ARGS) { 197 - for (i=0; i<arity; i++) { 198 - protected_buffer[i] = NULL; 199 - } 200 - --- 1719,1725 ---- 201 - hashtable[hnr] = cur; 202 - } 203 - 204 - ! if (args != (ATerm *) PROTO_APPL_ARGS) { 205 - for (i=0; i<arity; i++) { 206 - protected_buffer[i] = NULL; 207 - } 208 - *************** 209 - *** 2144,2150 **** 210 - } 211 - SET_PROTO_APPL_ARG(n, arg); 212 - 213 - ! result = ATmakeApplArray(sym, PROTO_APPL_ARGS); 214 - annos = AT_getAnnotations((ATerm)appl); 215 - if (annos != NULL) { 216 - result = (ATermAppl)AT_setAnnotations((ATerm)result, annos); 217 - --- 2183,2189 ---- 218 - } 219 - SET_PROTO_APPL_ARG(n, arg); 220 - 221 - ! result = ATmakeApplArray(sym, (ATerm *) PROTO_APPL_ARGS); 222 - annos = AT_getAnnotations((ATerm)appl); 223 - if (annos != NULL) { 224 - result = (ATermAppl)AT_setAnnotations((ATerm)result, annos);
-445
pkgs/development/libraries/aterm/aterm-alias-fix.patch
··· 1 - diff -rc aterm-2.3.1-orig/aterm/aterm.c aterm-2.3.1/aterm/aterm.c 2 - *** aterm-2.3.1-orig/aterm/aterm.c 2004-06-01 10:29:01.000000000 +0200 3 - --- aterm-2.3.1/aterm/aterm.c 2005-05-02 18:32:52.000000000 +0200 4 - *************** 5 - *** 191,196 **** 6 - --- 191,197 ---- 7 - /* that have char == 2 bytes, and sizeof(header_type) == 2 */ 8 - assert(sizeof(header_type) == sizeof(ATerm *)); 9 - assert(sizeof(header_type) >= 4); 10 - + assert(sizeof(ATerm) == sizeof(MachineWord)); 11 - 12 - /*}}} */ 13 - /*{{{ Initialize buffer */ 14 - diff -rc aterm-2.3.1-orig/aterm/memory.c aterm-2.3.1/aterm/memory.c 15 - *** aterm-2.3.1-orig/aterm/memory.c 2004-06-09 10:52:33.000000000 +0200 16 - --- aterm-2.3.1/aterm/memory.c 2005-05-02 18:32:52.000000000 +0200 17 - *************** 18 - *** 176,182 **** 19 - * Static arrays are not guaranteed to be sizeof(double)-aligned. 20 - */ 21 - static MachineWord *protoTerm = NULL; 22 - - static ATerm *arg_buffer = NULL; 23 - 24 - static ATerm protected_buffer[MAX_ARITY] = { NULL }; 25 - 26 - --- 176,181 ---- 27 - *************** 28 - *** 495,501 **** 29 - HashNumber hnr; 30 - 31 - protoTerm = (MachineWord *) calloc(MAX_TERM_SIZE, sizeof(MachineWord)); 32 - - arg_buffer = (ATerm *) (protoTerm + 2); 33 - 34 - /*{{{ Analyze arguments */ 35 - 36 - --- 494,499 ---- 37 - *************** 38 - *** 1032,1043 **** 39 - va_list args; 40 - 41 - protoAppl = (ATermAppl) protoTerm; 42 - - 43 - va_start(args, sym); 44 - for (i=0; i<arity; i++) { 45 - ! arg_buffer[i] = va_arg(args, ATerm); 46 - ! protected_buffer[i] = arg_buffer[i]; 47 - ! CHECK_TERM(arg_buffer[i]); 48 - } 49 - va_end(args); 50 - 51 - --- 1030,1040 ---- 52 - va_list args; 53 - 54 - protoAppl = (ATermAppl) protoTerm; 55 - va_start(args, sym); 56 - for (i=0; i<arity; i++) { 57 - ! protected_buffer[i] = va_arg(args, ATerm); 58 - ! protoTerm[ARG_OFFSET + i] = (MachineWord) protected_buffer[i]; 59 - ! CHECK_TERM(protected_buffer[i]); 60 - } 61 - va_end(args); 62 - 63 - *************** 64 - *** 1055,1061 **** 65 - appl = (ATermAppl)cur; 66 - found = ATtrue; 67 - for (i=0; i<arity; i++) { 68 - ! if (!ATisEqual(ATgetArgument(appl, i), arg_buffer[i])) { 69 - found = ATfalse; 70 - break; 71 - } 72 - --- 1052,1058 ---- 73 - appl = (ATermAppl)cur; 74 - found = ATtrue; 75 - for (i=0; i<arity; i++) { 76 - ! if (!ATisEqual(ATgetArgument(appl, i), protoTerm[ARG_OFFSET + i])) { 77 - found = ATfalse; 78 - break; 79 - } 80 - *************** 81 - *** 1073,1079 **** 82 - cur->header = header; 83 - CHECK_HEADER(cur->header); 84 - for (i=0; i<arity; i++) { 85 - ! ATgetArgument(cur, i) = arg_buffer[i]; 86 - CHECK_ARGUMENT(cur, i); 87 - } 88 - cur->next = hashtable[hnr]; 89 - --- 1070,1076 ---- 90 - cur->header = header; 91 - CHECK_HEADER(cur->header); 92 - for (i=0; i<arity; i++) { 93 - ! ATgetArgument(cur, i) = (ATerm) protoTerm[ARG_OFFSET + i]; 94 - CHECK_ARGUMENT(cur, i); 95 - } 96 - cur->next = hashtable[hnr]; 97 - *************** 98 - *** 1164,1170 **** 99 - protoAppl = (ATermAppl) protoTerm; 100 - protoAppl->header = header; 101 - CHECK_HEADER(protoAppl->header); 102 - ! arg_buffer[0] = arg0; 103 - hnr = HASHNUMBER3((ATerm) protoAppl); 104 - 105 - prev = NULL; 106 - --- 1161,1167 ---- 107 - protoAppl = (ATermAppl) protoTerm; 108 - protoAppl->header = header; 109 - CHECK_HEADER(protoAppl->header); 110 - ! protoTerm[ARG_OFFSET + 0] = (MachineWord) arg0; 111 - hnr = HASHNUMBER3((ATerm) protoAppl); 112 - 113 - prev = NULL; 114 - *************** 115 - *** 1225,1232 **** 116 - protoAppl = (ATermAppl) protoTerm; 117 - protoAppl->header = header; 118 - CHECK_HEADER(protoAppl->header); 119 - ! arg_buffer[0] = arg0; 120 - ! arg_buffer[1] = arg1; 121 - hnr = HASHNUMBER4((ATerm) protoAppl); 122 - 123 - prev = NULL; 124 - --- 1222,1229 ---- 125 - protoAppl = (ATermAppl) protoTerm; 126 - protoAppl->header = header; 127 - CHECK_HEADER(protoAppl->header); 128 - ! protoTerm[ARG_OFFSET + 0] = (MachineWord) arg0; 129 - ! protoTerm[ARG_OFFSET + 1] = (MachineWord) arg1; 130 - hnr = HASHNUMBER4((ATerm) protoAppl); 131 - 132 - prev = NULL; 133 - *************** 134 - *** 1287,1295 **** 135 - protoAppl = (ATermAppl) protoTerm; 136 - protoAppl->header = header; 137 - CHECK_HEADER(protoAppl->header); 138 - ! arg_buffer[0] = arg0; 139 - ! arg_buffer[1] = arg1; 140 - ! arg_buffer[2] = arg2; 141 - hnr = hash_number((ATerm) protoAppl, 5); 142 - 143 - cur = hashtable[hnr & table_mask]; 144 - --- 1284,1292 ---- 145 - protoAppl = (ATermAppl) protoTerm; 146 - protoAppl->header = header; 147 - CHECK_HEADER(protoAppl->header); 148 - ! protoTerm[ARG_OFFSET + 0] = (MachineWord) arg0; 149 - ! protoTerm[ARG_OFFSET + 1] = (MachineWord) arg1; 150 - ! protoTerm[ARG_OFFSET + 2] = (MachineWord) arg2; 151 - hnr = hash_number((ATerm) protoAppl, 5); 152 - 153 - cur = hashtable[hnr & table_mask]; 154 - *************** 155 - *** 1347,1356 **** 156 - protoAppl = (ATermAppl) protoTerm; 157 - protoAppl->header = header; 158 - CHECK_HEADER(protoAppl->header); 159 - ! arg_buffer[0] = arg0; 160 - ! arg_buffer[1] = arg1; 161 - ! arg_buffer[2] = arg2; 162 - ! arg_buffer[3] = arg3; 163 - hnr = hash_number((ATerm) protoAppl, 6); 164 - 165 - cur = hashtable[hnr & table_mask]; 166 - --- 1344,1353 ---- 167 - protoAppl = (ATermAppl) protoTerm; 168 - protoAppl->header = header; 169 - CHECK_HEADER(protoAppl->header); 170 - ! protoTerm[ARG_OFFSET + 0] = (MachineWord) arg0; 171 - ! protoTerm[ARG_OFFSET + 1] = (MachineWord) arg1; 172 - ! protoTerm[ARG_OFFSET + 2] = (MachineWord) arg2; 173 - ! protoTerm[ARG_OFFSET + 3] = (MachineWord) arg3; 174 - hnr = hash_number((ATerm) protoAppl, 6); 175 - 176 - cur = hashtable[hnr & table_mask]; 177 - *************** 178 - *** 1411,1421 **** 179 - protoAppl = (ATermAppl) protoTerm; 180 - protoAppl->header = header; 181 - CHECK_HEADER(protoAppl->header); 182 - ! arg_buffer[0] = arg0; 183 - ! arg_buffer[1] = arg1; 184 - ! arg_buffer[2] = arg2; 185 - ! arg_buffer[3] = arg3; 186 - ! arg_buffer[4] = arg4; 187 - hnr = hash_number((ATerm) protoAppl, 7); 188 - 189 - cur = hashtable[hnr & table_mask]; 190 - --- 1408,1418 ---- 191 - protoAppl = (ATermAppl) protoTerm; 192 - protoAppl->header = header; 193 - CHECK_HEADER(protoAppl->header); 194 - ! protoTerm[ARG_OFFSET + 0] = (MachineWord) arg0; 195 - ! protoTerm[ARG_OFFSET + 1] = (MachineWord) arg1; 196 - ! protoTerm[ARG_OFFSET + 2] = (MachineWord) arg2; 197 - ! protoTerm[ARG_OFFSET + 3] = (MachineWord) arg3; 198 - ! protoTerm[ARG_OFFSET + 4] = (MachineWord) arg4; 199 - hnr = hash_number((ATerm) protoAppl, 7); 200 - 201 - cur = hashtable[hnr & table_mask]; 202 - *************** 203 - *** 1479,1490 **** 204 - protoAppl = (ATermAppl) protoTerm; 205 - protoAppl->header = header; 206 - CHECK_HEADER(protoAppl->header); 207 - ! arg_buffer[0] = arg0; 208 - ! arg_buffer[1] = arg1; 209 - ! arg_buffer[2] = arg2; 210 - ! arg_buffer[3] = arg3; 211 - ! arg_buffer[4] = arg4; 212 - ! arg_buffer[5] = arg5; 213 - hnr = hash_number((ATerm) protoAppl, 8); 214 - 215 - cur = hashtable[hnr & table_mask]; 216 - --- 1476,1487 ---- 217 - protoAppl = (ATermAppl) protoTerm; 218 - protoAppl->header = header; 219 - CHECK_HEADER(protoAppl->header); 220 - ! protoTerm[ARG_OFFSET + 0] = (MachineWord) arg0; 221 - ! protoTerm[ARG_OFFSET + 1] = (MachineWord) arg1; 222 - ! protoTerm[ARG_OFFSET + 2] = (MachineWord) arg2; 223 - ! protoTerm[ARG_OFFSET + 3] = (MachineWord) arg3; 224 - ! protoTerm[ARG_OFFSET + 4] = (MachineWord) arg4; 225 - ! protoTerm[ARG_OFFSET + 5] = (MachineWord) arg5; 226 - hnr = hash_number((ATerm) protoAppl, 8); 227 - 228 - cur = hashtable[hnr & table_mask]; 229 - *************** 230 - *** 1552,1558 **** 231 - CHECK_HEADER(protoAppl->header); 232 - 233 - for (i=0; i<arity; i++) { 234 - ! arg_buffer[i] = ATgetFirst(args); 235 - args = ATgetNext(args); 236 - } 237 - 238 - --- 1549,1555 ---- 239 - CHECK_HEADER(protoAppl->header); 240 - 241 - for (i=0; i<arity; i++) { 242 - ! protoTerm[ARG_OFFSET + i] = (MachineWord) ATgetFirst(args); 243 - args = ATgetNext(args); 244 - } 245 - 246 - *************** 247 - *** 1567,1573 **** 248 - found = ATtrue; 249 - for(i=0; i<arity; i++) 250 - { 251 - ! if(!ATisEqual(ATgetArgument(appl, i), arg_buffer[i])) 252 - { 253 - found = ATfalse; 254 - break; 255 - --- 1564,1570 ---- 256 - found = ATtrue; 257 - for(i=0; i<arity; i++) 258 - { 259 - ! if(!ATisEqual(ATgetArgument(appl, i), protoTerm[ARG_OFFSET + i])) 260 - { 261 - found = ATfalse; 262 - break; 263 - *************** 264 - *** 1587,1593 **** 265 - cur->header = header; 266 - CHECK_HEADER(cur->header); 267 - for (i=0; i<arity; i++) { 268 - ! ATgetArgument(cur, i) = arg_buffer[i]; 269 - CHECK_ARGUMENT(cur, i); 270 - } 271 - cur->next = hashtable[hnr]; 272 - --- 1584,1590 ---- 273 - cur->header = header; 274 - CHECK_HEADER(cur->header); 275 - for (i=0; i<arity; i++) { 276 - ! ATgetArgument(cur, i) = (ATerm) protoTerm[ARG_OFFSET + i]; 277 - CHECK_ARGUMENT(cur, i); 278 - } 279 - cur->next = hashtable[hnr]; 280 - *************** 281 - *** 1623,1632 **** 282 - protoAppl->header = header; 283 - CHECK_HEADER(protoAppl->header); 284 - 285 - ! if (args != arg_buffer) { 286 - for (i=0; i<arity; i++) { 287 - CHECK_TERM(args[i]); 288 - ! arg_buffer[i] = args[i]; 289 - protected_buffer[i] = args[i]; 290 - } 291 - } 292 - --- 1620,1629 ---- 293 - protoAppl->header = header; 294 - CHECK_HEADER(protoAppl->header); 295 - 296 - ! if (args != (ATerm *) (protoTerm + ARG_OFFSET)) { 297 - for (i=0; i<arity; i++) { 298 - CHECK_TERM(args[i]); 299 - ! protoTerm[ARG_OFFSET + i] = (MachineWord) args[i]; 300 - protected_buffer[i] = args[i]; 301 - } 302 - } 303 - *************** 304 - *** 1639,1645 **** 305 - appl = (ATermAppl)cur; 306 - found = ATtrue; 307 - for(i=0; i<arity; i++) { 308 - ! if(!ATisEqual(ATgetArgument(appl, i), arg_buffer[i])) { 309 - found = ATfalse; 310 - break; 311 - } 312 - --- 1636,1642 ---- 313 - appl = (ATermAppl)cur; 314 - found = ATtrue; 315 - for(i=0; i<arity; i++) { 316 - ! if(!ATisEqual(ATgetArgument(appl, i), protoTerm[ARG_OFFSET + i])) { 317 - found = ATfalse; 318 - break; 319 - } 320 - *************** 321 - *** 1657,1670 **** 322 - cur->header = header; 323 - CHECK_HEADER(cur->header); 324 - for (i=0; i<arity; i++) { 325 - ! ATgetArgument(cur, i) = arg_buffer[i]; 326 - CHECK_ARGUMENT(cur, i); 327 - } 328 - cur->next = hashtable[hnr]; 329 - hashtable[hnr] = cur; 330 - } 331 - 332 - ! if (args != arg_buffer) { 333 - for (i=0; i<arity; i++) { 334 - protected_buffer[i] = NULL; 335 - } 336 - --- 1654,1667 ---- 337 - cur->header = header; 338 - CHECK_HEADER(cur->header); 339 - for (i=0; i<arity; i++) { 340 - ! ATgetArgument(cur, i) = (ATerm) protoTerm[ARG_OFFSET + i]; 341 - CHECK_ARGUMENT(cur, i); 342 - } 343 - cur->next = hashtable[hnr]; 344 - hashtable[hnr] = cur; 345 - } 346 - 347 - ! if (args != (ATerm *) (protoTerm + ARG_OFFSET)) { 348 - for (i=0; i<arity; i++) { 349 - protected_buffer[i] = NULL; 350 - } 351 - *************** 352 - *** 2122,2132 **** 353 - assert(n >= 0 && n < arity); 354 - 355 - for (i=0; i<arity; i++) { 356 - ! arg_buffer[i] = ATgetArgument(appl, i); 357 - } 358 - ! arg_buffer[n] = arg; 359 - 360 - ! result = ATmakeApplArray(sym, arg_buffer); 361 - annos = AT_getAnnotations((ATerm)appl); 362 - if (annos != NULL) { 363 - result = (ATermAppl)AT_setAnnotations((ATerm)result, annos); 364 - --- 2119,2129 ---- 365 - assert(n >= 0 && n < arity); 366 - 367 - for (i=0; i<arity; i++) { 368 - ! protoTerm[ARG_OFFSET + i] = (MachineWord) ATgetArgument(appl, i); 369 - } 370 - ! protoTerm[ARG_OFFSET + n] = (MachineWord) arg; 371 - 372 - ! result = ATmakeApplArray(sym, (ATerm *) (protoTerm + ARG_OFFSET)); 373 - annos = AT_getAnnotations((ATerm)appl); 374 - if (annos != NULL) { 375 - result = (ATermAppl)AT_setAnnotations((ATerm)result, annos); 376 - diff -rc aterm-2.3.1-orig/configure aterm-2.3.1/configure 377 - *** aterm-2.3.1-orig/configure 2004-12-01 23:03:59.000000000 +0100 378 - --- aterm-2.3.1/configure 2005-05-02 18:36:24.000000000 +0200 379 - *************** 380 - *** 2890,2896 **** 381 - INCL_PROF="" 382 - 383 - CC_NS=gcc 384 - ! CFLAGS_NS="-Wall -DNDEBUG -O -DXGC_VERBOSE -DWITH_STATS" # " -O2" disabled due to gcc optimizer bugs 385 - LFLAGS_NS="" 386 - DEFS_NS="\$(DEFS) -DNO_SHARING" 387 - INCL_NS="" 388 - --- 2890,2896 ---- 389 - INCL_PROF="" 390 - 391 - CC_NS=gcc 392 - ! CFLAGS_NS="-Wall -DNDEBUG -O3 -DXGC_VERBOSE -DWITH_STATS" # " -O2" disabled due to gcc optimizer bugs 393 - LFLAGS_NS="" 394 - DEFS_NS="\$(DEFS) -DNO_SHARING" 395 - INCL_NS="" 396 - *************** 397 - *** 3379,3385 **** 398 - CFLAGS=${withval} 399 - else 400 - if test "a${GCC}" = "ayes"; then 401 - ! CFLAGS="-Wall -DNDEBUG -O -DXGC_VERBOSE -DXHASHPEM -DWITH_STATS" # " -O2" disabled due to gcc optimizer bugs 402 - fi; 403 - 404 - fi; 405 - --- 3379,3385 ---- 406 - CFLAGS=${withval} 407 - else 408 - if test "a${GCC}" = "ayes"; then 409 - ! CFLAGS="-Wall -DNDEBUG -O3 -DXGC_VERBOSE -DXHASHPEM -DWITH_STATS" # " -O2" disabled due to gcc optimizer bugs 410 - fi; 411 - 412 - fi; 413 - diff -rc aterm-2.3.1-orig/README aterm-2.3.1/README 414 - *** aterm-2.3.1-orig/README 2002-01-16 14:19:35.000000000 +0100 415 - --- aterm-2.3.1/README 2005-05-02 18:37:48.000000000 +0200 416 - *************** 417 - *** 1,27 **** 418 - 419 - - ***NOTE on COMPILER OPTIMIZATIONS: 420 - - 421 - - (added Wed, 16 Jan 2002, <jong@cwi.nl>) 422 - - 423 - - Due to several pending issues with the optimizer in the GNU C Compiler 424 - - (most noticable to everyone using gcc version over 2.95), we strongly 425 - - advise AGAINST passing gcc any of its '-O' optimization flags. 426 - - 427 - - More information on GCC optimization bugs can be found at: 428 - - http://gcc.gnu.org/cgi-bin/gnatsweb.pl?database=gcc&cmd=query 429 - - 430 - - and subsequently selecting the Category: 431 - - "optimization -- Issues related to optimization" 432 - - 433 - - As a result, the default configuration of the ATerm Library does not 434 - - pass any optimizer flags to gcc anymore. Should you wish to experiment 435 - - with specific compiler flags anyway, you can use the "--with-cflags" 436 - - configure option. Your mileage may vary from the stress-test failing, 437 - - to coredumps and spontaneous aborts in your program. 438 - - 439 - - 440 - - 441 - - 442 - README with this version of the aterm library. 443 - ============================================== 444 - 445 - --- 1,4 ----
+77
pkgs/development/libraries/aterm/max-long.patch
··· 1 + diff -rc aterm-2.8-orig/aterm/hash.c aterm-2.8/aterm/hash.c 2 + *** aterm-2.8-orig/aterm/hash.c 2008-11-10 13:54:22.000000000 +0100 3 + --- aterm-2.8/aterm/hash.c 2009-01-27 18:14:14.000000000 +0100 4 + *************** 5 + *** 93,146 **** 6 + } 7 + 8 + /*}}} */ 9 + - /*{{{ static long calc_long_max() */ 10 + - static long calc_long_max() 11 + - { 12 + - long try_long_max; 13 + - long long_max; 14 + - long delta; 15 + - 16 + - try_long_max = 1; 17 + - do { 18 + - long_max = try_long_max; 19 + - try_long_max = long_max * 2; 20 + - } while (try_long_max > 0); 21 + - 22 + - delta = long_max; 23 + - while (delta > 1) { 24 + - while (long_max + delta < 0) { 25 + - delta /= 2; 26 + - } 27 + - long_max += delta; 28 + - } 29 + - 30 + - return long_max; 31 + - 32 + - } 33 + - /*}}} */ 34 + /*{{{ static long calculateNewSize(sizeMinus1, nrdel, nrentries) */ 35 + 36 + static long calculateNewSize 37 + (long sizeMinus1, long nr_deletions, long nr_entries) 38 + { 39 + - 40 + - /* Hack: LONG_MAX (limits.h) is often unreliable, we need to find 41 + - * out the maximum possible value of a signed long dynamically. 42 + - */ 43 + - static long st_long_max = 0; 44 + - 45 + - /* the resulting length has the form 2^k-1 */ 46 + - 47 + if (nr_deletions >= nr_entries/2) { 48 + return sizeMinus1; 49 + } 50 + 51 + ! if (st_long_max == 0) { 52 + ! st_long_max = calc_long_max(); 53 + ! } 54 + ! 55 + ! if (sizeMinus1 > st_long_max / 2) { 56 + ! return st_long_max-1; 57 + } 58 + 59 + return (2*sizeMinus1)+1; 60 + --- 93,109 ---- 61 + } 62 + 63 + /*}}} */ 64 + /*{{{ static long calculateNewSize(sizeMinus1, nrdel, nrentries) */ 65 + 66 + static long calculateNewSize 67 + (long sizeMinus1, long nr_deletions, long nr_entries) 68 + { 69 + if (nr_deletions >= nr_entries/2) { 70 + return sizeMinus1; 71 + } 72 + 73 + ! if (sizeMinus1 > LONG_MAX / 2) { 74 + ! return LONG_MAX-1; 75 + } 76 + 77 + return (2*sizeMinus1)+1;
-269
pkgs/development/libraries/aterm/mingw-asm.patch
··· 1 - diff -urN aterm-2.4.2-old/aterm/gc.c aterm-2.4.2/aterm/gc.c 2 - --- aterm-2.4.2-old/aterm/gc.c 2004-06-01 10:29:02.000000000 +0200 3 - +++ aterm-2.4.2/aterm/gc.c 2006-08-17 15:17:28.000000000 +0200 4 - @@ -230,71 +230,17 @@ 5 - AFun oddSym; 6 - #endif 7 - 8 - -#ifdef WIN32 9 - - 10 - - unsigned int r_eax, r_ebx, r_ecx, r_edx, \ 11 - - r_esi, r_edi, r_esp, r_ebp; 12 - - ATerm reg[8], *real_term; 13 - - 14 - - __asm { 15 - - /* Get the registers into local variables to check them 16 - - for aterms later. */ 17 - - mov r_eax, eax 18 - - mov r_ebx, ebx 19 - - mov r_ecx, ecx 20 - - mov r_edx, edx 21 - - mov r_esi, esi 22 - - mov r_edi, edi 23 - - mov r_esp, esp 24 - - mov r_ebp, ebp 25 - - } 26 - - /* Put the register-values into an array */ 27 - - reg[0] = (ATerm) r_eax; 28 - - reg[1] = (ATerm) r_ebx; 29 - - reg[2] = (ATerm) r_ecx; 30 - - reg[3] = (ATerm) r_edx; 31 - - reg[4] = (ATerm) r_esi; 32 - - reg[5] = (ATerm) r_edi; 33 - - reg[6] = (ATerm) r_esp; 34 - - reg[7] = (ATerm) r_ebp; 35 - - 36 - - for(i=0; i<8; i++) { 37 - - real_term = AT_isInsideValidTerm(reg[i]); 38 - - if (real_term != NULL) { 39 - - AT_markTerm(real_term); 40 - - } 41 - - if (AT_isValidSymbol((Symbol)reg[i])) { 42 - - AT_markSymbol((Symbol)reg[i]); 43 - - } 44 - - } 45 - - 46 - - /* The register variables are on the stack aswell 47 - - I set them to zero so they won't be processed again when 48 - - the stack is traversed. The reg-array is also in the stack 49 - - but that will be adjusted later */ 50 - - r_eax = 0; 51 - - r_ebx = 0; 52 - - r_ecx = 0; 53 - - r_edx = 0; 54 - - r_esi = 0; 55 - - r_edi = 0; 56 - - r_esp = 0; 57 - - r_ebp = 0; 58 - - 59 - -#else 60 - - sigjmp_buf env; 61 - + jmp_buf env; 62 - 63 - /* Traverse possible register variables */ 64 - - sigsetjmp(env,0); 65 - + setjmp(env); 66 - 67 - start = (ATerm *)env; 68 - - stop = ((ATerm *)(((char *)env) + sizeof(sigjmp_buf))); 69 - + stop = ((ATerm *)(((char *)env) + sizeof(jmp_buf))); 70 - mark_memory(start, stop); 71 - -#endif 72 - 73 - stackTop = stack_top(); 74 - 75 - - 76 - start = MIN(stackTop, stackBot); 77 - stop = MAX(stackTop, stackBot); 78 - 79 - @@ -343,67 +289,14 @@ 80 - AFun oddSym; 81 - #endif 82 - 83 - -#ifdef WIN32 84 - - 85 - - unsigned int r_eax, r_ebx, r_ecx, r_edx, \ 86 - - r_esi, r_edi, r_esp, r_ebp; 87 - - ATerm reg[8], *real_term; 88 - - 89 - - __asm { 90 - - /* Get the registers into local variables to check them 91 - - for aterms later. */ 92 - - mov r_eax, eax 93 - - mov r_ebx, ebx 94 - - mov r_ecx, ecx 95 - - mov r_edx, edx 96 - - mov r_esi, esi 97 - - mov r_edi, edi 98 - - mov r_esp, esp 99 - - mov r_ebp, ebp 100 - - } 101 - - /* Put the register-values into an array */ 102 - - reg[0] = (ATerm) r_eax; 103 - - reg[1] = (ATerm) r_ebx; 104 - - reg[2] = (ATerm) r_ecx; 105 - - reg[3] = (ATerm) r_edx; 106 - - reg[4] = (ATerm) r_esi; 107 - - reg[5] = (ATerm) r_edi; 108 - - reg[6] = (ATerm) r_esp; 109 - - reg[7] = (ATerm) r_ebp; 110 - - 111 - - for(i=0; i<8; i++) { 112 - - real_term = AT_isInsideValidTerm(reg[i]); 113 - - if (real_term != NULL) { 114 - - AT_markTerm_young(real_term); 115 - - } 116 - - if (AT_isValidSymbol((Symbol)reg[i])) { 117 - - AT_markSymbol_young((Symbol)reg[i]); 118 - - } 119 - - } 120 - - 121 - - /* The register variables are on the stack aswell 122 - - I set them to zero so they won't be processed again when 123 - - the stack is traversed. The reg-array is also in the stack 124 - - but that will be adjusted later */ 125 - - r_eax = 0; 126 - - r_ebx = 0; 127 - - r_ecx = 0; 128 - - r_edx = 0; 129 - - r_esi = 0; 130 - - r_edi = 0; 131 - - r_esp = 0; 132 - - r_ebp = 0; 133 - - 134 - -#else 135 - - sigjmp_buf env; 136 - + jmp_buf env; 137 - 138 - /* Traverse possible register variables */ 139 - - sigsetjmp(env,0); 140 - + setjmp(env); 141 - 142 - start = (ATerm *)env; 143 - - stop = ((ATerm *)(((char *)env) + sizeof(sigjmp_buf))); 144 - + stop = ((ATerm *)(((char *)env) + sizeof(jmp_buf))); 145 - mark_memory_young(start, stop); 146 - -#endif 147 - 148 - stackTop = stack_top(); 149 - start = MIN(stackTop, stackBot); 150 - diff -urN aterm-2.4.2-old/test/randgen.c aterm-2.4.2/test/randgen.c 151 - --- aterm-2.4.2-old/test/randgen.c 2002-06-06 10:16:29.000000000 +0200 152 - +++ aterm-2.4.2/test/randgen.c 2006-08-17 16:09:47.000000000 +0200 153 - @@ -14,8 +14,13 @@ 154 - #if HAVE_LRAND48 && HAVE_SRAND48 155 - /* Use the rand48() suite */ 156 - #else 157 - -#define lrand48() random() 158 - -#define srand48(s) srandom(s) 159 - +# ifdef WIN32 160 - +# define lrand48() rand() 161 - +# define srand48(s) srand(s) 162 - +# else 163 - +# define lrand48() random() 164 - +# define srand48(s) srandom(s) 165 - +# endif 166 - #endif 167 - 168 - /*}}} */ 169 - diff -urN aterm-2.4.2-old/test/termstats.c aterm-2.4.2/test/termstats.c 170 - --- aterm-2.4.2-old/test/termstats.c 2001-10-09 16:35:21.000000000 +0200 171 - +++ aterm-2.4.2/test/termstats.c 2006-08-17 17:15:53.000000000 +0200 172 - @@ -1,7 +1,9 @@ 173 - #include <stdio.h> 174 - #include <sys/types.h> 175 - #include <sys/stat.h> 176 - +#ifndef WIN32 177 - #include <sys/times.h> 178 - +#endif 179 - #include <time.h> 180 - #include <limits.h> 181 - 182 - @@ -14,7 +16,9 @@ 183 - 184 - int main(int argc, char *argv[]) 185 - { 186 - +#ifndef WIN32 187 - struct tms start, end; 188 - +#endif 189 - ATerm top = NULL; 190 - ATerm t, t2; 191 - ATbool dobafsize = ATfalse; 192 - @@ -29,16 +33,24 @@ 193 - 194 - ATinit(argc, argv, &top); 195 - 196 - +#ifndef WIN32 197 - times(&start); 198 - +#endif 199 - t = ATreadFromFile(stdin); 200 - +#ifndef WIN32 201 - times(&end); 202 - textread = end.tms_utime-start.tms_utime; 203 - +#endif 204 - 205 - tmp_file = tmpfile(); 206 - +#ifndef WIN32 207 - times(&start); 208 - +#endif 209 - ATwriteToTextFile(t, tmp_file); 210 - +#ifndef WIN32 211 - times(&end); 212 - textwrite = end.tms_utime-start.tms_utime; 213 - +#endif 214 - 215 - subterms = AT_calcSubterms(t); 216 - symbols = AT_calcUniqueSymbols(t); 217 - @@ -56,37 +68,52 @@ 218 - printf(" bytes p/node : %8.2f\n", ((double)incore)/((double)subterms)); 219 - printf("text size : %8d\n",textsize); 220 - printf(" bytes p/node : %8.2f\n", ((double)textsize)/((double)subterms)); 221 - + 222 - +#ifndef WIN32 223 - printf("text read time : %8.2fs\n", ((double)textread)/((double)CLK_TCK)); 224 - printf(" per node : %8.2fus\n", ((double)textread*1000000.0/subterms)/((double)CLK_TCK)); 225 - printf("text write time : %8.2fs\n", ((double)textwrite)/((double)CLK_TCK)); 226 - printf(" per node : %8.2fus\n", ((double)textwrite*1000000.0/subterms)/((double)CLK_TCK)); 227 - +#endif 228 - 229 - if(dobafsize) { 230 - struct stat stats; 231 - +#ifndef WIN32 232 - clock_t bafread, bafwrite; 233 - +#endif 234 - FILE *file = fopen("/tmp/test.baf", "wb+"); 235 - int fd = fileno(file); 236 - 237 - +#ifndef WIN32 238 - times(&start); 239 - +#endif 240 - ATwriteToBinaryFile(t, file); 241 - +#ifndef WIN32 242 - times(&end); 243 - bafwrite = end.tms_utime-start.tms_utime; 244 - +#endif 245 - fflush(file); 246 - fstat(fd, &stats); 247 - bafsize = (int)stats.st_size; 248 - fseek(file, 0, SEEK_SET); 249 - +#ifndef WIN32 250 - times(&start); 251 - +#endif 252 - t2 = ATreadFromBinaryFile(file); 253 - +#ifndef WIN32 254 - times(&end); 255 - bafread = end.tms_utime-start.tms_utime; 256 - +#endif 257 - printf("baf size : %8d\n", bafsize); 258 - printf(" bytes p/node : %8.2f\n", ((double)bafsize)/((double)subterms)); 259 - printf(" bits p/node : %8.2f\n", ((double)bafsize*8)/((double)subterms)); 260 - printf(" comp.wrs.text : %8.2f%%\n", 100.0-((double)bafsize*100)/((textsize))); 261 - +#ifndef WIN32 262 - printf("baf write time : %8.2fs\n", ((double)bafwrite)/((double)CLK_TCK)); 263 - printf(" per node : %8.2fus\n", ((double)bafwrite*1000000.0/subterms)/((double)CLK_TCK)); 264 - printf("baf read time : %8.2fs\n", ((double)bafread)/((double)CLK_TCK)); 265 - printf(" per node : %8.2fus\n", ((double)bafread*1000000.0/subterms)/((double)CLK_TCK)); 266 - +#endif 267 - fclose(file); 268 - } 269 -
+5 -15
pkgs/top-level/all-packages.nix
··· 1945 1945 }; 1946 1946 1947 1947 transformers = import ../development/compilers/transformers { 1948 - inherit fetchurl pkgconfig sdf stlport; 1949 - aterm = aterm23; 1948 + inherit fetchurl pkgconfig sdf stlport aterm; 1950 1949 1951 1950 stdenv = overrideGCC (overrideInStdenv stdenv [gnumake380]) gcc34; 1952 1951 1953 1952 strategoxt = import ../development/compilers/strategoxt/strategoxt-0.14.nix { 1954 - inherit fetchurl pkgconfig sdf; 1955 - aterm = aterm23; 1953 + inherit fetchurl pkgconfig sdf aterm; 1956 1954 stdenv = overrideGCC (overrideInStdenv stdenv [gnumake380]) gcc34; 1957 1955 }; 1958 1956 }; ··· 2654 2652 inherit fetchurl stdenv aspell which; 2655 2653 }); 2656 2654 2657 - aterm = aterm24; 2658 - 2659 - aterm23 = import ../development/libraries/aterm/2.3.nix { 2660 - inherit fetchurl stdenv; 2661 - }; 2662 - 2663 - aterm24 = lowPrio (import ../development/libraries/aterm/2.4.nix { 2664 - inherit fetchurl stdenv; 2665 - }); 2655 + aterm = aterm28; 2666 2656 2667 2657 aterm242fixes = import ../development/libraries/aterm/2.4.2-fixes.nix { 2668 2658 inherit fetchurl stdenv; ··· 2672 2662 inherit fetchurl stdenv; 2673 2663 }; 2674 2664 2675 - aterm27 = lowPrio (import ../development/libraries/aterm/2.7.nix { 2665 + aterm28 = import ../development/libraries/aterm/2.8.nix { 2676 2666 inherit fetchurl stdenv; 2677 - }); 2667 + }; 2678 2668 2679 2669 attr = useFromStdenv "attr" 2680 2670 (import ../development/libraries/attr {