From 45805bd7cdd55a7c220dbe06f87644a48947ba92 Mon Sep 17 00:00:00 2001 From: Xiangfu Date: Thu, 21 Jun 2012 16:42:40 +0800 Subject: [PATCH] Switch debian/* from SVN to GIT, now build package base on git commit --- debian/autogen.sh | 10 +++ debian/changelog | 16 +++++ debian/changelog.upstream.awk | 113 ++++++++++++++++++++++++++++++++++ debian/clean.sh | 108 ++++++++++++++++++++++++++++++++ debian/control | 2 +- debian/get-orig-source.sh | 29 ++++++--- debian/rules | 46 ++++++++++---- debian/source/format | 2 +- 8 files changed, 304 insertions(+), 22 deletions(-) create mode 100755 debian/autogen.sh create mode 100644 debian/changelog.upstream.awk create mode 100644 debian/clean.sh diff --git a/debian/autogen.sh b/debian/autogen.sh new file mode 100755 index 0000000..1239e0a --- /dev/null +++ b/debian/autogen.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# Generate debian/changelog.upstream. +# +# Uses debian/changelog and the git revision log. +# + +set -e + +dpkg-parsechangelog --format rfc822 --all | + awk -f debian/changelog.upstream.awk diff --git a/debian/changelog b/debian/changelog index 8f007eb..0d5faf2 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,23 +1,38 @@ +fped (0.0+201205-1) lucid; urgency=low + + * New snapshot, taken from commit 59b90b3 + * Switched to new project host: http://projects.qi-hardware.com/p/fped + * debian/rules: + - rewrite as a minimal rules file using dh + - add a get-orig-source target + * debian/autogen.sh: new script + + -- Xiangfu Liu Thu, 21 Jun 2012 16:58:21 +0800 + fped (0.0+r6006-1) lucid; urgency=low + * New snapshot, taken from commit 78e4ba0 * update to r6006 -- Xiangfu Liu Fri, 25 Mar 2011 08:43:21 +0800 fped (0.0+r6005-1) lucid; urgency=low + * New snapshot, taken from commit 335ddb6 * update to r6005 -- Xiangfu Liu Wed, 23 Mar 2011 16:28:26 +0800 fped (0.0+r5999-1) lucid; urgency=low + * New snapshot, taken from commit 1409cfa * update to r5999 -- Xiangfu Liu Tue, 22 Mar 2011 15:12:02 +0800 fped (0.0+r5997-1) lucid; urgency=low + * New snapshot, taken from commit ceaa519 * Fix "FTBFS: tsort: cycle: ./Common: line 37: 2851 Aborted" This was a "false error" - the regression test is supposed to cause fped to abort, which it did, but the shell didn't print "Aborted" on @@ -28,6 +43,7 @@ fped (0.0+r5997-1) lucid; urgency=low fped (0.0+r5986-1) unstable; urgency=low + * New snapshot, taken from commit feae08f * Initial release (Closes: #599090). -- Xiangfu Liu Mon, 04 Oct 2010 23:27:52 +0800 diff --git a/debian/changelog.upstream.awk b/debian/changelog.upstream.awk new file mode 100644 index 0000000..6755ede --- /dev/null +++ b/debian/changelog.upstream.awk @@ -0,0 +1,113 @@ +#!/bin/awk -f +# Generate debian/changelog.upstream from debian/changelog and +# the git revision log. Inspired by Gerrit Pape’s +# debian/changelog.upstream.sh, from the git-core Debian package. +# +# Requires a working /dev/stderr. +# +# Usage: +# dpkg-parsechangelog --format rfc822 --all | +# awk -f debian/changelog.upstream.awk + +# If argument matches /^Version: /, return remaining text. +# Result is nonempty if and only if argument matches. +function version_line(line) { + if (line ~ /^Version: /) { + sub(/^Version: /, "", line); + return line; + } + return ""; +} + +# If argument matches /^\*.* from commit /, return remaining text. +# Result is nonempty if and only if argument matches. +function commit_id_line(line) { + if (line ~ / from commit /) { + sub(/^.* from commit /, "", line); + sub(/[(][Cc]loses.*/, "", line); + sub(/[^0-9a-f]*$/, "", line); + return line; + } + return ""; +} + +# Read standard input, scanning for a changelog entry of the +# form “* New snapshot, taken from commit .” +# Result is . +# Result is empty and writes a message to standard error if no such entry is +# found before the next Version: line with a different upstream +# version (or EOF). +# Argument is the upstream version sought. +function read_commit_id(upstream, line,version,corresponding_upstream,commit) { + while (getline line) { + version = version_line(line); + corresponding_upstream = version; + sub(/-[^-]*$/, "", corresponding_upstream); + if (version != "" && corresponding_upstream != upstream) + break; + + commit = commit_id_line(line); + if (commit != "") + return commit; + } + + print "No commit id for " upstream >> "/dev/stderr"; + return ""; +} + +BEGIN { + last = "none"; + last_cid = "none"; + cl = "debian/changelog.upstream"; +} + +# Add a list of all revisions up to last to debian/changelog.upstream +# and set last = new_cid. +# new is a user-readable name for the commit new_cide. +function add_version(new,new_cid, limiter,versionline,command,line) { + if (last == "none") { + printf "" > cl; + last = new; + last_cid = new_cid; + return 0; + } + + if (new == "none") { + versionline = "Version " last; + limiter = ""; + } else { + versionline = "Version " last "; changes since " new ":"; + limiter = new_cid ".."; + } + print versionline >> cl; + gsub(/./, "-", versionline); + print versionline >> cl; + + print "" >> cl; + command = "git shortlog \"" limiter last_cid "\""; + while(command | getline line) + print line >> cl; + + if (new != "none") + print "" >> cl; + last = new; + last_cid = new_cid; +} + +{ + version = version_line($0); + if (version != "") { + # strip Debian revision + upstream_version = version; + sub(/-[^-]*$/, "", upstream_version); + + commit = read_commit_id(upstream_version); + if (commit == "") + exit 1; + add_version(upstream_version, commit); + } +} + +END { + add_version("none", "none"); +} diff --git a/debian/clean.sh b/debian/clean.sh new file mode 100644 index 0000000..1b17a8b --- /dev/null +++ b/debian/clean.sh @@ -0,0 +1,108 @@ +#!/bin/sh +# Clean up after a failed build. +# +# Requires access to .gitignore files excluding _all_ modified files. +# +# Requires a working /dev/fd (with more than just /dev/fd/0 and 1) +# or gawk. + +set -e + +splitgitignore='#!/usr/bin/awk +!/^#/ && !/^$/ { + glob = /[[*?]/; + directory = /\/$/; + sub(/\/$/, ""); + anchored = /\//; + sub(/^\//, ""); + + output = "nonexistent/nonsense"; + if (anchored) { + if (!directory && !glob) + output = "/dev/fd/1"; + else if (directory && !glob) + output = "/dev/fd/3"; + else if (!directory && glob) + output = "/dev/fd/4"; + else if (directory && glob) + output = "/dev/fd/5"; + } else { + if (!directory) + output = "/dev/fd/6"; + else + output = "/dev/fd/7"; + } + print >> output; +} +' + +offlimits="-type d -name '.*' -prune -o -type d -name debian -prune" + +remove_file_globs() { + while read glob + do + eval "rm -f $glob" + done +} + +remove_directory_globs() { + while read glob + do + eval "rm -fr $glob" + done +} + +remove_file_findpatterns() { + while read pat + do + find . $offlimits -o \ + '(' -name "$pat" -execdir rm -f '{}' + ')' + done +} + +remove_directory_findpatterns() { + while read pat + do + find . $offlimits -o \ + '(' -type d -name "$pat" -execdir rm -fr '{}' + ')' + done +} + +find . $offlimits -o '(' -name .gitignore -print ')' | +while read file +do + ( + cd "$(dirname "$file")" + # Dispatch using pipes. Yuck. + { { { { { + awk "$splitgitignore" | + { + # anchored files (globless) + xargs -d '\n' rm -f + } + } 3>&1 >&2 | + { + # anchored directories (globless) + xargs -d '\n' rm -fr + } + } 4>&1 >&2 | + { + # anchored files + remove_file_globs + } + } 5>&1 >&2 | + { + # anchored directories + remove_directory_globs + } + } 6>&1 >&2 | + { + # unanchored files + remove_file_findpatterns + } + } 7>&1 >&2 | + { + remove_directory_findpatterns + } >&2 + ) < "$file" +done diff --git a/debian/control b/debian/control index 259a118..8191a71 100644 --- a/debian/control +++ b/debian/control @@ -6,7 +6,7 @@ Build-Depends: debhelper (>= 7.4.10), pkg-config, bash (>= 4), flex, bison, imagemagick, transfig, netpbm, ghostscript, libgtk2.0-dev -Standards-Version: 3.9.1 +Standards-Version: 3.9.3 Homepage: http://downloads.qi-hardware.com/people/werner/fped/gui.html Package: fped diff --git a/debian/get-orig-source.sh b/debian/get-orig-source.sh index 5f7f76e..976c559 100644 --- a/debian/get-orig-source.sh +++ b/debian/get-orig-source.sh @@ -1,19 +1,30 @@ #!/bin/sh # Build a tarball from the latest upstream version, with a nice # version number. +# +# Requires git 1.6.6 or later, GNU date, and gzip. set -e +: ${REPO=$(git rev-parse --git-dir)} +: ${BRANCH=remotes/origin/master} + +mkdir debian-orig-source +trap 'rm -fr debian-orig-source || exit 1' EXIT + +git init -q debian-orig-source +GIT_DIR=$(pwd)/debian-orig-source/.git +export GIT_DIR + +# Fetch latest upstream version. +git fetch -q "$REPO" "$BRANCH" + # Determine version number. release=0.0 -upstream_version="${release}+r${REV}" - -TOPFOLDER=fped-$upstream_version.orig - -trap 'rm -fr ${TOPFOLDER} || exit 1' EXIT INT TERM - -svn export -r${REV} http://svn.openmoko.org/trunk/eda/fped ${TOPFOLDER} +date=$(date --utc --date="$(git log -1 --pretty=format:%cD FETCH_HEAD)" "+%Y%m") +upstream_version="${release}+${date}" # Generate tarball. -echo "packaging ..." -tar -czf fped_$upstream_version.orig.tar.gz ${TOPFOLDER} +echo "packaging $(git rev-parse --short FETCH_HEAD)" +git archive FETCH_HEAD | + gzip -n -9 >"fped_$upstream_version.orig.tar.gz" diff --git a/debian/rules b/debian/rules index b6295c8..7eddc54 100755 --- a/debian/rules +++ b/debian/rules @@ -1,23 +1,47 @@ #!/usr/bin/make -f -# -*- makefile -*- -# Sample debian/rules that uses debhelper. -# This file was originally written by Joey Hess and Craig Small. -# As a special exception, when this file is copied by dh-make into a -# dh-make output file, you may use that output file without restriction. -# This special exception was added by Craig Small in version 0.37 of dh-make. +# This file is in the public domain. +# You may freely use, modify, distribute, and relicense it. # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 export PREFIX=/usr -REV=6006 -debiandir_SQ = $(subst ','\'',$(dir $(lastword $(MAKEFILE_LIST)))) -get-orig-source: - REV='$(REV)' sh '$(debiandir_SQ)'get-orig-source.sh +build clean install binary-arch binary-indep binary: + +dh --parallel $(opt_no_act) $@ override_dh_auto_clean: - make spotless + $(MAKE) spotless + sh debian/clean.sh + +override_dh_installchangelogs: + dpkg-parsechangelog --format rfc822 --all | \ + awk -f debian/changelog.upstream.awk + dh_installchangelogs debian/changelog.upstream + +opt_optimize = CFLAGS="-g -O2" +opt_no_act = +opt_quiet = + +ifneq (,$(filter noopt,$(DEB_BUILD_OPTIONS))) + opt_optimize = CFLAGS="-g -O0" +endif + +ifneq (,$(findstring n,$(MAKEFLAGS))) + opt_no_act = --no-act +endif + +ifneq (,$(filter quiet,$(DEB_BUILD_OPTIONS))) + opt_quiet = --quiet + MAKEFLAGS += --quiet +endif + +REPO = git://projects.qi-hardware.com/fped.git +BRANCH = master +debiandir_SQ = $(subst ','\'',$(dir $(lastword $(MAKEFILE_LIST)))) +get-orig-source: + REPO='$(REPO)' BRANCH='$(BRANCH)' \ + sh '$(debiandir_SQ)'get-orig-source.sh %: dh $@ diff --git a/debian/source/format b/debian/source/format index 46ebe02..163aaf8 100644 --- a/debian/source/format +++ b/debian/source/format @@ -1 +1 @@ -3.0 (quilt) \ No newline at end of file +3.0 (quilt)