#!/bin/sh

export MACOSX_DEPLOYMENT_TARGET=10.1
export LOGFILE="/tmp/seg_addr_table.log"

echo > $LOGFILE

if [ -z "$1" ]; then
	echo "===== REGENERATING FILE LIST =====" >> $LOGFILE
	echo -e "- regenerating file list... \c"
	sudo find /sw /usr/X11R6 -type f 2>>$LOGFILE | sudo xargs -s 48000 file | grep 'Mach-O' | awk -F: '{ print $1 }' | grep -v '.class$' | grep -v '.jar$' > /tmp/seg_addr_table.raw
	echo "done"

	echo "===== REMOVING NON-PREBOUND FILES =====" >> $LOGFILE
	echo -e "- removing non-prebound files... \c"
	echo > /tmp/seg_addr_table.unsorted
	for file in `cat /tmp/seg_addr_table.raw`; do
		if sudo file $file 2>&1 | grep -q 'Mach-O executable'; then
			if sudo otool -hv $file 2>&1 | grep -q PREBOUND; then
				echo $file >> /tmp/seg_addr_table.unsorted
			fi
		else
			if sudo otool -hv $file 2>&1 | grep -q PREBOUND; then
				sudo otool -L $file 2>&1 | grep 'compatibility version' | head -1 | awk '{ print $1 }' >> /tmp/seg_addr_table.unsorted
			fi
		fi
	done
	echo "done"
fi

echo "===== SORTING TABLE =====" >> $LOGFILE
echo -e "- sorting table... \c"
sort /tmp/seg_addr_table.unsorted | uniq > /tmp/seg_addr_table
echo "done"

echo "===== GENERATING SEG_ADDR_TABLE =====" >> $LOGFILE
echo -e "- generating correct seg_addr_table... \c"
sudo seg_addr_table -seg_addr_table /tmp/seg_addr_table -seg1addr 0x20000000 -segs_read_only_addr 0x90000000 -segs_read_write_addr 0xa0000000 -allocate_flat increasing -relayout -o /sw/fink/dists/seg_addr_table >>$LOGFILE
sudo chmod 666 /sw/fink/dists/seg_addr_table
echo "done"

echo "===== REDOING PREBINDING =====" >> $LOGFILE
echo -e "- redoing prebinding based on the new seg_addr_table... \c"
cat /tmp/seg_addr_table | while read file; do
	if [ -f "$file" ]; then
		sudo redo_prebinding -seg_addr_table /sw/fink/dists/seg_addr_table "$file" >>$LOGFILE 2>&1
	fi
done
echo "done"

echo "===== UPDATING PREBINDING =====" >> $LOGFILE
echo -e "- updating prebinding... \c"
sudo update_prebinding -root / -verbose >>$LOGFILE 2>&1
echo "done"
