376
|
1 # Copyright (C) 2010 by Intevation GmbH |
|
2 # Authors: |
|
3 # Andre Heinecke <aheinecke@intevation.de> |
|
4 # |
|
5 # This program is free software under the GPL (>=v2) |
|
6 # Read the file COPYING coming with the software for details. |
|
7 |
|
8 """Recipe to build DBus from Git""" |
|
9 |
|
10 import os |
|
11 import re |
|
12 import inspect |
|
13 import new |
|
14 |
|
15 import treepkg.util |
|
16 import treepkg.packager |
|
17 import treepkg.run as run |
|
18 from treepkg.cmdexpand import cmdexpand |
|
19 |
|
20 class SourcePackager(treepkg.packager.SourcePackager): |
|
21 |
|
22 """SourcePackager that uses pbuilder to create the source tarball""" |
|
23 |
|
24 tarball_dependencies=set(["autoconf", "automake","git-core", "git", |
|
25 "libexpat-ce-arm-dev"]) |
|
26 createtarball_script = """\ |
|
27 #! /bin/bash |
|
28 #set -e |
|
29 |
|
30 apt-get --assume-yes --force-yes install %(builddeps)s |
|
31 |
|
32 # copy the source tree to a directory that's under pbuilder control so |
|
33 # that it gets removed along with the build environment. Otherwise we |
|
34 # end up with a directory containing files that cannot be removed by |
|
35 # treepkg |
|
36 workdir=/tmp/work |
|
37 cp -a %(basedir)s $workdir |
|
38 cd $workdir |
|
39 |
|
40 export MINGWPATH=/opt/mingw32ce |
|
41 export INCLUDE=$MINGWPATH/arm-mingw32ce/include:$MINGWPATH/include:$INCLUDE |
|
42 export LIB=$MINGWPATH/arm-mingw32ce/lib:$MINGWPATH/lib:$LIB |
|
43 export PATH=:$PATH:$MINGWPATH/bin:$MINGWPATH/arm-mingw32ce/bin:\ |
|
44 $MINGWPATH/libexec/gcc/arm-mingw32ce/4.4.0 |
|
45 export LDFLAGS=-L$MINGWPATH/lib |
|
46 export CFLAGS=-I$MINGWPATH/include |
|
47 export CPPFLAGS=-I$MINGWPATH/include |
|
48 |
|
49 ./autogen.sh --enable-maintainer-mode --host=arm-mingw32ce |
|
50 %(make_dist_command)s |
|
51 echo "origtargz " %(origtargz)s |
|
52 mv *.tar.gz %(origtargz)s |
|
53 """ |
|
54 |
|
55 make_dist_command = "make dist" |
|
56 |
|
57 def __init__(self, *args): |
|
58 super(SourcePackager, self).__init__(*args) |
|
59 self.pkgbasename = None |
|
60 self.pkgbaseversion = None |
|
61 self.origtargz = None |
|
62 |
|
63 def orig_source_version(self, directory): |
|
64 """Determines the version from configure.in""" |
|
65 major = run.capture_output(cmdexpand("/bin/sh -c \"cat configure.in | \ |
|
66 grep dbus_major_version\] | \ |
|
67 awk -F \[ '{print $$3}'\""), |
|
68 cwd=directory)[:1] |
|
69 minor = run.capture_output(cmdexpand("/bin/sh -c \"cat configure.in | \ |
|
70 grep dbus_minor_version\] | \ |
|
71 awk -F \[ '{print $$3}'\""), |
|
72 cwd=directory)[:1] |
|
73 micro = run.capture_output(cmdexpand("/bin/sh -c \"cat configure.in | \ |
|
74 grep dbus_micro_version\] | \ |
|
75 awk -F \[ '{print $$3}'\""), |
|
76 cwd=directory)[:1] |
|
77 if not major or not minor or not micro: |
|
78 raise RuntimeError("Could not determine version from \ |
|
79 %s/configure.in" % directory) |
|
80 return "%s.%s.%s" % (major[:1],minor[:1],micro[:1]) |
|
81 |
|
82 def determine_package_version(self, directory): |
|
83 """ Returns a Git package Name """ |
|
84 date = run.capture_output(cmdexpand("/bin/sh -c \" git log --date=iso \ |
|
85 -n 1 | grep Date \ |
|
86 | awk \'{print $$2}\'\""), |
|
87 cwd=directory) |
|
88 time = run.capture_output(cmdexpand("/bin/sh -c \" git log --date=iso \ |
|
89 -n 1 | grep Date \ |
|
90 | awk \'{print $$3}\'\""), |
|
91 cwd=directory) |
|
92 date = date.replace('-','') |
|
93 time = time.replace(':','') |
|
94 return "%s-%s%s.%s" % (self.orig_source_version(directory), |
|
95 date[:8], time[:4], self.revision[:7]) |
|
96 |
|
97 def copy_workingcopy(self, dest): |
|
98 treepkg.util.copytree(self.track.checkout_dir, dest) |
|
99 |
|
100 def create_original_tarball(self): |
|
101 copied_working_copy = os.path.join(self.work_dir, "copied_working_copy") |
|
102 self.copy_workingcopy(copied_working_copy) |
|
103 |
|
104 self.pkgbaseversion = \ |
|
105 self.determine_package_version(copied_working_copy) |
|
106 self.pkgbasename = self.pkg_basename + "_" + self.pkgbaseversion |
|
107 self.origtargz = os.path.join(self.work_dir, |
|
108 self.pkgbasename + ".orig.tar.gz") |
|
109 |
|
110 script = (self.createtarball_script |
|
111 % dict(builddeps=" ".join(self.track.dependencies_required() |
|
112 | self.tarball_dependencies), |
|
113 basedir=copied_working_copy, |
|
114 origtargz=self.origtargz, |
|
115 make_dist_command=self.make_dist_command)) |
|
116 script_name = os.path.join(self.work_dir, "createtarball") |
|
117 treepkg.util.writefile(script_name, script, 0755) |
|
118 |
|
119 treepkg.util.ensure_directory(self.src_dir) |
|
120 treepkg.util.ensure_directory(self.log_dir) |
|
121 self.track.builder.run_script([script_name], |
|
122 logfile=os.path.join(self.log_dir, |
|
123 "tarball_log.txt"), |
|
124 bindmounts=[self.work_dir, self.src_dir]) |
|
125 |
|
126 def create_orig_dir(self): |
|
127 """Unpacks the tarball created by create_original_tarball into work_dir |
|
128 """ |
|
129 unpack_dir = os.path.join(self.work_dir, "unpack") |
|
130 treepkg.util.ensure_directory(unpack_dir) |
|
131 run.call(cmdexpand("tar xzf $origtargz -C $unpack_dir", |
|
132 unpack_dir=unpack_dir, origtargz=self.origtargz)) |
|
133 unpacked_files = treepkg.util.listdir_abs(unpack_dir) |
|
134 if len(unpacked_files) != 1: |
|
135 raise RuntimeError("%s should have extracted to a single directory", |
|
136 origtargz) |
|
137 unpacked_dir = unpacked_files[0] |
|
138 |
|
139 orig_dir = os.path.join(self.work_dir, os.path.basename(unpacked_dir)) |
|
140 os.rename(unpacked_dir, orig_dir) |
|
141 return orig_dir |
|
142 |
|
143 def do_package(self): |
|
144 self.create_original_tarball() |
|
145 orig_dir = self.create_orig_dir() |
|
146 |
|
147 changemsg = ("Update to change: %s" % self.revision) |
|
148 |
|
149 self.copy_debian_directory(orig_dir, self.pkgbaseversion, changemsg) |
|
150 |
|
151 self.create_source_package(orig_dir, self.origtargz) |
|
152 self.move_source_package(self.pkgbasename) |
|
153 |