From 82428874f6fd9e0c51217c6245d5d280b1cf9381 Mon Sep 17 00:00:00 2001 From: Patrick Winnertz Date: Sat, 05 Apr 2008 18:43:05 +0000 Subject: Add debian dir --- diff --git a/debian/README.cdbs-tweaks b/debian/README.cdbs-tweaks new file mode 100644 index 0000000..5880b2f --- /dev/null +++ b/debian/README.cdbs-tweaks @@ -0,0 +1,111 @@ +CDBS tweak +========== + +CDBS is great. In some corner cases, however, some parts of CDBS +sometimes needs a few tweaks to work optimally. + +This is a collection of such tweaks. The goal is for these tweaks to be +absorbed into upstream CDBS. We just haven't found time yet to discuss +them at the CDBS developers' mailinglist. And possible we do not all +agree that the tweaks are so great - therefore this "staging area". + +If you found this file below debian/ subdir in a source package, most +probably only a subset of the below mentioned tweaks are relevant and +have been shipped with the package. The repository of all these tweaks +is here: svn://svn.debian.org/build-common/people/js/overlay/ + +Web access: http://svn.debian.org/wsvn/build-common/people/js/overlay/ + + + +New buildinfo rule +------------------ + +See package description for "buildinfo" for more info. + + + +Improved support for multiple compilations +------------------------------------------ + +Create and clean builddir _after_ resolving per-package DEB_BUILDDIR. + +Honour per-package DEB_BUILDDIR in makefile and autotools classes. + +Support multiple build flavors in makefile and autotools classes. + + + +Various improvements to python-distutils class +---------------------------------------------- + +Use full path to Python interpreter (Python Policy section 1.3.2). + +Add CDBS_BUILD_DEPENDS to old policy method. + +Fix CDBS_BUILD_DEPENDS in new policy methods to only depend on debhelper +when actually used. + +Fix DEB_PYTHON_SIMPLE_PACKAGES sometimes installed twice (and only one +of them honouring DEB_PYTHON_COMPILE_VERSION). + +Unify install path using new DEB_PYTHON_DESTDIR. + +Quote install path. + + + +New python-autotools class +-------------------------- + +Handle autotools-based Python packaging. + + + +New python-sugar class +---------------------- + +Handle packaging of Sugar activities. + + + +New copyright-check rule +------------------------ + +Refuse to build if the source is found to contain different copyright +info than earlier builds. + + + +New kernelpatches rule +---------------------- + +Small wrapper around dh-kpatches, taking care of build-dependencies too. + + + +New routines for handling upstream tarball +------------------------------------------ + +Rules and variables to help downloading, validating and repackaging +upstream tarball. + +Implements the rules print-version and get-orig-source commonly used +for group-maintained packages with Debian-specific patches maintained in +SVN or some other VCS, and automated fetching virgin upstream tarball +(possibly massaged after download e.g. to strip non-DFSG material). + + + +Support for custom BTS info +--------------------------- + +Include BTS control info found in debian/*.bts files, or alternatively +redirect bug reports to the email address defined in DEB_BTS_EMAIL. + + + +New dict class +-------------- + +Rules for packaging ispell, aspell, myspell and wordlist dictionaries. diff --git a/debian/README.packaging b/debian/README.packaging new file mode 100644 index 0000000..c0b03a2 --- /dev/null +++ b/debian/README.packaging @@ -0,0 +1,126 @@ +Packaging hints +=============== + +This packaging is maintained with the use of Git, using the following +branches: + + upstream-git - master branch of upstream Git source + upstream - unpackaged upstream tarballs + pristine-tar - binary deltas to recreate pristine tarballs + master - Debian packaging + +With the above, we can switch between working from upstream released +tarballs and syncing directly with upstream development, both using +git-buildpackage (with its default branch names). + + +Package sugar-base as example +----------------------------- + +The rest of this document uses sugar-base as sample package, and some +old actual version numbers from that package - replace with your actual +package as needed... + + +Getting packaging source from Git repository +-------------------------------------------- + +The following commands (in an empty dir) fetch and build the package: + +aptitude install git-buildpackage +git clone git://git.debian.org/git/collab-maint/sugar-base +cd sugar-base +git fetch origin upstream:upstream +git-buildpackage + + +Merging with newer upstream Git tree +------------------------------------ + +The following commands (inside Git repository) updates the local mirror +of upstream source, and merges with our packaging branch: + +cd sugar-base +git checkout upstream-git +git pull +git fetch --tags +git checkout master +git pull . upstream-git + +The following command shows upstream changes possibly relevant to +mention in changelog (replace "HEAD^" with a reference to actual sync +commit if not invoked right after sync'ing): + +git log --pretty="format:%h %s" HEAD^..upstream-git + + +Doing a package release from upstream tarball +--------------------------------------------- + +The following command (inside Git repository) imports a downloaded +tarball into the "upstream" and pristine-tarball Git branches (taball +name is recorded too and used later, so make sure to first rename the +tarball to follow Debian naming convention {name}_{version}.orig.{ext}): + +git-import-orig --pristine-tar --sign-tags path/to/sugar-base_0.79.0.orig.tar.gz + +Check that all files are included in "upstream" branch (don't know why +this fails sometimes): + +git status + +If some files are "untracked", then do the following to manually add +untracked files to upstream branch and merge them with master branch +(the stash commands puts changelog update aside and restore it again +afterwards): + +git stash +git checkout upstream +git add * +git commit -m "Add files mysteriously skipped by git-import-orig." +git checkout master +git pull . upstream +git stash apply + +Comment out tarball hash in debian/control, test get-orig-source, and +enable hash line with new hash: + +fakeroot debian/rules get-orig-source + +Adjust changelog and package, and if satisfied with the result then tag +it, push Git sources and release the package: + +git-buildpackage --git-tag --git-sign-tags +[test package...] +git push --all +git push --tags +cd .. +dput sugar-base_0.79.0-1_amd64.changes + + +Doing a package release from upstream Git snapshot +-------------------------------------------------- + +First, look at upstream development for a good place to release, and tag +by its date, replacing "~" with ".". Normally just tag the latest +upstream commit, to avoid simply including later upstream work in the +debian diff: + +git log --abbrev-commit upstream-git +git tag -s -m "Tag upstream for package release." upstream/0.2.git20080130 61279f8 + +Adjust changelog and package, and if satisfied with the result then tag +it, push Git sources and release the package: + +dch -r -v "0.2~git20080130-0~0jones1" "New upstream Git snapshot." +debcommit -r -a +git-buildpackage +[test package...] +git tag -s -m "Tag package release." debian/0.2.git20080130-0.0jones1 +git push --all +git push --tags +cd .. +dput sugar-base_0.2~git20080130-0~0jones1_amd64.changes + + + -- Jonas Smedegaard Sat, 08 Mar 2008 01:08:36 +0100 diff --git a/debian/cdbs/1/class/python-sugar.mk b/debian/cdbs/1/class/python-sugar.mk new file mode 100644 index 0000000..584a07c --- /dev/null +++ b/debian/cdbs/1/class/python-sugar.mk @@ -0,0 +1,95 @@ +# -*- mode: makefile; coding: utf-8 -*- +# Copyright © 2008 Jonas Smedegaard +# Description: Class to build and install Sugar packages +# +# 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. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02111-1307 USA. +# + +_cdbs_scripts_path ?= /usr/lib/cdbs +_cdbs_rules_path ?= /usr/share/cdbs/1/rules +_cdbs_class_path ?= /usr/share/cdbs/1/class + +ifndef _cdbs_class_python_sugar +_cdbs_class_python_sugar = 1 + +#include $(_cdbs_class_path)/python-vars.mk$(_cdbs_makefile_suffix) +include debian/cdbs/1/class/python-vars.mk +include $(_cdbs_rules_path)/debhelper.mk$(_cdbs_makefile_suffix) + +# Declare Build-Deps for packages using this file +CDBS_BUILD_DEPENDS := $(CDBS_BUILD_DEPENDS), python-sugar, python-sugar-toolkit, unzip +# FIXME: Resolve DEB_PYTHON_PACKAGES in build targets only +ifeq (,$(cdbs_python_pkg_check)$(DEB_PYTHON_ARCH_PACKAGES)) + ifneq (, $(cdbs_python_compile_version)) + CDBS_BUILD_DEPENDS := $(CDBS_BUILD_DEPENDS), python$(cdbs_python_compile_version)-dev, python (>= 2.3.5-11) + else + CDBS_BUILD_DEPENDS := $(CDBS_BUILD_DEPENDS), python-dev (>= 2.3.5-11) + endif +else +CDBS_BUILD_DEPENDS := $(CDBS_BUILD_DEPENDS), python-all-dev (>= 2.3.5-11) +endif +ifeq (pysupport, $(DEB_PYTHON_SYSTEM)) +CDBS_BUILD_DEPENDS := $(CDBS_BUILD_DEPENDS), python-support (>= 0.6) +else +CDBS_BUILD_DEPENDS := $(CDBS_BUILD_DEPENDS), python-central (>= 0.6) +endif + +# Files or `find -name`-compatible search patterns to add to temp MANIFEST +#DEB_PYTHON_SUGAR_MANIFEST = *.py *.po *.pot *.svg + +DEB_PYTHON_SUGAR_MANIFEST_REGEX = +DEB_PYTHON_SUGAR_MANIFEST_IGNORE_REGEX = ^debian/.* + +cdbs_python_sugar_manifest_files_tmp = $(patsubst %,-or -name '%',$(DEB_PYTHON_SUGAR_MANIFEST)) +cdbs_python_sugar_manifest_files = $(wordlist 2, $(words $(cdbs_python_sugar_manifest_files_tmp)), $(cdbs_python_sugar_manifest_files_tmp)) + +common-configure-arch common-configure-indep:: common-configure-impl +common-configure-impl:: + $(if $(DEB_PYTHON_SUGAR_MANIFEST),i=$(DEB_SRCDIR)/MANIFEST; if [ -e $$i ] && [ ! -e $$i.cdbs-orig ]; then mv $$i $$i.cdbs-orig; fi) + $(if $(DEB_PYTHON_SUGAR_MANIFEST),cd $(DEB_SRCDIR) && find * -type f $(cdbs_python_sugar_manifest_files) $(if $(DEB_PYTHON_SUGAR_MANIFEST_REGEX),-regex '$(DEB_PYTHON_SUGAR_MANIFEST_REGEX)') $(if $(DEB_PYTHON_SUGAR_MANIFEST_IGNORE_REGEX),-not -regex '$(DEB_PYTHON_SUGAR_MANIFEST_IGNORE_REGEX))' > MANIFEST) + +$(patsubst %,build/%,$(DEB_PACKAGES)) :: build/%: + for pythonver in $(cdbs_python_build_versions); do \ + /usr/bin/python$$ver setup.py dist; \ + done + +$(patsubst %,install/%,$(DEB_PACKAGES)) :: install/%: + mkdir -p $(DEB_DESTDIR)usr/share/activities + for pythonver in $(cdbs_python_build_versions); do \ + /usr/bin/python$$ver setup.py install $(DEB_DESTDIR)usr; \ + done + +$(patsubst %,binary-install/%,$(DEB_PACKAGES)) :: binary-install/%: +ifeq (pysupport, $(DEB_PYTHON_SYSTEM)) + dh_pysupport -p$(cdbs_curpkg) $(DEB_PYTHON_PRIVATE_MODULES_DIRS) $(DEB_PYTHON_PRIVATE_MODULES_DIRS_$(cdbs_curpkg)) +else + dh_pycentral -p$(cdbs_curpkg) +endif + +clean:: + for pythonver in $(cdbs_python_build_versions); do \ + /usr/bin/python$$ver setup.py clean; \ + done + $(if $(DEB_PYTHON_SUGAR_MANIFEST),i=$(DEB_SRCDIR)/MANIFEST; if test -e $$i.cdbs-orig ; then mv -f $$i.cdbs-orig $$i; fi) +ifeq (, $(cdbs_selected_pycompat)) + echo "$(cdbs_pycompat)" >debian/pycompat +endif # use pycompat + +## TODO: Drop this when DEB_PYTHON_PACKAGES is only resolved in build targets +pre-build clean:: + $(cdbs_python_pkgresolve_check) + +endif diff --git a/debian/cdbs/1/class/python-vars.mk b/debian/cdbs/1/class/python-vars.mk new file mode 100644 index 0000000..3f78176 --- /dev/null +++ b/debian/cdbs/1/class/python-vars.mk @@ -0,0 +1,110 @@ +# -*- mode: makefile; coding: utf-8 -*- +# Copyright © 2008 Jonas Smedegaard +# Copyright © 2008 Jonas Smedegaard +# Description: Defines useful variables for Python packages +# +# 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. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02111-1307 USA. +# + + +_cdbs_scripts_path ?= /usr/lib/cdbs +_cdbs_rules_path ?= /usr/share/cdbs/1/rules +_cdbs_class_path ?= /usr/share/cdbs/1/class + +ifndef _cdbs_class_python_vars +_cdbs_class_python_vars = 1 + +include $(_cdbs_rules_path)/buildvars.mk$(_cdbs_makefile_suffix) + +DEB_PYTHON_PACKAGES = $(filter-out %-doc %-dev %-common, $(DEB_PACKAGES)) + +DEB_PYTHON_ARCH_PACKAGES = $(filter $(DEB_PYTHON_PACKAGES), $(DEB_ARCH_PACKAGES)) +DEB_PYTHON_INDEP_PACKAGES = $(filter $(DEB_PYTHON_PACKAGES), $(DEB_INDEP_PACKAGES)) + +## FIXME: Resolve DEB_PYTHON_PACKAGES in build targets only +# Avoid including buildcore.mk to not risk breaking when hopefully removing again +cdbs_python_streq = $(if $(filter-out xx,x$(subst $1,,$2)$(subst $2,,$1)x),,yes) +cdbs_python_packages_pre := $(DEB_PYTHON_ARCH_PACKAGES)$(DEB_PYTHON_INDEP_PACKAGES) +cdbs_python_pkgresolve_check = $(if $(call cdbs_python_streq,$(DEB_PYTHON_ARCH_PACKAGES)$(DEB_PYTHON_INDEP_PACKAGES),$(cdbs_python_packages_pre)),, $(warning Setting DEB_PYTHON_*PACKAGES after python-vars in included is currently unsupported)) +## TODO: Rephrase when DEB_PYTHON_PACKAGES is only resolved in build targets +cdbs_python_pkg_check = $(if $(DEB_PYTHON_ARCH_PACKAGES)$(DEB_PYTHON_INDEP_PACKAGES),, $(warning No Python packages found or declared - either rename binary packages or set DEB_PYTHON_PACKAGES (or one or both of DEB_PYTHON_ARCH_PACKAGES and DEB_PYTHON_INDEP_PACKAGES) before including python-vars.mk)) + +# check python system +cdbs_use_xs_field := $(shell grep -q "^XS-Python-Version:" debian/control && echo yes) +cdbs_selected_pycompat := $(shell if [ -e debian/pycompat ]; then cat debian/pycompat; fi) +cdbs_pycompat = $(cdbs_selected_pycompat) +ifeq (pysupport, $(DEB_PYTHON_SYSTEM)) + ifeq (, $(cdbs_selected_pycompat)) + cdbs_pycompat = 2 + endif # use pycompat + # warning pysupport compatibility mode + ifneq (, $(cdbs_use_xs_field)) + $(warning Use of XS-Python-Version and XB-Python-Version fields in 'debian/control' is deprecated with pysupport method, use 'debian/pyversions' if you need to specify specific versions) + endif # use XS field (compat) +else + ifeq (pycentral, $(DEB_PYTHON_SYSTEM)) + ifeq (, $(cdbs_selected_pycompat)) + cdbs_pycompat = 2 + endif # use pycompat + else + ifneq (, $(DEB_PYTHON_SYSTEM)) + $(error unsupported Python system: $(DEB_PYTHON_SYSTEM) (select either pysupport or pycentral)) + else + ifneq (, $(cdbs_use_xs_field)) + $(error Your package uses the new Python policy; you must set DEB_PYTHON_SYSTEM to "pysupport" or "pycentral".) + endif + ifneq (, $(cdbs_selected_pycompat)) + ifeq (yes, $(shell expr $(cdbs_selected_pycompat) \> 1 >/dev/null && echo yes)) + $(error Your package uses the new Python policy; you must set DEB_PYTHON_SYSTEM to "pysupport" or "pycentral".) + endif + endif # use pycompat + endif # unknown method + endif # pycentral +endif # pysupport + +# Calculate cdbs_python_build_versions +cdbs_python_current_version := $(shell pyversions -vd) +## FIXME: Resolve DEB_PYTHON_PACKAGES in build targets only +ifeq (,$(cdbs_python_pkg_check)$(DEB_PYTHON_ARCH_PACKAGES)) + # check if current is in build versions + ifneq ($(cdbs_python_current_version), $(filter $(cdbs_python_current_version), $(shell pyversions -vr))) + cdbs_python_compile_version := $(firstword $(strip $(sort $(shell pyversions -vr)))) + cdbs_python_build_versions := $(cdbs_python_compile_version) + else + cdbs_python_build_versions := $(cdbs_python_current_version) + endif +else +cdbs_python_build_versions := $(shell pyversions -vr) +endif # archall + +# check if build is possible +ifeq (, $(cdbs_python_build_versions)) +ifeq (pysupport, $(DEB_PYTHON_SYSTEM)) +$(error invalid setting in 'debian/pyversions') +else +$(error invalid setting for XS-Python-Version) +endif # system selected +endif # build versions empty + +# TODO: Support multiple python programs built for different python versions +# FIXME: Understand the above sentence and rephrase it +cdbs_python_curpkg_build_versions = $(cdbs_python_build_versions) + +## TODO: Drop this when DEB_PYTHON_PACKAGES is only resolved in build targets +pre-build clean:: + $(cdbs_python_pkgresolve_check) + +endif diff --git a/debian/cdbs/1/rules/buildinfo.mk b/debian/cdbs/1/rules/buildinfo.mk new file mode 100644 index 0000000..bd62ee5 --- /dev/null +++ b/debian/cdbs/1/rules/buildinfo.mk @@ -0,0 +1,40 @@ +# -*- mode: makefile; coding: utf-8 -*- +# Copyright © 2004-2006 Jonas Smedegaard +# Description: Generate and include build information +# +# 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. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +# 02111-1307 USA. + +_cdbs_scripts_path ?= /usr/lib/cdbs +_cdbs_rules_path ?= /usr/share/cdbs/1/rules +_cdbs_class_path ?= /usr/share/cdbs/1/class + +ifndef _cdbs_rules_buildinfo +_cdbs_rules_buildinfo = 1 + +include $(_cdbs_rules_path)/buildcore.mk$(_cdbs_makefile_suffix) + +CDBS_BUILD_DEPENDS := $(CDBS_BUILD_DEPENDS), dh-buildinfo + +common-install-arch common-install-indep:: debian/stamp-buildinfo + +debian/stamp-buildinfo: + dh_buildinfo + touch debian/stamp-buildinfo + +clean:: + rm -f debian/stamp-buildinfo + +endif diff --git a/debian/cdbs/1/rules/copyright-check.mk b/debian/cdbs/1/rules/copyright-check.mk new file mode 100644 index 0000000..d4ead0d --- /dev/null +++ b/debian/cdbs/1/rules/copyright-check.mk @@ -0,0 +1,93 @@ +# -*- mode: makefile; coding: utf-8 -*- +# Copyright © 2005-2008 Jonas Smedegaard +# Description: Check for changes to copyright notices in source +# +# 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. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +# 02111-1307 USA. + +_cdbs_scripts_path ?= /usr/lib/cdbs +_cdbs_rules_path ?= /usr/share/cdbs/1/rules +_cdbs_class_path ?= /usr/share/cdbs/1/class + +ifndef _cdbs_rules_copyright-check +_cdbs_rules_copyright-check := 1 + +include $(_cdbs_rules_path)/buildcore.mk$(_cdbs_makefile_suffix) + +CDBS_BUILD_DEPENDS := $(CDBS_BUILD_DEPENDS), devscripts (>= 2.10.7) + +# Single regular expression for files to include or ignore +DEB_COPYRIGHT_CHECK_REGEX = .* +DEB_COPYRIGHT_CHECK_IGNORE_REGEX = ^(debian/.*|(.*/)?config\.(guess|sub|rpath)(\..*)?)$ + +pre-build:: debian/stamp-copyright-check + +debian/stamp-copyright-check: + @echo 'Scanning upstream source for new/changed copyright notices (except debian subdir!)...' + +# Perl in shell in make requires extra care: +# * Single-quoting ('...') protects against shell expansion +# * Double-dollar ($$) expands to plain dollar ($) in make + licensecheck -c '$(DEB_COPYRIGHT_CHECK_REGEX)' -r --copyright -i '$(DEB_COPYRIGHT_CHECK_IGNORE_REGEX)' * \ + | LC_ALL=C perl -e \ + '$$n=0; while (<>) {'\ + ' if (/^([^:\s][^:]+):[\s]+(\S.*?)\s*$$/) {'\ + ' $$files[$$n]{name}=$$1;'\ + ' $$files[$$n]{license}=$$2;'\ + ' };'\ + ' if (/^\s*\[Copyright:\s*(\S.*?)\s*\]/) {'\ + ' $$files[$$n]{copyright}=$$1;'\ + ' };'\ + ' /^$$/ and $$n++;'\ + '};'\ + 'foreach $$file (@files) {'\ + ' $$file->{license} =~ s/\s*\(with incorrect FSF address\)//;'\ + ' $$file->{license} =~ s/\s+\(v([^)]+) or later\)/-$$1+/;'\ + ' $$file->{copyright} =~ s/(?<=(\b\d{4}))(?{$$y=$$^N})\s*[,-]\s*((??{$$y+1}))\b/-$$2/g;'\ + ' $$file->{copyright} =~ s/(?<=\b\d{4})\s*-\s*\d{4}(?=\s*-\s*(\d{4})\b)//g;'\ + ' $$pattern = "$$file->{license} [$$file->{copyright}]";'\ + ' push @{ $$patternfiles{"$$pattern"} }, $$file->{name};'\ + '};'\ + 'foreach $$pattern ( sort {'\ + ' @{$$patternfiles{$$b}} <=> @{$$patternfiles{$$a}}'\ + ' ||'\ + ' $$a cmp $$b'\ + ' } keys %patternfiles ) {'\ + ' print "$$pattern: ", join(", ", sort @{ $$patternfiles{$$pattern} }), "\n";'\ + '};'\ + > debian/copyright_newhints + @patterncount="`cat debian/copyright_newhints | sed 's/^[^:]*://' | LANG=C sort -u | grep . -c -`"; \ + echo "Found $$patterncount different copyright and licensing combinations." + @if [ ! -f debian/copyright_hints ]; then touch debian/copyright_hints; fi + @newstrings=`diff -u debian/copyright_hints debian/copyright_newhints | sed '1,2d' | egrep '^\+' - | sed 's/^\+//'`; \ + if [ -n "$$newstrings" ]; then \ + echo "ERROR: The following new or changed copyright notices discovered:"; \ + echo; \ + echo "$$newstrings"; \ + echo; \ + echo "To fix the situation please do the following:"; \ + echo " 1) Investigate the above changes and update debian/copyright as needed"; \ + echo " 2) Replace debian/copyright_hints with debian/copyright_newhints"; \ + exit 1; \ + fi + + @echo 'No new copyright notices found - assuming no news is good news...' + rm -f debian/copyright_newhints + touch $@ + +clean:: + rm -f debian/stamp-copyright-check + +endif diff --git a/debian/cdbs/1/rules/upstream-tarball.mk b/debian/cdbs/1/rules/upstream-tarball.mk new file mode 100644 index 0000000..55b2f56 --- /dev/null +++ b/debian/cdbs/1/rules/upstream-tarball.mk @@ -0,0 +1,139 @@ +# -*- mode: makefile; coding: utf-8 -*- +# Copyright © 2007-2008 Jonas Smedegaard +# Description: Convenience rules for dealing with upstream tarballs +# +# 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. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +# 02111-1307 USA. + +_cdbs_scripts_path ?= /usr/lib/cdbs +_cdbs_rules_path ?= /usr/share/cdbs/1/rules +_cdbs_class_path ?= /usr/share/cdbs/1/class + +ifndef _cdbs_rules_upstream_tarball +_cdbs_rules_upstream_tarball := 1 + +include $(_cdbs_rules_path)/buildvars.mk$(_cdbs_makefile_suffix) + +CDBS_BUILD_DEPENDS := $(CDBS_BUILD_DEPENDS), cdbs (>= 0.4.39) + +# Prefix for upstream location of all upstream tarballs (mandatory!) +#DEB_UPSTREAM_URL = + +DEB_UPSTREAM_PACKAGE = $(DEB_SOURCE_PACKAGE) +DEB_UPSTREAM_TARBALL_VERSION = $(if $(strip $(DEB_UPSTREAM_REPACKAGE_EXCLUDE)),$(DEB_UPSTREAM_VERSION:$(DEB_UPSTREAM_REPACKAGE_DELIMITER)$(DEB_UPSTREAM_REPACKAGE_TAG)=),$(DEB_UPSTREAM_VERSION)) +DEB_UPSTREAM_TARBALL_EXTENSION = tar.gz +# Checksum to ensure integrity of downloadeds using get-orig-source (optional) +#DEB_UPSTREAM_TARBALL_MD5 = + +DEB_UPSTREAM_WORKDIR = ../tarballs + +# Perl regexp to change locally used string into that in upstream URL and srcdir +#DEB_UPSTREAM_TARBALL_VERSION_MANGLE +cdbs_upstream_tarball_version_mangled = $(if $(strip $(DEB_UPSTREAM_TARBALL_VERSION_MANGLE)),$(shell echo '$(DEB_UPSTREAM_TARBALL_VERSION)' | perl -pe '$(DEB_UPSTREAM_TARBALL_VERSION_MANGLE)'),$(DEB_UPSTREAM_TARBALL_VERSION)) + +# Base filename (without extension) as used in upstream URL +DEB_UPSTREAM_TARBALL_BASENAME = $(DEB_UPSTREAM_PACKAGE)-$(cdbs_upstream_tarball_version_mangled) + +# Base directory within tarball +DEB_UPSTREAM_TARBALL_SRCDIR = $(DEB_UPSTREAM_PACKAGE)-$(cdbs_upstream_tarball_version_mangled) + +# Space-delimited list of directories and files to strip (optional) +#DEB_UPSTREAM_REPACKAGE_EXCLUDE = CVS .cvsignore doc/rfc*.txt doc/draft*.txt +DEB_UPSTREAM_REPACKAGE_TAG = dfsg +DEB_UPSTREAM_REPACKAGE_DELIMITER = ~ + +cdbs_upstream_tarball = $(DEB_UPSTREAM_TARBALL_BASENAME).$(DEB_UPSTREAM_TARBALL_EXTENSION) +cdbs_upstream_local_tarball = $(DEB_SOURCE_PACKAGE)_$(DEB_UPSTREAM_TARBALL_VERSION).orig.$(if $(findstring $(DEB_UPSTREAM_TARBALL_EXTENSION),tgz),tar.gz,$(DEB_UPSTREAM_TARBALL_EXTENSION)) +cdbs_upstream_repackaged_basename = $(DEB_SOURCE_PACKAGE)_$(DEB_UPSTREAM_TARBALL_VERSION)$(DEB_UPSTREAM_REPACKAGE_DELIMITER)$(DEB_UPSTREAM_REPACKAGE_TAG).orig +cdbs_upstream_uncompressed_tarball = $(DEB_SOURCE_PACKAGE)_$(DEB_UPSTREAM_TARBALL_VERSION).orig.tar + +# # These variables are deprecated +_cdbs_deprecated_vars += DEB_UPSTREAM_TARBALL DEB_UPSTREAM_LOCAL_TARBALL DEB_UPSTREAM_REPACKAGE_TARBALL +_cdbs_deprecated_vars += DEB_UPSTREAM_REPACKAGE_EXCLUDES +DEB_UPSTREAM_REPACKAGE_EXCLUDE += $(DEB_UPSTREAM_REPACKAGE_EXCLUDES) + +print-version: + @@echo "Debian version: $(DEB_VERSION)" + @@echo "Upstream version: $(DEB_UPSTREAM_TARBALL_VERSION)" + +get-orig-source: + @@dh_testdir + @@mkdir -p "$(DEB_UPSTREAM_WORKDIR)" + + @if [ ! -s "$(DEB_UPSTREAM_WORKDIR)/$(cdbs_upstream_local_tarball)" ] ; then \ + if [ -f "$(DEB_UPSTREAM_WORKDIR)/$(cdbs_upstream_local_tarball)" ] ; then \ + rm "$(DEB_UPSTREAM_WORKDIR)/$(cdbs_upstream_local_tarball)" ; \ + fi ; \ + echo "Downloading $(cdbs_upstream_local_tarball) from $(DEB_UPSTREAM_URL)/$(cdbs_upstream_tarball) ..." ; \ + wget -N -nv -T10 -t3 -O "$(DEB_UPSTREAM_WORKDIR)/$(cdbs_upstream_local_tarball)" "$(DEB_UPSTREAM_URL)/$(cdbs_upstream_tarball)" ; \ + else \ + echo "Upstream source tarball have been already downloaded: $(DEB_UPSTREAM_WORKDIR)/$(cdbs_upstream_local_tarball)" ; \ + fi + + @md5current=`md5sum "$(DEB_UPSTREAM_WORKDIR)/$(cdbs_upstream_local_tarball)" | sed -e 's/ .*//'`; \ + if [ -n "$(DEB_UPSTREAM_TARBALL_MD5)" ] ; then \ + if [ "$$md5current" != "$(DEB_UPSTREAM_TARBALL_MD5)" ] ; then \ + echo "Expecting upstream tarball md5sum $(DEB_UPSTREAM_TARBALL_MD5), but $$md5current found" ; \ + echo "Upstream tarball md5sum is NOT trusted! Possible upstream tarball forge!" ; \ + echo "Purging downloaded file. Try new download." ; \ + rm -f "$(DEB_UPSTREAM_WORKDIR)/$(cdbs_upstream_local_tarball)" ; \ + false ; \ + else \ + echo "Upstream tarball is trusted!" ; \ + fi; \ + else \ + echo "Upstream tarball NOT trusted (current md5sum is $$md5current)!" ; \ + fi + +# TODO: Rewrite using make variables like cdbs_upstream_unpack_cmd and +# DEB_UPSTREAM_SUPPORTED_COMPRESSIONS (recent dpkg supports bz2) + @untar="tar -x -C"; \ + case "$(cdbs_upstream_local_tarball)" in \ + *.tar.gz) unpack="gunzip -c";; \ + *.tar.bz2) unpack="bunzip2 -c"; uncompress="bunzip2";; \ + *.tar.Z) unpack="uncompress -c"; uncompress="uncompress";; \ + *.zip) unpack="unzip -q"; uncompress="false"; untar="-d"; nopipe="true";; \ + *.tar) unpack="cat"; uncompress="true";; \ + *) echo "Unknown extension for upstream tarball $(cdbs_upstream_local_tarball)"; false;; \ + esac && \ + if [ -n "$(strip $(DEB_UPSTREAM_REPACKAGE_EXCLUDE))" ] || [ "$$uncompress" = "false" ]; then \ + echo "Repackaging tarball ..." && \ + mkdir -p "$(DEB_UPSTREAM_WORKDIR)/$(DEB_UPSTREAM_REPACKAGE_TAG)" && \ + if [ -n "$$nopipe" ]; then \ + $$unpack "$(DEB_UPSTREAM_WORKDIR)/$(cdbs_upstream_local_tarball)" \ + $$untar "$(DEB_UPSTREAM_WORKDIR)/$(DEB_UPSTREAM_REPACKAGE_TAG)" $(patsubst %,--exclude='%',$(DEB_UPSTREAM_REPACKAGE_EXCLUDE)); \ + else \ + $$unpack "$(DEB_UPSTREAM_WORKDIR)/$(cdbs_upstream_local_tarball)" \ + | $$untar "$(DEB_UPSTREAM_WORKDIR)/$(DEB_UPSTREAM_REPACKAGE_TAG)" $(patsubst %,--exclude='%',$(DEB_UPSTREAM_REPACKAGE_EXCLUDE)); \ + fi && \ + if [ "$(DEB_UPSTREAM_TARBALL_SRCDIR)" != "$(cdbs_upstream_repackaged_basename)" ]; then \ + mv -T "$(DEB_UPSTREAM_WORKDIR)/$(DEB_UPSTREAM_REPACKAGE_TAG)/$(DEB_UPSTREAM_TARBALL_SRCDIR)" "$(DEB_UPSTREAM_WORKDIR)/$(DEB_UPSTREAM_REPACKAGE_TAG)/$(cdbs_upstream_repackaged_basename)"; \ + fi && \ + if [ -n "$(strip $(DEB_UPSTREAM_REPACKAGE_EXCLUDE))" ]; then \ + GZIP=-9 tar -b1 -czf "$(DEB_UPSTREAM_WORKDIR)/$(cdbs_upstream_repackaged_basename).tar.gz" -C "$(DEB_UPSTREAM_WORKDIR)/$(DEB_UPSTREAM_REPACKAGE_TAG)" "$(cdbs_upstream_repackaged_basename)"; \ + else \ + GZIP=-9 tar -b1 -czf "$(DEB_UPSTREAM_WORKDIR)/$(cdbs_upstream_uncompressed_tarball).gz" -C "$(DEB_UPSTREAM_WORKDIR)/$(DEB_UPSTREAM_REPACKAGE_TAG)" "$(cdbs_upstream_repackaged_basename)"; \ + fi && \ + echo "Cleaning up" && \ + rm -rf "$(DEB_UPSTREAM_WORKDIR)/$(DEB_UPSTREAM_REPACKAGE_TAG)"; \ + elif [ -n "$$uncompress" ]; then \ + echo "Recompressing tarball ..." && \ + $$uncompress "$(DEB_UPSTREAM_WORKDIR)/$(cdbs_upstream_local_tarball)"; \ + gzip -9 "$(DEB_UPSTREAM_WORKDIR)/$(cdbs_upstream_uncompressed_tarball)"; \ + fi + +DEB_PHONY_RULES += print-version get-orig-source + +endif diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..8960399 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,5 @@ +sugar-memorize-activity (26~git.20080405-1) unstable; urgency=low + + * Initial release. + + -- Patrick Winnertz Sat, 05 Apr 2008 20:01:41 +0200 diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..7ed6ff8 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +5 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..cd7a1fa --- /dev/null +++ b/debian/control @@ -0,0 +1,27 @@ +Source: sugar-memorize-activity +Section: x11 +Priority: optional +Maintainer: Debian OLPC +Uploaders: Jonas Smedegaard , Patrick Winnertz +Build-Depends: devscripts (>= 2.10.7), quilt, patchutils (>= 0.2.25), cdbs (>= 0.4.27), debhelper (>= 5), python-sugar, python-sugar-toolkit, unzip, python-dev (>= 2.3.5-11), python-central (>= 0.6), dh-buildinfo +Standards-Version: 3.7.3 +Vcs-Git: git://git.debian.org/git/collab-maint/sugar-memorize-activity.git +Vcs-Browser: http://git.debian.org/?p=collab-maint/sugar-memorize-activity.git;a=summary +Homepage: http://wiki.laptop.org/go/Sugar +XS-Python-Version: all + +Package: sugar-memorize-activity +Architecture: all +Depends: ${shlibs:Depends}, ${python:Depends}, python-gobject, python-gtk2, python-sugar, python-sugar-toolkit, sugar-presence-service, sugar-sharedstate-classes +Recommends: sugar +Provides: ${python:Provides} +XB-Python-Version: ${python:Versions} +Description: memorize activity for the Sugar graphical shell + Sugar is a graphical user interface aimed at children. + . + Sugar is mainly used as the interface for One Laptop Per Child (OLPC) + XO machines. + . + This package contains the memorize activity, providing a easy + memory game. The interface is very intuitive and should therefore be easy + to use for the youngest children. diff --git a/debian/control.in b/debian/control.in new file mode 100644 index 0000000..dd8b911 --- /dev/null +++ b/debian/control.in @@ -0,0 +1,28 @@ +Source: sugar-calculate-activity +Section: x11 +Priority: optional +Maintainer: Debian OLPC +Uploaders: Jonas Smedegaard +Build-Depends: @cdbs@ +Standards-Version: 3.7.3 +Vcs-Git: git://git.debian.org/git/collab-maint/sugar-calculate-activity.git +Vcs-Browser: http://git.debian.org/?p=collab-maint/sugar-calculate-activity.git;a=summary +Homepage: http://wiki.laptop.org/go/Sugar +XS-Python-Version: all + +Package: sugar-calculate-activity +Architecture: all +Depends: ${shlibs:Depends}, ${python:Depends}, python-gobject, python-gtk2, python-sugar, python-sugar-toolkit, sugar-presence-service, sugar-sharedstate-classes +Recommends: sugar +Provides: ${python:Provides} +XB-Python-Version: ${python:Versions} +Description: calculate activity for the Sugar graphical shell + Sugar is a graphical user interface aimed at children. + . + Sugar is mainly used as the interface for One Laptop Per Child (OLPC) + XO machines. + . + This package contains the calculate activity, providing a generic + calculator. The interface provides the simplest functions directly and + should therefore be easy to use for the youngest children. However, it + does support more complicated math and variables. diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..79f197f --- /dev/null +++ b/debian/copyright @@ -0,0 +1,31 @@ +This is Sugar Calculate activity packaged for Debian GNU systems. + +Upstream Git source: git://dev.laptop.org + +Upstream author: One Laptop Per Child + +Files: debian/* +Copyright: © 2008 Jonas Smedegaard + © 2008 Patrick Winnertz +License: GPL-2+ + The Debian packaging information is under the GPL, version 2 or later. + +Files: setup.py +Copyright: Red Hat, Inc +License: GPL-2+ + 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 of the License, or + (at your option) any later version. + +Files: * +Copyright: One Laptop Per Child +License: GPL-2+ + 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 of the License, or + (at your option) any later version. + +On Debian systems, the complete text of the GNU General Public License +can be found in file "/usr/share/common-licenses/GPL", and that of the +GNU Lesser General Public License in "/usr/share/common-licenses/LGPL". diff --git a/debian/copyright_hints b/debian/copyright_hints new file mode 100644 index 0000000..cf17994 --- /dev/null +++ b/debian/copyright_hints @@ -0,0 +1 @@ +*No copyright* UNKNOWN []: AUTHORS, NEWS, activity/activity-memorize.svg, activity/activity.info, activity/application-x-memorize-project.svg, csound/__init__.py, csound/csoundserver.py, csound/univorc.csd,demos/addition.zip, demos/letters.zip, demos/sounds.zip, images/card.svg, images/equal_pairs1.svg, images/equal_pairs2.svg, images/game-load.svg, images/game-new.svg, images/game-restart.svg, images/game-save.svg, images/import_picture.svg, images/import_sound.svg, images/pair-add.svg, images/pair-update.svg, images/score.svg, images/stock-buddy.svg, locale/am/LC_MESSAGES/org.laptop.Memorize.mo, locale/am/activity.linfo, locale/ar/LC_MESSAGES/org.laptop.Memorize.mo, locale/ar/activity.linfo, locale/ay/LC_MESSAGES/org.laptop.Memorize.mo, locale/ay/activity.linfo, locale/bg/LC_MESSAGES/org.laptop.Memorize.mo, locale/bg/activity.linfo, locale/bn/LC_MESSAGES/org.laptop.Memorize.mo, locale/bn/activity.linfo, locale/bn_IN/LC_MESSAGES/org.laptop.Memorize.mo, locale/bn_IN/activity.linfo, locale/ca/LC_MESSAGES/org.laptop.Memorize.mo, locale/ca/activity.linfo, locale/de/LC_MESSAGES/org.laptop.Memorize.mo, locale/de/activity.linfo, locale/dz/LC_MESSAGES/org.laptop.Memorize.mo, locale/dz/activity.linfo, locale/el/LC_MESSAGES/org.laptop.Memorize.mo, locale/el/activity.linfo, locale/en/LC_MESSAGES/org.laptop.Memorize.mo, locale/en/activity.linfo, locale/es/LC_MESSAGES/org.laptop.Memorize.mo, locale/es/activity.linfo, locale/fa/LC_MESSAGES/org.laptop.Memorize.mo, locale/fa/activity.linfo, locale/fa_AF/LC_MESSAGES/org.laptop.Memorize.mo, locale/fa_AF/activity.linfo, locale/ff/LC_MESSAGES/org.laptop.Memorize.mo, locale/ff/activity.linfo, locale/fr/LC_MESSAGES/org.laptop.Memorize.mo, locale/fr/activity.linfo, locale/ha/LC_MESSAGES/org.laptop.Memorize.mo, locale/ha/activity.linfo, locale/hi/LC_MESSAGES/org.laptop.Memorize.mo, locale/hi/activity.linfo, locale/ig/LC_MESSAGES/org.laptop.Memorize.mo, locale/ig/activity.linfo, locale/is/LC_MESSAGES/org.laptop.Memorize.mo, locale/is/activity.linfo, locale/it/LC_MESSAGES/org.laptop.Memorize.mo, locale/it/activity.linfo, locale/ja/LC_MESSAGES/org.laptop.Memorize.mo, locale/ja/activity.linfo, locale/ko/LC_MESSAGES/org.laptop.Memorize.mo, locale/ko/activity.linfo, locale/mk/LC_MESSAGES/org.laptop.Memorize.mo, locale/mk/activity.linfo, locale/ml/LC_MESSAGES/org.laptop.Memorize.mo, locale/ml/activity.linfo, locale/mn/LC_MESSAGES/org.laptop.Memorize.mo, locale/mn/activity.linfo, locale/ne/LC_MESSAGES/org.laptop.Memorize.mo, locale/ne/activity.linfo, locale/nl/LC_MESSAGES/org.laptop.Memorize.mo, locale/nl/activity.linfo, locale/pa/LC_MESSAGES/org.laptop.Memorize.mo, locale/pa/activity.linfo, locale/pl/LC_MESSAGES/org.laptop.Memorize.mo, locale/pl/activity.linfo, locale/ps/LC_MESSAGES/org.laptop.Memorize.mo, locale/ps/activity.linfo, locale/pt/LC_MESSAGES/org.laptop.Memorize.mo, locale/pt/activity.linfo, locale/pt_BR/LC_MESSAGES/org.laptop.Memorize.mo, locale/pt_BR/activity.linfo, locale/qu/LC_MESSAGES/org.laptop.Memorize.mo, locale/qu/activity.linfo, locale/ro/LC_MESSAGES/org.laptop.Memorize.mo, locale/ro/activity.linfo, locale/ru/LC_MESSAGES/org.laptop.Memorize.mo, locale/ru/activity.linfo, locale/rw/LC_MESSAGES/org.laptop.Memorize.mo, locale/rw/activity.linfo, locale/te/LC_MESSAGES/org.laptop.Memorize.mo, locale/te/activity.linfo, locale/th/LC_MESSAGES/org.laptop.Memorize.mo, locale/th/activity.linfo, locale/ur/LC_MESSAGES/org.laptop.Memorize.mo, locale/ur/activity.linfo, locale/yo/LC_MESSAGES/org.laptop.Memorize.mo, locale/yo/activity.linfo, locale/zh_CN/LC_MESSAGES/org.laptop.Memorize.mo, locale/zh_CN/activity.linfo, locale/zh_TW/LC_MESSAGES/org.laptop.Memorize.mo, locale/zh_TW/activity.linfo, memorize.dtd, po/am.po, po/ar.po, po/ay.po, po/bg.po, po/bn.po, po/bn_IN.po, po/ca.po, po/de.po, po/dz.po, po/el.po, po/en.po, po/es.po, po/fa.po, po/fa_AF.po, po/ff.po, po/fr.po, po/gu.po, po/ha.po, po/hi.po, po/ht.po, po/ig.po, po/is.po, po/it.po, po/ja.po, po/ko.po, po/mk.po, po/ml.po, po/mn.po, po/mr.po, po/ne.po, po/nl.po, po/pa.po, po/pl.po, po/ps.po, po/pt.po, po/pt_BR.po, po/qu.po, po/ro.po, po/ru.po, po/rw.po, po/si.po, po/te.po, po/th.po, po/tr.po, po/ur.po, po/vi.po, po/yo.po, po/zh_CN.po, po/zh_TW.po diff --git a/debian/links b/debian/links new file mode 100644 index 0000000..5aa36ef --- /dev/null +++ b/debian/links @@ -0,0 +1 @@ +/usr/share/sugar/sharedstate /usr/share/activities/Calculate.activity/sharedstate diff --git a/debian/pycompat b/debian/pycompat new file mode 100644 index 0000000..0cfbf08 --- /dev/null +++ b/debian/pycompat @@ -0,0 +1 @@ +2 diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..532b135 --- /dev/null +++ b/debian/rules @@ -0,0 +1,16 @@ +#!/usr/bin/make -f +# -*- mode: makefile; coding: utf-8 -*- +# Copyright © 2008 Jonas Smedegaard + +# NB! Local CDBS tweaks in use. More info in README.cdbs-tweaks +DEB_PYTHON_SYSTEM = pycentral +include debian/cdbs/1/rules/copyright-check.mk +include /usr/share/cdbs/1/rules/patchsys-quilt.mk +include debian/cdbs/1/class/python-sugar.mk +include debian/cdbs/1/rules/buildinfo.mk + +# Merge duplicate build-dependencies +CDBS_BUILD_DEPENDS := $(shell echo '$(CDBS_BUILD_DEPENDS)' | sed -e '/\bcdbs (>= 0.4.27-1)/ s/ *,* *\bcdbs (>= \(0.4.23-1.1\)) *,* */, /g' -e 's/^ *, *//' -e 's/ *, *$$//') + +# Avoid 1-revision in build-dependency +CDBS_BUILD_DEPENDS := $(shell echo '$(CDBS_BUILD_DEPENDS)' | sed -e 's/\bcdbs (>= 0.4.27-1)/cdbs (>= 0.4.27)/') -- cgit v0.9.1