#!/usr/bin/make -f
# -*- mode: makefile; coding: utf-8 -*-
# Copyright 2007-2010, 2012, 2015 Jonas Smedegaard <dr@jones.dk>
# Description: Main Debian packaging script for sugar
#
# 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 3, 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.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# These need to be declared/run before CDBS includes
pkgbranch = $(lastword $(subst -,$(space),$(DEB_SOURCE_PACKAGE)))
pkg-jarabe = python-jarabe-$(pkgbranch)
pkg-session = sugar-session-$(pkgbranch)
pkg-sucrose = sucrose-$(pkgbranch)
DEB_BUILDDIR = build
DEB_PYTHON2_MODULE_PACKAGES = $(pkg-jarabe) $(pkg-session)
debian/control:: debian/control.in
DEB_PHONY_RULES += debian/control.in
debian/control.in::
	sed -e 's/__BRANCH__/$(pkgbranch)/g' <debian/control.in.in >debian/control.in

include /usr/share/cdbs/1/rules/upstream-tarball.mk
include /usr/share/cdbs/1/rules/utils.mk
include /usr/share/cdbs/1/class/python-autotools.mk
include /usr/share/cdbs/1/rules/debhelper.mk

comma = ,

DEB_UPSTREAM_PACKAGE = $(DEB_SOURCE_PACKAGE:%-$(pkgbranch)=%)
DEB_UPSTREAM_URL = http://download.sugarlabs.org/sources/sucrose/glucose/$(DEB_UPSTREAM_PACKAGE)
DEB_UPSTREAM_TARBALL_EXTENSION = tar.xz

# Suppress unneeded auto-resolved build-dependency on python-dev
CDBS_BUILD_DEPENDS_class_python-autotools_python = python

# Needed by upstream build process
bdeps = libgtk-3-dev, libglib2.0-dev, python-gtk2-dev, libgconf2-dev
bdeps +=, gettext, intltool, shared-mime-info

# Needed for our packaging
bdeps +=, python-empy

# $(1): activity stems
# $(2): default branch (optional)
# $(3): fallback flag (if non-empty unversioned fallback is added)
sugar_expand_activities = $(foreach stem,$(1),$(comma) $(patsubst %,sugar-$(stem)-activity-%$(if $(3), | ),$(2))$(if $(if $(2),,true)$(3),sugar-$(stem)-activity))

# Fructose activities
session_expand_activities += $(call sugar_expand_activities,browse chat,,$(1))
# Fructose activities not avilable in Debian main for this Sugar branch
session_expand_activities_relaxed += $(call sugar_expand_activities,pippy turtleart calculate etoys,,$(1))
session_expand_activities_relaxed += $(call sugar_expand_activities,log write,0.86,$(1))
session_expand_activities_relaxed += $(call sugar_expand_activities,jukebox imageviewer,$(pkgbranch),$(1))

# Needed (always/often/sometimes) at runtime
#  * network-manager (NM_SERVICE) used in extensions and jarabe
#    + modemmanager (NM_DEVICE_TYPE_MODEM) used in extensions and jarabe
#    + avahi-autoipd (NM_802_11_MODE_ADHOC) used in jarabe
#  * dbus-x11 (bus.get_object) used in bin/sugar-launch, exensions and jarabe
#    + python-carquinyol-* (org.laptop.sugar.DataStore) used in jarabe
#    + upower (org.freedesktop.UPower) used in extensions
#    + consolekit (org.freedesktop.ConsoleKit)
#      or systemd (org.freedesktop.login1) used in jarabe
#    + telepathy-mission-control-5 (ACCOUNT_MANAGER_SERVICE) used in jarabe
#    + ohmd (org.freedesktop.ohm) used in extensions jarabe
#  * metacity used in jarabe
#  * lsb-release (lsb_release) used in extensions
#  * tzdata (/usr/share/zoneinfo) used in extensions
#  * ethtool used in extensions
#  * openssh-client (ssh-keygen) used in jarabe
#  * olpc-powerd (/etc/powerd/flags) needed in extensions
#  * gdb used in bin/sugar-launch
#  * gconf2 (gsettings-data-convert) used in jarabe.main
#  * gvfs needed for GIO removable media support
#  * xdg-user-dirs (xdg-user-dir) used in jarabe
#  * fonts-dejavu-core (Sans Serif) used in data/sugar.schemas
#  * mobile-broadband-provider-info used in extensions
#  * TODO: Tighten to recommend / depend on Maliit when mature
python-depends-session = sugar3 jarabe-$(pkgbranch) dbus cairo
gir-depends-session = glib-2.0 gtk-3.0 pango-1.0 gconf-2.0 xkl-1.0
gir-depends-session += networkmanager-1.0 nmgtk-1.0
depends-session = $(patsubst %,$(comma) python-%,$(python-depends-session))
depends-session +=, $(patsubst %,$(comma) gir1.2-%,$(gir-depends-session))
depends-session +=, sugar-$(pkgbranch)-themes
python-depends-jarabe = sugar3 gwebsockets cairo dbus telepathy xapian
gir-depends-jarabe = gdkpixbuf-2.0 glib-2.0 gtk-3.0 gtksource-3.0
gir-depends-jarabe += gstreamer-1.0 wnck-3.0 sugarext-1.0 pango-1.0
gir-depends-jarabe += gconf-2.0 xkl-1.0 soup-2.4 webkit-3.0
depends-jarabe = $(patsubst %,$(comma) python-%,$(python-depends-jarabe))
depends-jarabe +=, $(patsubst %,$(comma) gir1.2-%,$(gir-depends-jarabe))
depends-jarabe +=, metacity
recommends-session = lsb-release, network-manager, modemmanager, ethtool
recommends-session +=, upower, gvfs, tzdata, fonts-dejavu-core, dbus-x11
recommends-session +=, mobile-broadband-provider-info
recommends-session +=, $(call session_expand_activities,true)
recommends-jarabe = python-carquinyol-$(pkgbranch)
recommends-jarabe +=, dbus-x11, network-manager, modemmanager, gconf2
recommends-jarabe +=, avahi-autoipd, openssh-client, xdg-user-dirs
recommends-jarabe +=, consolekit | systemd
suggests-session = gdb, olpc-powerd
suggests-toolkit = git, ipython
suggests-session-weak = gir1.2-maliit-1.0, maliit-keyboard
suggests-session-only = $(suggests-session-weak), $(pkg-sucrose)
suggests-session-only +=, $(call session_expand_activities_relaxed,true)
suggests-jarabe-only = $(pkg-session)

