#!/usr/bin/make -f
# -*- mode: makefile; coding: utf-8 -*-
# Copyright 2007-2010, 2012, 2015-2018 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
pkg-jarabe = python-jarabe
pkg-session = sugar-session
DEB_BUILDDIR = build
DEB_PYTHON2_MODULE_PACKAGES = $(pkg-jarabe) $(pkg-session)

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

comma = ,
pkgbranch = $(subst $(space),.,$(wordlist 1, 2,$(subst .,$(space),$(DEB_UPSTREAM_VERSION))))
pkg-sucrose = sucrose

# Adapt packaging in maintainer mode when targeting experimental branch:
#  * Switch git packaging branch
#  * Track any release (else only current branch)
ifneq (,$(DEB_MAINTAINER_MODE))
watch-limit = $(if $(DEB_SUITE_EXP),,$(pkgbranch)\\.)
debian-branch = $(if $(DEB_SUITE_EXP),master,master-$(pkgbranch))
clean::
	perl -i -pe 's/\([\d.\\]*\.\*\)/($(watch-limit).*)/' \
		debian/watch
	perl -i -pe 's/^debian-branch *= *\K.*/$(debian-branch)/' \
		debian/gbp.conf
endif

# Suppress unneeded auto-resolved build-dependency on python-dev
#  * TODO: drop cdbs_python_binary fallback when cdbs 0.4.150 is stable
CDBS_BUILD_DEPENDS_class_python-sugar_python = $(or $(cdbs_python2_defaultruntime),$(cdbs_python_binary))

# 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

# Core activities
# https://wiki.sugarlabs.org/go/Development_Team/Release/Modules#Fructose
fructose = chat browse read calculate log write terminal pippy etoys
fructose += imageviewer jukebox turtleart
# Core activities not in Debian main
fructose-relax = etoys turtleart
pkg-fructose = $(patsubst %,$(comma) sugar-%-activity,\
 $(filter-out $(fructose-relax),$(fructose)))
pkg-fructose-relaxed = $(patsubst %,$(comma) sugar-%-activity,\
 $(fructose-relax))

# Needed (always/often/sometimes) at runtime
#  * Glucose (at least current branch)
#  * 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-session-bus (bus.get_object) used in bin/sugar-launch, bin/sugar-erase-bundle, 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
#  * policykit-1 (pkexec) used in jarabe.model.brightness
#  TODO: Tighten to recommend / depend on Maliit when mature
#  TODO: Drop dbus-x11 fallback after stretch+1
# Never needed at runtime (loaded only on OLPC distribution):
#  * jarabe view.viewhelp_webkit1 (GIR soup-2.4 webkit-3.0)
python-depends-session = sugar3 jarabe dbus cairo
gir-depends-session = glib-2.0 gtk-3.0 pango-1.0 gconf-2.0 xkl-1.0
gir-depends-session += nmgtk-1.0 gudev-1.0 upowerglib-1.0
depends-session = $(patsubst %,$(comma) python-%,$(python-depends-session))
depends-session +=, $(patsubst %,$(comma) gir1.2-%,$(gir-depends-session))
depends-session +=, sugar-themes (>= $(pkgbranch))
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 webkit2-4.0
depends-jarabe = $(patsubst %,$(comma) python-%,$(python-depends-jarabe))
depends-jarabe +=, $(patsubst %,$(comma) gir1.2-%,$(gir-depends-jarabe))
depends-jarabe +=, metacity, policykit-1
recommends-session = lsb-release, network-manager, modemmanager, ethtool
recommends-session +=, upower, gvfs, tzdata, fonts-dejavu-core
recommends-session +=, default-dbus-session-bus | dbus-session-bus | dbus-x11
recommends-session +=, mobile-broadband-provider-info, telepathy-salut
recommends-session +=, $(pkg-fructose)
recommends-jarabe = python-carquinyol
recommends-jarabe +=, default-dbus-session-bus | dbus-session-bus | dbus-x11
recommends-jarabe +=, network-manager, modemmanager, gconf2
recommends-jarabe +=, avahi-autoipd, openssh-client, xdg-user-dirs
recommends-jarabe +=, libpam-systemd | consolekit
suggests-session = gdb-minimal | gdb, olpc-powerd
suggests-toolkit = git, ipython, fonts-dejavu-extra
suggests-activities = python-elements, csound, gstreamer1.0-plugins-bad
suggests-activities +=, gstreamer1.0-plugins-ugly, gstreamer1.0-libav
suggests-fructose +=, python-gst0.10, gstreamer0.10-plugins-base
suggests-fructose +=, gstreamer0.10-plugins-good
suggests-session-weak = gir1.2-maliit-1.0, maliit-keyboard
suggests-session-only = $(suggests-session-weak), $(pkg-sucrose)
suggests-session-only +=, $(pkg-fructose-relaxed)
suggests-jarabe-only = $(pkg-session)

# Tighten relations in Sucrose metapackage:
#  * Depend on Glucose (at least current branch)
#  * Depend on Fructose
#  * Recommend non-Sugar helper parts
#  * Suggest deprecated Glucose parts
#  * Re-suggest weak parts (contrib/non-free/missing)
depends-sucrose = $(pkg-session)
depends-sucrose +=, python-carquinyol
depends-sucrose +=, $(pkg-fructose)
recommends-sucrose = $(suggests-session), $(suggests-toolkit)
recommends-sucrose +=, $(suggests-activities)
suggests-sucrose = $(suggests-fructose), $(suggests-session-weak)
suggests-sucrose +=, $(pkg-fructose-relaxed)
suggests-sucrose +=, python-sugar-toolkit
suggests-sucrose +=, python-sugar
suggests-sucrose +=, gtk2-engines-sugar (>= $(pkgbranch))

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)

# Provide virtual sugar package to ease install
# Provide virtual x-session-manager package to avoid pulling in gnome-session
CDBS_PROVIDES_$(pkg-session) +=, sugar, x-session-manager

# Provide virtual notification-daemon package
CDBS_PROVIDES_$(pkg-jarabe) +=, notification-daemon

DEB_PYTHON_PRIVATE_MODULES_DIRS = /usr/share/sugar

# 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)

# Fix favor ISO 639-1 when differing from ISO 639-2
binary-post-install/$(pkg-session)::
	mv debian/$(cdbs_curpkg)/usr/share/locale/ibo \
		debian/$(cdbs_curpkg)/usr/share/locale/ig

# Ensure optimal hash-bang + dependency for scripts (see Python Policy)
#  * TODO: drop cdbs_python_binary fallback when cdbs 0.4.150 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))),'
