#!/bin/sh
# ============================================================================
#
# This file is part of the 'Entware-ng' package
# 
# This program is free software; you can redistribute it and/or modify it 
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2, or (at your option) any
# later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# Author: Mijzelf <Mijzelf@live.com>
#
# ============================================================================
PKG_NAME="Entware-ng"
THIS_SCRIPT="preinst"
PKG_FIRMWARE=4

############################################################
## Check if we are in upgradig mode. From the point of view of the package
## an upgrade is a uninstall followed by a install. So if you want to preserve
## something over an upgrade, you have to detect it somehow
##
## Function sets PKG_UPGRADE > 0 when upgrading, 
## and PKG_UPGRADE=0 when not
############################################################
IsUpgrading()
{
	PKG_UPGRADING=0
	local dir=
	for dir in "/usr/local/zy_pkgs/" "/i-data/.system/zy-pkgs/"
	do
		local logfile=${dir}tmp/zypkg.log
		[ ! -f ${logfile} ] && continue

		local lastupdate=` grep "Upgrade Mode" ${logfile} | tail -n 1 | grep "\[${PKG_NAME}\]" | awk -v OFS=' ' '{print $1, $2}' `

	        [ "${lastupdate}" = "" ] && return 1

		local since1970=` TZ=GMT date -d "${lastupdate}" +%s `
		local now=`date +%s `
		local ago=""
		let ago=now-since1970
		[ $ago -eq 0 ] && ago=1
		[ 300 -gt $ago ] && PKG_UPGRADING=$ago && return 0

		return 1
	done

	# We shouldn't be here
	return 1
}

#############################################################
## Internal function of Log. Find parent, and print cmdline of process 
#############################################################
FindParent()
{
	local id=${1}
	[ $id -eq 1 ] && return # process 1 is the root of all processes

	local ppid=` grep PPid /proc/$id/status | awk '{ print $2 }' `
	FindParent $ppid

	local cmdline=` cat /proc/$id/cmdline | tr '\0' ' ' `
	echo ${id}${INDENT}${cmdline}
	INDENT="${INDENT}*"
}

#############################################################
## Write some useful log to /tmp/.log. -if it exists
#############################################################
Log() 
{
	[ ! -f /tmp/${PKG_NAME}.log ] && return

	if [ "$1" = "bare" ] ; then
 		shift
		echo "${THIS_SCRIPT}: $@" >>/tmp/${PKG_NAME}.log
		return
	fi

	exec 3>&1 ; exec 4>&2 ; exec >>/tmp/${PKG_NAME}.log 2>/dev/null
	echo "#######################################"
	echo "## Script: ${THIS_SCRIPT}"
	echo "#######################################"
	echo -e "\tTime: ` date +%T `"
	[ "$1" != "" ] && echo -e "\tMessage: $@"
	echo -e "\tCall stack"
	INDENT="*"
	local tmpfile=/tmp/$$.${PKG_NAME}
	FindParent $$ >$tmpfile
	unset INDENT
	local line
	while read line
	do
	    echo -e "\t\t${line}" | tr '*' '\t'
	done <$tmpfile
	rm $tmpfile
	echo -e "\tCurdir: ` pwd `"
	[ -h $0 ] && echo -e "\tSymlink: $0 is a symlink to ` readlink $0 `"
	echo -e "\tEnvironment"
	printenv >$tmpfile
	while read line 
	do
	    echo -e "\t\t${line}"
	done <$tmpfile
	rm $tmpfile
	exec 2>&4 ; exec 4>&- ; exec 1>&3 ; exec 3>&-
}

IsUpgrading
Log ` [ $PKG_UPGRADING -gt 0 ] && echo upgrading `

PKG_ROOT="/usr/local/zy-pkgs"

# TODO
# Add your own code
