#!/bin/bash

# Packager : Jean-Philippe Guillemin <jp.guillemin@free.fr>
# sources location : http://www.ca-us.xfce.org/archive/ 


softversion='4.8.1'
packageversion='70.1'
softname='xfce4-session'
arch='i486'
cpu='i686'

PKGBUILD=$(pwd)

package="$softname-$softversion-$arch-$packageversion"

PKG="/tmp/$package"
rm -rf $PKG
rm -f $PKG.tgz
mkdir -p $PKG

TMP="$PKGBUILD/tmp"

cd $PKGBUILD

sources="$softname"


for source in $sources ; do
  echo -n "Checking $source : "
  cd $PKGBUILD
  tarball="$(ls ${source}*tar* 2>/dev/null)"
  if [ "$tarball" == "" ] ; then
    echo "not found :("
    exit 1
  else
    echo "found $tarball :)"
  fi
done

for source in $sources ; do

  cd $PKGBUILD
  tarball="$(ls ${source}*tar* )"

  rm -rf $TMP
  mkdir -p $TMP
  
  if [ "$(echo $tarball | grep ".tar.bz2" )" ]; then
      tar jxvf $tarball -C $TMP
  elif [ "$(echo $tarball | grep ".tar.gz" )" ]; then
      tar zxvf $tarball -C $TMP
  fi
  
  SRC=$(ls -d $TMP/*/)

  
    cd $SRC
    EXTRACONFIG=""
    chown -R root.root .
    find . -perm 777 -exec chmod 755 {} \;
    find . -perm 775 -exec chmod 755 {} \;
    find . -perm 666 -exec chmod 644 {} \;
    find . -perm 664 -exec chmod 644 {} \;

    export CFLAGS="-Os -march=$arch -mtune=$cpu"
    export ICEAUTH='/usr/bin/iceauth'
	# ./autogen.sh
# EXTRACONFIG="--enable-maintainer-mode"
    ./configure --prefix=/usr \
      --mandir=/usr/man \
      --docdir=/usr/doc/$(basename $SRC) \
      --sysconfdir=/etc \
      --enable-static=no \
      --enable-compositor \
      --enable-xinerama \
      --enable-final \
      --enable-debug=no \
      --with-sound=alsa \
      --disable-gtk-doc \
      --enable-libgnome-keyring \
      $EXTRACONFIG
            
    make -j2 || exit 1
    # make install
    
    make install DESTDIR=$PKG

    mkdir -p $PKG/usr/doc/$(basename $SRC)
    cp -f AUTHORS INSTALL README TODO NEWS ChangeLog $PKG/usr/doc/$(basename $SRC)   

    # Striptease
    ( cd $PKG
      find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
      find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null

	  for mandir in $(find ./usr/share/man -name man* -type d) ; do
		mkdir -p ./usr/man/$(basename $mandir)
        mv $mandir/*.? ./usr/man/$(basename $mandir)
      done	  
	  rm -rf ./usr/share/man
	  for mandir in $(find . -name man -type d) ; do
        if [ -d $mandir ]; then
          ( cd $mandir
            find . -type f -name "*.?" -exec gzip -9 {} \;
          )
        fi
      done
    )
done


cd $PKGBUILD

# redundant , if any
rm -rf $PKG/usr/share/doc
rm -rf $PKG/etc/xdg/xfce4/xfconf/xfce-perchannel-xml


# Xinit 
mkdir -p $PKG/etc/X11/xinit $PKG/etc/xdg/xfce4
cat << "ENDOFILE" > $PKG/etc/xdg/xfce4/xinitrc
#!/bin/sh

# fix broken $UID on some system...
if test "x$UID" = "x"; then
	if test -x /usr/xpg4/bin/id; then
		UID=`/usr/xpg4/bin/id -u`;
	else
		UID=`id -u`;
	fi
fi

# set $XDG_MENU_PREFIX to "xfce-" so that "xfce-applications.menu" is picked
# over "applications.menu" in all Xfce applications.
if test "x$XDG_MENU_PREFIX" = "x"; then
  XDG_MENU_PREFIX="xfce-"
  export XDG_MENU_PREFIX
fi

# set DESKTOP_SESSION so that one can detect easily if an Xfce session is running
if test "x$DESKTOP_SESSION" = "x"; then
  DESKTOP_SESSION="xfce"
  export DESKTOP_SESSION
fi

# $XDG_CONFIG_HOME defines the base directory relative to which user specific
# configuration files should be stored. If $XDG_CONFIG_HOME is either not set
# or empty, a default equal to $HOME/.config should be used.
if test "x$XDG_CONFIG_HOME" = "x" ; then
  XDG_CONFIG_HOME=$HOME/.config
fi
[ -d "$XDG_CONFIG_HOME" ] || mkdir "$XDG_CONFIG_HOME"

# $XDG_CACHE_HOME defines the base directory relative to which user specific
# non-essential data files should be stored. If $XDG_CACHE_HOME is either not
# set or empty, a default equal to $HOME/.cache should be used.
if test "x$XDG_CACHE_HOME" = "x" ; then
  XDG_CACHE_HOME=$HOME/.cache
fi
[ -d "$XDG_CACHE_HOME" ] || mkdir "$XDG_CACHE_HOME"


# set up XDG user directores.  see
# http://freedesktop.org/wiki/Software/xdg-user-dirs
if which xdg-user-dirs-update >/dev/null 2>&1; then
    xdg-user-dirs-update
fi

if test -f "$XDG_CONFIG_HOME/user-dirs.dirs"; then
    . "$XDG_CONFIG_HOME/user-dirs.dirs"
    # i'm deliberately not 'export'-ing the XDG_ vars, because you shouldn't
    # rely on the env vars inside apps, since the file could be changed at
    # any time by the user.  this is solely here for migration purposes.

    # a bit of user dir migration...
    if test -d "$HOME/Desktop" -a ! -L "$HOME/Desktop" \
            -a "$XDG_DESKTOP_DIR" \
            -a "$HOME/Desktop" != "$XDG_DESKTOP_DIR"
    then
        echo "Migrating $HOME/Desktop to $XDG_DESKTOP_DIR..."
        test -d "$XDG_DESKTOP_DIR" && rmdir "$XDG_DESKTOP_DIR"
        mv "$HOME/Desktop" "$XDG_DESKTOP_DIR" || echo "Desktop migration failed" >&2
    fi

    if test -d "$HOME/Templates" -a ! -L "$HOME/Templates" \
            -a "$XDG_TEMPLATES_DIR" \
            -a "$HOME/Templates" != "$XDG_TEMPLATES_DIR"
    then
        echo "Migrating $HOME/Templates to $XDG_TEMPLATES_DIR..."
        test -d "$XDG_TEMPLATES_DIR" && rmdir "$XDG_TEMPLATES_DIR"
        mv "$HOME/Templates" "$XDG_TEMPLATES_DIR" || echo "Templates migration failed" >&2
    fi
fi


# Modify libglade and glade environment variables so that
# it will find the files installed by Xfce
LIBGLADE_MODULE_PATH="$LIBGLADE_MODULE_PATH:/usr/lib/libglade/2.0"
GLADE_CATALOG_PATH="$GLADE_CATALOG_PATH:"
GLADE_PIXMAP_PATH="$GLADE_PIXMAP_PATH:"
GLADE_MODULE_PATH="$GLADE_MODULE_PATH:"
export LIBGLADE_MODULE_PATH
export GLADE_CATALOG_PATH
export GLADE_PIXMAP_PATH
export GLADE_MODULE_PATH

# Export GTK_PATH so that GTK+ can find the Xfce theme engine
GTK_PATH="$GTK_PATH:/usr/lib/gtk-2.0"
export GTK_PATH

# For now, start with an empty list
XRESOURCES=""

# Has to go prior to merging Xft.xrdb, as its the "Defaults" file
test -r "/etc/xdg/xfce4/Xft.xrdb" && XRESOURCES="$XRESOURCES /etc/xdg/xfce4/Xft.xrdb"
test -r $HOME/.Xdefaults && XRESOURCES="$XRESOURCES $HOME/.Xdefaults"

BASEDIR=$XDG_CONFIG_HOME/xfce4
if test -r "$BASEDIR/Xft.xrdb"; then
  XRESOURCES="$XRESOURCES $BASEDIR/Xft.xrdb"
elif test -r "$XFCE4HOME/Xft.xrdb"; then
  mkdir -p "$BASEDIR"
  cp "$XFCE4HOME/Xft.xrdb" "$BASEDIR"/
  XRESOURCES="$XRESOURCES $BASEDIR/Xft.xrdb"
fi

# merge in X cursor settings
test -r "$BASEDIR/Xcursor.xrdb" && XRESOURCES="$XRESOURCES $BASEDIR/Xcursor.xrdb"

# ~/.Xresources contains overrides to the above
test -r "$HOME/.Xresources" && XRESOURCES="$XRESOURCES $HOME/.Xresources"

# load all X resources (adds /dev/null to avoid an empty list that would hang the process)
cat /dev/null $XRESOURCES | xrdb -nocpp -merge -

# load local modmap
test -r $HOME/.Xmodmap && xmodmap $HOME/.Xmodmap

# Use dbus-launch if installed.
if test x"$DBUS_SESSION_BUS_ADDRESS" = x""; then
    if which dbus-launch >/dev/null 2>&1; then
		eval `dbus-launch --sh-syntax --exit-with-session`
        # some older versions of dbus don't export the var properly
        export DBUS_SESSION_BUS_ADDRESS
    else
        echo "Could not find dbus-launch; Xfce will not work properly" >&2
	fi
fi

# launch gpg-agent or ssh-agent if enabled.
ssh_agent_enabled=`xfconf-query -c xfce4-session -p /startup/ssh-agent/enabled 2> /dev/null`
if test "$ssh_agent_enabled" != "false"; then
    # if the user has pam_ssh installed, it will start ssh-agent for us, but
    # of course won't start gpg-agent.  so, if ssh-agent is already running,
    # but we want gpg-agent (and that's not running yet) start gpg-agent
    # without ssh support

    ssh_agent_type=`xfconf-query -c xfce4-session -p /startup/ssh-agent/type 2> /dev/null`
    if test -z "$ssh_agent_type"; then
        if which gpg-agent >/dev/null 2>&1; then
            ssh_agent_type=gpg-agent
        else
            ssh_agent_type=ssh-agent
        fi
    fi

    # ignore stale ssh-agents
    if test "$SSH_AGENT_PID"; then
        if ! kill -0 $SSH_AGENT_PID; then
            unset SSH_AGENT_PID
            unset SSH_AUTH_SOCK
        fi
    fi

    case "$ssh_agent_type" in
        gpg-agent)
            if test -z "$SSH_AGENT_PID"; then
                eval `gpg-agent --daemon --enable-ssh-support --write-env-file $XDG_CACHE_HOME/gpg-agent-info`
                ssh_agent_kill_cmd="kill -INT $SSH_AGENT_PID; rm -f $XDG_CACHE_HOME/gpg-agent-info"
            elif test -z "$GPG_AGENT_INFO"; then
                echo "ssh-agent is already running; starting gpg-agent without ssh support"
                eval `gpg-agent --daemon --write-env-file $XDG_CACHE_HOME/gpg-agent-info`
                ssh_agent_kill_cmd="pkill -INT ^gpg-agent\$; rm -f $XDG_CACHE_HOME/gpg-agent-info"
            else
                echo "gpg-agent is already running"
            fi
            ;;

        ssh-agent)
            if test -z "$SSH_AGENT_PID"; then
                eval `ssh-agent -s`
                ssh_agent_kill_cmd="ssh-agent -s -k"
            else
                echo "ssh-agent is already running"
            fi
            ;;

        *)
            echo "Unrecognized agent type '$ssh_agent_type'" >&2
            ;;
    esac
fi


# launch a screensaver if enabled.  do not launch if we're root or if
# we're in a VNC session.
screensaver_enabled=`xfconf-query -c xfce4-session -p /startup/screensaver/enabled 2> /dev/null`
if test $UID -gt 0 -a -z "$VNCSESSION" -a "$screensaver_enabled" != "false"; then
    screensaver_type=`xfconf-query -c xfce4-session -p /startup/screensaver/type 2> /dev/null`

    case "$screensaver_type" in
        xscreensaver)
            xscreensaver -no-splash &
            ;;

        gnome-screensaver)
            gnome-screensaver &
            ;;

        *)
            if test x"`which xscreensaver 2>/dev/null`" != x""; then
                xscreensaver -no-splash &
            elif test x"`which gnome-screensaver 2>/dev/null`" != x""; then
                gnome-screensaver &
            fi
            ;;
    esac
fi


# Run xfce4-session if installed
if which xfce4-session >/dev/null 2>&1; then
    xfce4-session

    if test "$ssh_agent_kill_cmd"; then
        echo "running '$ssh_agent_kill_cmd'"
        eval "$ssh_agent_kill_cmd"
    fi

    exit 0
fi


##################
# IMPORTANT NOTE #
##################

# Everything below here ONLY gets executed if you are NOT using xfce4-session
# (Xfce's session manager).  If you are using the session manager, everything
# below is handled by it, and the code below is not executed at all.  If you're
# not sure if you're using the session manager, type 'ps -e|grep xfce4-session'
# in a terminal while Xfce is running.

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


# this is only necessary when running w/o xfce4-session
xsetroot -solid black -cursor_name watch

# or use old-fashioned startup script otherwise

xfsettingsd &
xfwm4 --daemon

# start up stuff in $XDG_CONFIG_HOME/autostart/, as that looks to be
# the new standard.  if that directory doesn't exist, try the old
# ~/Desktop/Autostart method.  we're not going to do any migration here.
if test -d "$XDG_CONFIG_HOME/autostart"; then
  for i in ${XDG_CONFIG_HOME}/autostart/*.desktop; do
    grep -q -E "^Hidden=true" "$i" && continue
    if grep -q -E "^OnlyShowIn=" "$i"; then
      # need to test twice, as lack of the line entirely means we still run it
      grep -E "^OnlyShowIn=" "$i" | grep -q 'XFCE;' || continue
    fi
    grep -E "^NotShowIn=" "$i" | grep -q 'XFCE;' && continue

    # check for TryExec
    trycmd=`grep -E "^TryExec=" "$i" | cut -d'=' -f2`
    if test "$trycmd"; then
      which "$trycmd" >/dev/null 2>&1 || continue
    fi

    cmd=`grep -E "^Exec=" "$i" | cut -d'=' -f2`
    if test "$cmd" && which "$cmd" >/dev/null 2>&1; then
      $cmd &
    fi
  done
elif test -d "$HOME/Desktop/Autostart"; then
  for i in `ls -1 -L ${HOME}/Desktop/Autostart/ 2>/dev/null`; do
    if test -x $HOME/Desktop/Autostart/$i; then
      $HOME/Desktop/Autostart/$i &
    fi
  done
fi

xfdesktop&
orage &

panel=`which xfce4-panel`
case "x$panel" in
	x|xno*)
		;;
	*)
		$panel
		ret=$?
		while test $ret -ne 0; do
			xmessage -center -file - -timeout 20 -title Error <<EOF
A crash occured in the panel
Please report this to the xfce4-dev@xfce.org list
or on http://bugs.xfce.org
Meanwhile the panel will be restarted
EOF
			cat >&2 <<EOF
A crash occured in the panel
Please report this to the xfce4-dev@xfce.org list
or on http://bugs.xfce.org
Meanwhile the panel will be restarted
EOF
			$panel
			ret=$?
		done
		;;
esac

if test "$ssh_agent_kill_cmd"; then
	eval "$ssh_agent_kill_cmd"
fi

xsetroot -bg white -fg red  -solid black -cursor_name watch

ENDOFILE

mkdir -p $PKG/etc/X11/xinit
(
cd $PKG/etc/X11/xinit
ln -s ../../xdg/xfce4/xinitrc xinitrc.xfce
)
chmod 755 $PKG/etc/X11/xdg/xfce4/xinitrc
chmod 755 $PKG/etc/X11/xinit/xinitrc.xfce

# slack-desc
mkdir -p $PKG/install
cat > $PKG/install/slack-desc << END
$softname: $softname is part of the XFCE Desktop
$softname:
$softname: XFce is a fast and lightweight desktop environment that is both
$softname: sex-appealing and easy to use.
$softname: 
$softname: For more information, see:  http://www.xfce.org
$softname:
$softname:
$softname:
$softname:
$softname:
END

mkdir -p $PKG/usr/src/$softname-$softversion
cp $PKGBUILD/build-$softname.sh $PKG/usr/src/$softname-$softversion/

cd $PKG
makepkg -l y -c n $PKG.txz

# Cleanup
cd $PKGBUILD
rm -rf $PKG
rm -rf $TMP
