#!/bin/bash

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
