#!/bin/sh

downloads="$HOME/software/downloads"

if [ ! -e /usr/include/tiffio.h ]; then
  echo "Error: could not find file tiffio.h. Please install libtiff4-dev."
  exit 1
fi

export LC_ALL=C

mkdir -p "${downloads}"

cd "$(dirname $0)/.."

if [ -e splash2 ]; then
  echo "Error: a directory with the name splash2 already exists. Please"
  echo "remove it before running this script, or run this script in another"
  echo "directory."
  exit 1
fi

(
  cd "$downloads"
  if [ ! -e splash2.tar.gz ]; then
    wget -q http://www-flash.stanford.edu/apps/SPLASH/splash2.tar.gz
  fi
  if [ ! -e splash2-modified.patch.gz ]; then
    wget -q http://www.capsl.udel.edu/splash/splash2-modified.patch.gz
  fi
)

tar zxf $downloads/splash2.tar.gz
cd splash2
gzip -cd < "$downloads/splash2-modified.patch.gz" | patch -p1 -s
patch -p1 -s <<'EOF'
diff -ru orig/splash2/codes/apps/radiosity/display.C splash2/codes/apps/radiosity/display.C
--- orig/splash2/codes/apps/radiosity/display.C	2008-05-25 10:38:52.000000000 +0200
+++ splash2/codes/apps/radiosity/display.C	2008-05-25 10:37:51.000000000 +0200
@@ -14,6 +14,7 @@
 /*                                                                       */
 /*************************************************************************/
 
+#include <math.h>
 #include <stdio.h>
 
 EXTERN_ENV;
--- orig/splash2/codes/apps/radiosity/Makefile	2008-05-25 10:38:52.000000000 +0200
+++ splash2/codes/apps/radiosity/Makefile	2008-05-25 13:05:36.000000000 +0200
@@ -15,7 +15,7 @@
 
 LOADLIBES = glibdumb/glib.a glibps/glibps.a
 
-$(TARGET): $(OBJS)
+$(TARGET): $(OBJS) $(LOADLIBES)
 	$(CC) $(OBJS) $(CFLAGS) $(LOADLIBES) -o $(TARGET) $(LDFLAGS)
 
 radiosity.h: patch.h model.h parallel.h task.h
@@ -29,3 +29,7 @@
 visible.c: visible.C $(HS)
 rad_tools.c: rad_tools.C $(HS)
 room_model.c: room_model.C $(HS)
+glibdumb/glib.a:
+	make -C glibdumb glib.a
+glibps/glibps.a:
+	make -C glibps glibps.a
diff -ru orig/splash2/codes/apps/raytrace/rltotiff/Makefile splash2/codes/apps/raytrace/rltotiff/Makefile
--- orig/splash2/codes/apps/raytrace/rltotiff/Makefile	2008-05-25 10:38:52.000000000 +0200
+++ splash2/codes/apps/raytrace/rltotiff/Makefile	2008-05-25 10:31:57.000000000 +0200
@@ -4,6 +4,3 @@
 include ../../../Makefile.config
 
 LDFLAGS := $(LDFLAGS) -ltiff
-
-clean:
-	rm -rf $(OBJS) $(TARGET)
EOF


patch -p1 -s <<EOF
diff -ru orig/splash2/codes/Makefile.config splash2/codes/Makefile.config
--- orig/splash2/codes/Makefile.config	2008-05-25 10:38:52.000000000 +0200
+++ splash2/codes/Makefile.config	2008-05-25 10:14:25.000000000 +0200
@@ -1,5 +1,5 @@
-CC := gcc
+CC := @CC@
-CFLAGS := -O3 -pthread -D_POSIX_C_SOURCE=200112
+CFLAGS := -g3 -m32 -O3 -pthread -D_POSIX_C_SOURCE=200112
 #CFLAGS := -g3 -pthread -D_POSIX_C_SOURCE=200112
 CFLAGS := \$(CFLAGS) -Wall -W -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wdisabled-optimization
 CFLAGS := \$(CFLAGS) -Wpadded -Winline -Wpointer-arith -Wsign-compare -Wendif-labels
@@ -5,8 +5,8 @@
 CFLAGS := \$(CFLAGS) -Wpadded -Winline -Wpointer-arith -Wsign-compare -Wendif-labels
 LDFLAGS := -lm
 
-BASEDIR := \$(HOME)/splash2/codes
-MACROS := \$(BASEDIR)/null_macros/c.m4.null
+BASEDIR := ${PWD}/codes
+MACROS := \$(BASEDIR)/null_macros/c.m4.null.POSIX_BARRIER
 M4 := m4 -s -Ulen -Uindex
 
 x = *
--- orig/splash2/codes/apps/radiosity/elemman.C	2008-07-13 20:24:35.000000000 +0200
+++ splash2/codes/apps/radiosity/elemman.C	2008-07-13 20:45:15.000000000 +0200
@@ -24,6 +24,7 @@
 
 
 #include <stdio.h>
+#include "drd.h"
 
 EXTERN_ENV;
 
@@ -707,6 +708,12 @@ void process_rays(Element *e, long proce
     e->n_interactions = 0 ;
     UNLOCK(e->elem_lock->lock);
 
+    {
+      Interaction* p;
+      for (p = i_list; p; p = p->next)
+	DRD_IGNORE_VAR(*p);
+    }
+
     /* For each interaction, do BF-error-analysis */
     bf_error_analysis_list( e, i_list, process_id ) ;
 
--- orig/splash2/codes/apps/radiosity/rad_main.C	2008-07-13 20:24:35.000000000 +0200
+++ splash2/codes/apps/radiosity/rad_main.C	2008-07-13 20:50:01.000000000 +0200
@@ -30,6 +30,7 @@
 #include <panel.h>
 #endif
 #endif
+#include "drd.h"
 
 /* ANL macro initialization */
 
@@ -1084,6 +1085,18 @@ void init_global(long process_id)
     /* Initialize statistical info */
     init_stat_info(process_id) ;
 
+    {
+      int i;
+
+      DRD_IGNORE_VAR(global->pbar_count);
+      for (i = 0;
+	   i < sizeof(global->task_queue) / sizeof(global->task_queue[0]);
+	   i++)
+	{
+	  DRD_IGNORE_VAR(global->task_queue[i].n_tasks);
+	}
+      DRD_IGNORE_VAR(global->element_buf);
+    }
 }
 
 
--- orig/splash2/codes/apps/radiosity/Makefile	2008-07-13 20:24:35.000000000 +0200
+++ splash2/codes/apps/radiosity/Makefile	2008-07-13 20:09:27.000000000 +0200
@@ -6,7 +6,7 @@ HS = model.h parallel.h patch.h radiosit
 
 include ../../Makefile.config
 
-CFLAGS := \$(CFLAGS) -I./glibdumb -I./glibps
+CFLAGS := \$(CFLAGS) -I./glibdumb -I./glibps -I../../../../../drd -I../../../../../include
 
 #CCOPTS = -I -float -I/usr/include \$(CFLAGS)
 #LDFLAGS = -lm -lpthread
EOF

for m in $(find codes -name Makefile)
do
  echo "==== $m ===="
  make -s -C $(dirname $m)
done
