#!/bin/bash

################################################################################
# Environment variable check.  These should be set in the makefile.

if [[ -z $PLATYPUS ]]; then
  echo "Error: environment variable PLATYPUS does not exist"
  echo "I hope you are running this script from the makefile."
  exit 42
fi
if [[ -z $FINK ]]; then
  echo "Error: environment variable FINK does not exist"
  echo "I hope you are running this script from the makefile."
  exit 42
fi

################################################################################
# A convenience function.

function checkfile() {
  if [[ ! -f $1 ]]; then
    echo "Error: file $1 does not exist"
    exit 69
  fi
}

################################################################################

# $FINK with slashes escaped.
FINK1=$( echo $FINK | sed 's/\//\\\//g' )

rm -rf gdis.app

checkfile gdis
checkfile gdis.elements
checkfile gdis.manual
checkfile gdis.library
checkfile GDIS.icns
checkfile gdis.app.template/Contents/Resources/script

echo "Running Platypus..."
$PLATYPUS -a GDIS -f gdis -f gdis.elements -f gdis.manual -f gdis.library -t python -o None -i GDIS.icns -V 0.89 -u "Sean Fleming" -I "org.sean.gdis" -D gdis.app.template/Contents/Resources/script gdis.app
if [[ ! -f gdis.app/Contents/Resources/gdis ]]; then
  echo "Error: Platypus failed."
  exit 1
else 
  echo "done."
fi

# Workaround for platypus icon copy bug
if [[ ! -f gdis.app/Contents/Resources/GDIS.icns ]]; then
  cp GDIS.icns gdis.app/Contents/Resources
  sed -i "" 's/appIcon.icns/GDIS.icns/' gdis.app/Contents/Info.plist
fi

mkdir -p gdis.app/Contents/Frameworks
#Make fink library dependencies to be within gdis.app.
echo "Fixing library dependencies in gdis..."
for lib in `otool -L gdis | grep "$FINK"` ; do
  if [[ -n $( echo $lib | grep $FINK ) ]]; then
    checkfile $lib
    cp -f $lib gdis.app/Contents/Frameworks
    newlib=$( echo "$lib" | sed 's/^.*\//\@executable_path\/..\/Frameworks\//' )
    echo "   $newlib"
    install_name_tool -change $lib $newlib gdis.app/Contents/Resources/gdis
  fi
done

echo "Copying pango..."
for file in `find $FINK/lib/pango` ; do
  newfile=$( echo "$file" | sed "s/$FINK1\/lib/gdis.app\/Contents\/Frameworks/" )
  if [[ -d $file ]]; then
    mkdir -p $newfile
  else
    newfile1=$( echo "$newfile" | grep -E -v -e "\.(la|a)$" )
    if [[ -n "$newfile1" ]] ; then
      echo "  $newfile1"
      checkfile $file
      cp $file $newfile
    fi
  fi
done

#Some fink libraries are dependent on other fink libraries.  For now copy them
#manually.
echo "Copying extra libs to gdis.app/Contents/Frameworks"
checkfile $FINK/lib/libintl.3.dylib
cp $FINK/lib/libintl.3.dylib gdis.app/Contents/Frameworks

#Got to copy pango.modules to Resources/etc/pango and put in $CWD/lib/pango/...
#Also copy pango.aliases there too.
mkdir -p gdis.app/Contents/Resources/etc/pango
checkfile $FINK/etc/pango/pangox.aliases
cp $FINK/etc/pango/pangox.aliases gdis.app/Contents/Resources/etc/pango/pangox.aliases
pango-querymodules | grep -v "^#" | sed "s/$FINK1\/lib/\$\{CWD\}\/..\/Frameworks/" | sed -E "s/^([^ ]+)/\"\1\"/" > gdis.app/Contents/Resources/etc/pango/pango.modules

echo "Copying GTK2..."
mkdir -p gdis.app/Contents/Frameworks/gtk-2.0/$GTK2VERS
for file in `find $FINK/lib/gtk-2.0/$GTK2VERS` ; do
  newfile=$( echo "$file" | sed "s/$FINK1\/lib/gdis.app\/Contents\/Frameworks/" )
  if [[ -d $file ]]; then
    mkdir -p $newfile
  else
    newfile1=$( echo "$newfile" | grep -E -v -e "\.(la|a)$" )
    if [[ -n "$newfile1" ]] ; then
      echo "   $newfile1"
      checkfile $file
      cp $file $newfile
    fi
  fi
done

mkdir -p gdis.app/Contents/Resources/etc/gtk-2.0
gtk-query-immodules-2.0 | sed "s/$FINK1\/lib/\$\{CWD\}\/..\/Frameworks/" | grep -v "^#" > gdis.app/Contents/Resources/etc/gtk-2.0/gtk.immodules

# Get rid of fink dependencies out of libraries too.
echo "Fixing inter-library dependencies..."
for file in `find gdis.app/Contents/Frameworks -name "*.dylib" -or -name "*.so"`; do
  echo "  processing $file"
  newlib=$( echo "$file" | sed 's/^.*\//\@executable_path\/..\/Frameworks\//' )
  install_name_tool -id $newlib $file
  for lib in `otool -L $file | grep "$FINK"` ; do
    if [[ -n $( echo $lib | grep $FINK ) ]]; then
      newlib=$( echo "$lib" | sed 's/^.*\//\@executable_path\/..\/Frameworks\//' )
      install_name_tool -change $lib $newlib $file
    fi
  done
done

gdk-pixbuf-query-loaders | sed "s/$FINK1\/lib/\$\{CWD\}\/..\/Frameworks/"> gdis.app/Contents/Resources/gdk-pixbuf.loaders

# Final check that we've sorted out all the Fink dependencies.
echo "Just checking sure we got all the Fink dependencies sorted..."
for file in `find gdis.app/Contents/Frameworks -name "*.dylib" -or -name "*.so"`; do
  if [[ -n `otool -L $file | grep "$FINK"` ]]; then
    echo "$file still has a FINK depenency"
  fi
done
if [[ -n `otool -L gdis.app/Contents/Resources/gdis | grep "$FINK"` ]]; then
  echo "gdis.app/Contents/Resources/gdis still has a FINK depenency"
fi



syntax highlighted by Code2HTML, v. 0.9.1