#!/bin/sh
#

EXT=open-vm-tools
TCZ=/tmp/$EXT/TCZ

sudo rm -rf /tmp/$EXT

export CC="gcc -mtune=generic -Os -pipe"
export CXX="g++ -mtune=generic -Os -pipe -fexceptions"
export LDFLAGS="-lm"

for a in bash compiletc automake glibc_apps libtool-dev squashfs-tools \
		glib2-dev gtkmm-dev gtk3-dev glibmm-dev gtk2-dev gtk2mm-dev \
		Xorg-7.7-3d-dev libSM-dev libXau-dev \
		procps-ng-dev libdnet libmspack fuse
	do tce-load -i $a
done

export RPCGEN=$(readlink -f $(which rpcgen))
export RPCGENFLAGS="-Y $(dirname $(which cpp))"
#export CXXFLAGS="$CXXFLAGS -std=c++11 -D_GLIBCXX_USE_CXX11_ABI=0"
export CXXFLAGS="$CXXFLAGS -std=c++11 -D_GLIBCXX_USE_CXX11_ABI=0"

[ -e /etc/sysconfig/tcedir/copy2fs.flg ] && \
	sudo ln -sf /usr /lib/modules/$(uname -r)/build || \
	sudo ln -sf /tmp/tcloop/linux-4.2.1_api_headers/usr /lib/modules/$(uname -r)/build

sed -i -e 's/(linux)/(__linux__)/' lib/include/vmblock.h
#for a in $(grep -r -l vmware-tools *); do sed -i -e 's/vmware-tools/open-vm-tools/g' $a; done


### create Makefiles
#make clean
./configure \
	--prefix=/usr/local \
	--localstatedir=/var \
	--disable-static \
	--without-icu \
	--without-pam \
	--without-xerces \
	--disable-deploypkg \
	--with-x \
	|| exit

### compile open-vm-tools

make >make.log 2>&1 || exit
sudo make DESTDIR=$TCZ install-strip || exit
sudo chown -R tc.staff /tmp/$EXT

### create tcz extension onload script

mkdir -p $TCZ/usr/local/tce.installed
cat > $TCZ/usr/local/tce.installed/$EXT <<EOF
#!/bin/sh
#
/etc/init.d/vmware-tools start
EOF

### create vmware-tools initialization script

mkdir -p $TCZ/etc/init.d
cat > $TCZ/etc/init.d/vmware-tools <<'EOF'
#!/bin/sh
# Start, stop, and restart vmtoolsd

unload_module() {
lsmod|grep -q ^$1 && rmmod $1
/sbin/udevadm settle
}

load_module() {
lsmod|grep -q ^$1 || modprobe $1
/sbin/udevadm settle
}

case "$1" in
start)

# Interface check
NIF1=$(wc -l < /proc/net/dev)

# Load vsock
load_module vsock

# Load vmblock
vmblock_dev=/tmp/VMwareDnD
vmblockfusemntpt=/var/run/vmblock-fuse
[ -d $vmblock_dev ] || mkdir -m 1777 -p $vmblock_dev

if grep -q "$vmblockfusemntpt" /etc/mtab; then
	true
else
	mkdir -m 1777 -p $vmblockfusemntpt
	vmware-vmblock-fuse -o subtype=vmware-vmblock,default_permissions,allow_other $vmblockfusemntpt
fi

# Start vmtoolsd
if pidof vmtoolsd &>/dev/null; then
	echo vmtoolsd already running
else
	rm -f /var/run/vmtoolsd.pid
	/usr/local/bin/vmtoolsd --background=/var/run/vmtoolsd.pid
fi

# Mount vmhgfs now a userspace program
# /dev/fuse needs to be writable to user
# /mnt/hgfs needs to be a directory and 777
vmhgfsmntpt=/mnt/hgfs
if grep -q $vmhgfsmntpt /etc/mtab; then
	umount -f -l $vmhgfsmntpt
