about summary refs log tree commit diff
path: root/externals
diff options
context:
space:
mode:
Diffstat (limited to 'externals')
-rw-r--r--externals/Makefile.am16
-rw-r--r--externals/max-long.patch77
-rw-r--r--externals/sizeof.patch56
3 files changed, 142 insertions, 7 deletions
diff --git a/externals/Makefile.am b/externals/Makefile.am
index 0afb26cb654b..c9bc05d71ee5 100644
--- a/externals/Makefile.am
+++ b/externals/Makefile.am
@@ -1,16 +1,18 @@
 # CWI ATerm
 
-ATERM = aterm-2.4.2-fixes-r2
+ATERM = aterm-2.5
 
-$(ATERM).tar.bz2:
+$(ATERM).tar.gz:
 	@echo "Nix requires the CWI ATerm library to build."
-	@echo "Please download version 2.4.2-fixes-r2 from"
-	@echo "  http://nixos.org/tarballs/aterm-2.4.2-fixes-r2.tar.bz2"
+	@echo "Please download version 2.5 from"
+	@echo "  http://nixos.org/tarballs/aterm-2.5.tar.gz"
 	@echo "and place it in the externals/ directory."
 	false
 
-$(ATERM): $(ATERM).tar.bz2
-	bunzip2 < $(srcdir)/$(ATERM).tar.bz2 | tar xvf -
+$(ATERM): $(ATERM).tar.gz
+	gzip -d < $(srcdir)/$(ATERM).tar.gz | tar xvf -
+	patch -d $(ATERM) -p1 < ./max-long.patch
+	patch -d $(ATERM) -p1 < ./sizeof.patch
 
 have-aterm:
 	$(MAKE) $(ATERM)
@@ -67,7 +69,7 @@ endif
 
 all: build-aterm build-bzip2
 
-EXTRA_DIST = $(ATERM).tar.bz2 $(BZIP2).tar.gz
+EXTRA_DIST = $(ATERM).tar.gz $(BZIP2).tar.gz max-long.patch sizeof.patch
 
 ext-clean:
 	$(RM) -f have-aterm build-aterm have-bzip2 build-bzip2
diff --git a/externals/max-long.patch b/externals/max-long.patch
new file mode 100644
index 000000000000..a2f260b970b3
--- /dev/null
+++ b/externals/max-long.patch
@@ -0,0 +1,77 @@
+diff -rc aterm-2.8-orig/aterm/hash.c aterm-2.8/aterm/hash.c
+*** aterm-2.8-orig/aterm/hash.c	2008-11-10 13:54:22.000000000 +0100
+--- aterm-2.8/aterm/hash.c	2009-01-27 18:14:14.000000000 +0100
+***************
+*** 93,146 ****
+  }
+  
+  /*}}}  */
+- /*{{{  static long calc_long_max() */
+- static long calc_long_max()
+- {
+-   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);
+- 
+-   delta = long_max;
+-   while (delta > 1) {
+-     while (long_max + delta < 0) {
+-       delta /= 2;
+-     }
+-     long_max += delta;
+-   }
+- 
+-   return long_max;
+- 
+- }
+- /*}}}  */
+  /*{{{  static long calculateNewSize(sizeMinus1, nrdel, nrentries) */
+  
+  static long calculateNewSize
+  (long sizeMinus1, long nr_deletions, long nr_entries)
+  { 
+- 
+-   /* Hack: LONG_MAX (limits.h) is often unreliable, we need to find
+-    * out the maximum possible value of a signed long dynamically.
+-    */
+-   static long st_long_max = 0;
+- 
+-   /* the resulting length has the form 2^k-1 */
+- 
+    if (nr_deletions >= nr_entries/2) { 
+      return sizeMinus1;
+    }
+  
+!   if (st_long_max == 0) {
+!     st_long_max = calc_long_max();
+!   }
+! 
+!   if (sizeMinus1 > st_long_max / 2) {
+!     return st_long_max-1;
+    }
+  
+    return (2*sizeMinus1)+1;
+--- 93,109 ----
+  }
+  
+  /*}}}  */
+  /*{{{  static long calculateNewSize(sizeMinus1, nrdel, nrentries) */
+  
+  static long calculateNewSize
+  (long sizeMinus1, long nr_deletions, long nr_entries)
+  { 
+    if (nr_deletions >= nr_entries/2) { 
+      return sizeMinus1;
+    }
+  
+!   if (sizeMinus1 > LONG_MAX / 2) {
+!     return LONG_MAX-1;
+    }
+  
+    return (2*sizeMinus1)+1;
diff --git a/externals/sizeof.patch b/externals/sizeof.patch
new file mode 100644
index 000000000000..2649cc564913
--- /dev/null
+++ b/externals/sizeof.patch
@@ -0,0 +1,56 @@
+diff -rc -x '*~' aterm-2.5-orig/aterm/aterm.c aterm-2.5/aterm/aterm.c
+*** aterm-2.5-orig/aterm/aterm.c	2007-02-27 23:41:31.000000000 +0100
+--- aterm-2.5/aterm/aterm.c	2010-02-23 15:10:38.000000000 +0100
+***************
+*** 150,155 ****
+--- 150,157 ----
+    if (initialized)
+      return;
+  
++   assert(sizeof(long) == sizeof(void *));
++ 
+    /*{{{  Handle arguments */
+  
+    for (lcv=1; lcv < argc; lcv++) {
+diff -rc -x '*~' aterm-2.5-orig/aterm/encoding.h aterm-2.5/aterm/encoding.h
+*** aterm-2.5-orig/aterm/encoding.h	2007-02-27 23:41:31.000000000 +0100
+--- aterm-2.5/aterm/encoding.h	2010-02-23 15:36:05.000000000 +0100
+***************
+*** 10,24 ****
+  {
+  #endif/* __cplusplus */
+  
+! #if SIZEOF_LONG > 4
+! #define AT_64BIT
+  #endif
+  
+! #if SIZEOF_LONG != SIZEOF_VOID_P
+! #error Size of long is not the same as the size of a pointer
+  #endif
+  
+! #if SIZEOF_INT > 4
+  #error Size of int is not 32 bits
+  #endif
+  
+--- 10,30 ----
+  {
+  #endif/* __cplusplus */
+  
+! #include <limits.h>
+! 
+! #ifndef SIZEOF_LONG
+! #if ULONG_MAX > 4294967295
+! #define SIZEOF_LONG 8
+! #else
+! #define SIZEOF_LONG 4
+! #endif
+  #endif
+  
+! #if SIZEOF_LONG > 4
+! #define AT_64BIT
+  #endif
+  
+! #if UINT_MAX > 4294967295
+  #error Size of int is not 32 bits
+  #endif
+