# Tighten relations in Sucrose metapackage:
#  * Depend on Fructose
#  * Recommend non-Sugar helper parts
#  * Recommend deprecated Glucose parts
#  * Re-suggest weak parts (contrib/non-free/missing)
depends-sucrose = $(pkg-session)
depends-sucrose +=, python-carquinyol-$(pkgbranch)
depends-sucrose +=, $(call session_expand_activities)
recommends-sucrose = $(suggests-session), $(suggests-toolkit)
recommends-sucrose +=, python-sugar-toolkit-0.98 | python-sugar-toolkit
recommends-sucrose +=, python-sugar-0.98 | python-sugar
recommends-sucrose +=, gtk2-engines-sugar-$(pkgbranch)
suggests-sucrose = $(suggests-session-weak)
suggests-sucrose +=, $(call session_expand_activities_relaxed)

CDBS_BUILD_DEPENDS +=, $(bdeps)
CDBS_DEPENDS_$(pkg-session) = $(depends-session)
CDBS_DEPENDS_$(pkg-jarabe) = $(depends-jarabe)
CDBS_DEPENDS_$(pkg-sucrose) = $(depends-sucrose)
CDBS_RECOMMENDS_$(pkg-session) = $(recommends-session)
CDBS_RECOMMENDS_$(pkg-jarabe) = $(recommends-jarabe)
CDBS_RECOMMENDS_$(pkg-sucrose) = $(recommends-sucrose)
CDBS_SUGGESTS_$(pkg-session) = $(suggests-session)
CDBS_SUGGESTS_$(pkg-session) +=, $(suggests-session-only)
CDBS_SUGGESTS_$(pkg-jarabe) = $(suggests-jarabe-only)
CDBS_SUGGESTS_$(pkg-sucrose) = $(suggests-sucrose)

# Ensure only one variant is installed at a time (Debian Policy 7.6.2)
CDBS_PROVIDES_$(pkg-jarabe) = python-jarabe
CDBS_CONFLICTS_$(pkg-jarabe) = python-jarabe
CDBS_REPLACES_$(pkg-jarabe) = python-jarabe
CDBS_PROVIDES_$(pkg-session) = sugar-session
CDBS_CONFLICTS_$(pkg-session) = sugar-session
CDBS_REPLACES_$(pkg-session) = sugar-session

CDBS_BREAKS_$(pkg-session) = sugar-emulator
CDBS_BREAKS_$(pkg-jarabe) = sugar-emulator

# Provide virtual unversioned sugar package
CDBS_PROVIDES_$(pkg-session) +=, sugar

# Transitional hints: sugar-tools-* merged into sugar-session-*
# TODO: drop when no sugar-tools-* are in stable
CDBS_REPLACES_$(pkg-session) +=, sugar-tools
CDBS_BREAKS_$(pkg-session) +=, sugar-tools

DEB_PYTHON_PRIVATE_MODULES_DIRS = /usr/share/sugar

# Generate (and cleanup) files containing variables static per build
infiles = $(filter-out debian/control.in%, $(wildcard debian/*.in))
outfiles = $(subst __VER__,$(pkgbranch),$(basename $(infiles)))
DEB_PHONY_RULES += $(outfiles)
pre-build:: $(outfiles)
$(outfiles):
	sed 's/__VER__/$(pkgbranch)/' <$(subst $(pkgbranch),__VER__,$@).in >$@
clean::
	rm -f $(outfiles)

# Register GConf schemas
post-install/$(pkg-session)::
	mkdir -p $(DEB_DESTDIR)/usr/share/gconf/schemas/
	mv $(DEB_DESTDIR)/etc/gconf/schemas/sugar.schemas $(DEB_DESTDIR)/usr/share/gconf/schemas/
	rmdir $(DEB_DESTDIR)/etc/gconf/schemas
	rmdir $(DEB_DESTDIR)/etc/gconf
binary-install/$(pkg-session)::
	dh_gconf -p$(cdbs_curpkg)

# Ensure optimal hash-bang + dependency for scripts (see Python Policy)
#  * TODO: drop cdbs_python_binary fallback when cdbs 0.5 is stable
CDBS_DEPENDS_$(pkg-session) +=, python
binary-fixup/$(pkg-session)::
	egrep -r -l -Z '^#! ?/usr/bin/(env )?python[[:print:]]*$$' \
		debian/$(cdbs_curpkg)/usr/bin/* \
		| xargs -r -0 perl -pi -e 's,^#! ?/usr/bin/(env )?python[[:print:]]*$$,#!/usr/bin/$(strip $(or $(cdbs_curpythonruntime),$(cdbs_python_binary))),'