fi
if [ -e $vmhgfsmntpt ]; then
	if [ -d $vmhgfsmntpt ]; then
		chmod 777 $vmhgfsmntpt
	else
		rm -f $vmhgfsmntpt
		mkdir -m 777 -p $vmhgfsmntpt
	fi
else
	mkdir -m 777 -p $vmhgfsmntpt
fi

# add "vmhgfs-fuse $mountpoint" to .profile
# [ $(which vmware-checkvm) ] && \
# [ vmware-checkvm ] && \
# [ $(which vmhgfs-fuse) ] && \
# [ -d /mnt/hgfs ] && \
# vmhgfs-fuse /mnt/hgfs

# Start vmware-user in user's .xsession using the following after mouse initialization:
# [ $(which vmware-checkvm) ] && \
# [ vmware-checkvm ] && \
# vmware-user &

# Use ethtool to optimize vmxnet
	if which ethtool &> /dev/null; then
		for e in $(grep eth /proc/net/dev|cut -d: -f1); do
			ethtool -K $e gso on &> /dev/null
			ethtool -K $e tso on &> /dev/null
		done
	fi

# Start DHCP client for new interfaces
if ! grep -q nodhcp /proc/cmdline; then
	NIF2=$(wc -l < /proc/net/dev)
	if [ $NIF2 -gt $NIF1 ]; then
		  /etc/init.d/dhcp.sh
	fi
fi
;;
stop)
	if pidof vmtoolsd &>/dev/null; then
		killall vmtoolsd
		echo stopped vmtoolsd
		umount -l /mnt/hgfs
	else
		echo vmtoolsd is not running
	fi
;;
restart)
	$0 stop
	$0 start
;;
*)
	echo "Usage: $0 (start|stop|restart)"
	exit 1
;;
esac
EOF

### create -dev directory if anyone ever wants it

mkdir -p $TCZ-dev/usr/local/lib
mv $TCZ/usr/local/share $TCZ-dev/usr/local
mv $TCZ/usr/local/include $TCZ-dev/usr/local
mv $TCZ/usr/local/lib/pkgconfig $TCZ-dev/usr/local
for a in $(find $TCZ -name '*.la'); do 
        b=$(echo $(dirname $a) | sed "s#$TCZ#$TCZ-dev#")
        mkdir -p $b                                                
        mv $a $b          
done                                                                            

### fix up files

cd $TCZ/sbin
cp mount.vmhgfs .
mkdir -p $TCZ/etc/vmware-tools/scripts/poweroff-vm-default.d
cat >$TCZ/etc/vmware-tools/scripts/poweroff-vm-default.d/99-shutdown <<EOF
#!/bin/sh
#
/usr/bin/exitcheck.sh shutdown
EOF

### create desktop extension by moving user parts

mkdir -p $TCZ-desktop/usr/local/lib/open-vm-tools/plugins
mv $TCZ/usr/local/lib/open-vm-tools/plugins/vmusr $TCZ-desktop/usr/local/lib/open-vm-tools/plugins
mv $TCZ/usr/local/etc $TCZ-desktop/usr/local
mkdir -p $TCZ-desktop/usr/local/bin
mv $TCZ/usr/local/bin/vmware-user-suid-wrapper $TCZ-desktop/usr/local/bin
cd $TCZ-desktop/usr/local/bin
ln -s vmware-user-suid-wrapper vmware-user

### set file permissions and ownership

chmod -R 755 $TCZ
sudo chown -R root.root $TCZ*
sudo chown -R root.staff $TCZ*/usr/local/tce.installed
sudo chmod -R g+w $TCZ/usr/local/tce.installed
sudo chmod u+s $TCZ-desktop/usr/local/bin/vmware-user-suid-wrapper

### make extension file

mksquashfs $TCZ /tmp/$EXT/$EXT.tcz -noappend
mksquashfs $TCZ-desktop /tmp/$EXT/$EXT-desktop.tcz -noappend
mksquashfs $TCZ-dev /tmp/$EXT/$EXT-dev.tcz -noappend

