#!/bin/sh
# Copyright (C) 2016 O.S. Systems Software LTDA.
# Copyright (C) 2016 Freescale Semiconductor

export PATH="/sbin:/usr/sbin:/bin:/usr/bin"

usage() {
	cat <<EOF
	$0 [<openvt arguments>] [-- <weston options>]
EOF
}

## Module support
modules_dir=@DATADIR@/weston-start

# Add weston extra argument
add_weston_argument() {
	weston_args="$weston_args $1"
}

# Add openvt extra argument
add_openvt_argument() {
	openvt_args="$openvt_args $1"

}
## Add module to --modules argument
add_weston_module() {
	if [[ "x${weston_modules}" == "x" ]]; then
		weston_modules="--modules "
	fi;
	weston_modules+="${1},"
}

if [ -n "$WAYLAND_DISPLAY" ]; then
	echo "ERROR: A Wayland compositor is already running, nested Weston instance is not supported yet."
	exit 1
fi

if [ -n "$WESTON_USER" ]; then
	if [ -z "$WESTON_TTY" ]; then
		echo "ERROR: If you have WESTON_USER variable set, you also need WESTON_TTY."
		exit 1
	fi
	if [ -z "$WESTON_GROUP" ]; then
		# no explicit WESTON_GROUP given, therefore use WESTON_USER
		export WESTON_GROUP="${WESTON_USER}"
	fi
	weston_args_user="-u $WESTON_USER -t $WESTON_TTY"
fi

if [ -n "$DISPLAY" ]; then
	launcher="weston"
else
	launcher="weston-launch $weston_args_user --"
fi

openvt_args="-s"
while [ -n "$1" ]; do
	if [ "$1" = "--" ]; then
		shift
		break
	fi
	openvt_args="$openvt_args $1"
	shift
done

weston_args=$*

# Load and run modules
if [ -d "$modules_dir" ]; then
	for m in "$modules_dir"/*; do
		# Skip backup files
		if [ "`echo $m | sed -e 's/\~$//'`" != "$m" ]; then
			continue
		fi

		# process module
		. $m
		if [[ x"{$weston_modules}" != "x" ]]; then
			add_weston_argument "${weston_modules}"
		fi;
	done
fi

if test -z "$XDG_RUNTIME_DIR"; then
	export XDG_RUNTIME_DIR=/run/user/`id -u ${WESTON_USER}`
	if ! test -d "$XDG_RUNTIME_DIR"; then
		mkdir --parents $XDG_RUNTIME_DIR
		chmod 0700 $XDG_RUNTIME_DIR
	fi
	if [ -n "$WESTON_USER" ]
	then
		chown $WESTON_USER:$WESTON_GROUP $XDG_RUNTIME_DIR
	fi
fi

exec openvt $openvt_args -- $launcher $weston_args --log=@LOCALSTATEDIR@/log/weston.log
