#------------------------------------------------------------------------------
#   chrome.spec
#------------------------------------------------------------------------------

#------------------------------------------------------------------------------
#   Prologue information
#------------------------------------------------------------------------------
Summary         : @@MENUNAME@@
License         : Multiple, see @@PRODUCTURL@@
Name            : @@PACKAGE_FILENAME@@
Version         : @@VERSION@@
Release         : @@PACKAGE_RELEASE@@
Group           : Applications/Internet
Vendor          : @@COMPANY_FULLNAME@@
Url             : @@PRODUCTURL@@
Packager        : @@MAINTNAME@@ <@@MAINTMAIL@@>

Provides        : @@PROVIDES@@ = %{version}
Requires        : @@DEPENDS@@
Requires(post)  : %{_sbindir}/update-alternatives
Requires(preun) : %{_sbindir}/update-alternatives
Autoreqprov     : No
Conflicts       : @@REPLACES@@

BuildRoot       : %{_tmppath}/%{name}-%{version}-root

# The prefix is pretty important; RPM uses this to figure out
# how to make a package relocatable
prefix          : /opt

#------------------------------------------------------------------------------
#   Description
#------------------------------------------------------------------------------
%Description
@@SHORTDESC@@

@@FULLDESC@@

#------------------------------------------------------------------------------
#   Build rule - How to make the package
#------------------------------------------------------------------------------
%build

#------------------------------------------------------------------------------
#       Installation rule - how to install it (note that it
#   gets installed into a temp directory given by $RPM_BUILD_ROOT)
#------------------------------------------------------------------------------
%install
rm -rf "$RPM_BUILD_ROOT"

if [ -z "@@STAGEDIR@@" -o ! -d "@@STAGEDIR@@" ] ; then
    echo "@@STAGEDIR@@ appears to be incorrectly set - aborting"
    exit 1
fi

if [ -z "@@INSTALLDIR@@" -o ! -d "@@STAGEDIR@@/@@INSTALLDIR@@" ] ; then
    echo "@@INSTALLDIR@@ appears to be incorrectly set - aborting"
    exit 1
fi

install -m 755 -d \
  "$RPM_BUILD_ROOT/etc" \
  "$RPM_BUILD_ROOT/opt" \
  "$RPM_BUILD_ROOT/usr"
# This is hard coded for now
cp -a "@@STAGEDIR@@/etc/" "$RPM_BUILD_ROOT/"
cp -a "@@STAGEDIR@@/opt/" "$RPM_BUILD_ROOT/"
cp -a "@@STAGEDIR@@/usr/" "$RPM_BUILD_ROOT/"

#------------------------------------------------------------------------------
#   Rule to clean up a build
#------------------------------------------------------------------------------
%clean
rm -rf "$RPM_BUILD_ROOT"

#------------------------------------------------------------------------------
#   Files listing.
#------------------------------------------------------------------------------
%files
%defattr(-,root,root)
#%doc README

# We cheat and just let RPM figure it out for us; everything we install
# should go under this prefix anyways.
@@INSTALLDIR@@

# Be explicit about the files we scatter throughout the system we don't
# accidentally "own" stuff that's not ours (crbug.com/123990).
/etc/cron.daily/@@PACKAGE@@
%ghost %attr(755,root,root) /usr/bin/google-chrome
/usr/bin/@@USR_BIN_SYMLINK_NAME@@
/usr/share/appdata/@@PACKAGE@@.appdata.xml
/usr/share/applications/@@PACKAGE@@.desktop
/usr/share/gnome-control-center/default-apps/@@PACKAGE@@.xml
%docdir /usr/share/man/man1
/usr/share/man/man1/@@PACKAGE@@.1

#------------------------------------------------------------------------------
#   Pre install script
#------------------------------------------------------------------------------
%pre

exit 0




#------------------------------------------------------------------------------
#   Post install script
#------------------------------------------------------------------------------
%post

@@include@@../common/postinst.include

@@include@@../common/rpm.include

@@include@@../common/symlinks.include

remove_nss_symlinks
add_nss_symlinks

remove_udev_symlinks

DEFAULTS_FILE="/etc/default/@@PACKAGE@@"
if [ ! -e "$DEFAULTS_FILE" ]; then
  echo 'repo_add_once="true"' > "$DEFAULTS_FILE"
fi

. "$DEFAULTS_FILE"

if [ "$repo_add_once" = "true" ]; then
  determine_rpm_package_manager

  case $PACKAGEMANAGER in
  "yum")
    install_yum
    ;;
  "urpmi")
    install_urpmi
    ;;
  "yast")
    install_yast
    ;;
  esac
fi

# Some package managers have locks that prevent everything from being
# configured at install time, so wait a bit then kick the cron job to do
# whatever is left. Probably the db will be unlocked by then, but if not, the
# cron job will keep retrying.
# Do this with 'at' instead of a backgrounded shell because zypper waits on all
# sub-shells to finish before it finishes, which is exactly the opposite of
# what we want here. Also preemptively start atd because for some reason it's
# not always running, which kind of defeats the purpose of having 'at' as a
# required LSB command.
service atd start
echo "sh /etc/cron.daily/@@PACKAGE@@" | at now + 2 minute > /dev/null 2>&1

CHANNEL=@@CHANNEL@@
case $CHANNEL in
  stable )
    PRIORITY=200
    ;;
  beta )
    PRIORITY=150
    ;;
  unstable )
    PRIORITY=120
    ;;
  * )
    PRIORITY=0
    ;;
esac

%{_sbindir}/update-alternatives --install /usr/bin/google-chrome google-chrome \
  /usr/bin/@@USR_BIN_SYMLINK_NAME@@ $PRIORITY

exit 0


#------------------------------------------------------------------------------
#   Pre uninstallation script
#------------------------------------------------------------------------------
%preun

if [ "$1" -eq "0" ]; then
  mode="uninstall"
elif [ "$1" -eq "1" ]; then
  mode="upgrade"
fi

@@include@@../common/rpm.include

@@include@@../common/symlinks.include

# Only remove menu items and symlinks on uninstall. When upgrading,
# old_pkg's %preun runs after new_pkg's %post.
if [ "$mode" = "uninstall" ]; then
@@include@@../common/prerm.include
  remove_nss_symlinks
  remove_udev_symlinks

  %{_sbindir}/update-alternatives --remove google-chrome \
    /usr/bin/@@USR_BIN_SYMLINK_NAME@@
fi

# On Debian we only remove when we purge. However, RPM has no equivalent to
# dpkg --purge, so this is all disabled.
#
#determine_rpm_package_manager
#
#case $PACKAGEMANAGER in
#"yum")
#  remove_yum
#  ;;
#"urpmi")
#  remove_urpmi
#  ;;
#"yast")
#  remove_yast
#  ;;
#esac

exit 0

#------------------------------------------------------------------------------
#   Post uninstallation script
#------------------------------------------------------------------------------
%postun

exit 0
