changeset 376:964e6981847a

Added for Windows CE
author Andre Heinecke <aheinecke@intevation.de>
date Mon, 21 Jun 2010 10:44:57 +0000
parents 6b09c0541502
children 1af2aff54563
files recipes/wince/dbus.py recipes/wince/libexpat.py
diffstat 2 files changed, 291 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/recipes/wince/dbus.py	Mon Jun 21 10:44:57 2010 +0000
@@ -0,0 +1,153 @@
+# Copyright (C) 2010 by Intevation GmbH
+# Authors:
+# Andre Heinecke <aheinecke@intevation.de>
+#
+# This program is free software under the GPL (>=v2)
+# Read the file COPYING coming with the software for details.
+
+"""Recipe to build DBus from Git"""
+
+import os
+import re
+import inspect
+import new
+
+import treepkg.util
+import treepkg.packager
+import treepkg.run as run
+from treepkg.cmdexpand import cmdexpand
+
+class SourcePackager(treepkg.packager.SourcePackager):
+
+    """SourcePackager that uses pbuilder to create the source tarball"""
+
+    tarball_dependencies=set(["autoconf", "automake","git-core", "git",
+                              "libexpat-ce-arm-dev"])
+    createtarball_script = """\
+#! /bin/bash
+#set -e
+
+apt-get --assume-yes --force-yes install %(builddeps)s
+
+# copy the source tree to a directory that's under pbuilder control so
+# that it gets removed along with the build environment.  Otherwise we
+# end up with a directory containing files that cannot be removed by
+# treepkg
+workdir=/tmp/work
+cp -a %(basedir)s $workdir
+cd $workdir
+
+export MINGWPATH=/opt/mingw32ce
+export INCLUDE=$MINGWPATH/arm-mingw32ce/include:$MINGWPATH/include:$INCLUDE
+export LIB=$MINGWPATH/arm-mingw32ce/lib:$MINGWPATH/lib:$LIB
+export PATH=:$PATH:$MINGWPATH/bin:$MINGWPATH/arm-mingw32ce/bin:\
+$MINGWPATH/libexec/gcc/arm-mingw32ce/4.4.0
+export LDFLAGS=-L$MINGWPATH/lib
+export CFLAGS=-I$MINGWPATH/include
+export CPPFLAGS=-I$MINGWPATH/include
+
+./autogen.sh --enable-maintainer-mode --host=arm-mingw32ce
+%(make_dist_command)s
+echo "origtargz " %(origtargz)s
+mv *.tar.gz %(origtargz)s
+"""
+
+    make_dist_command = "make dist"
+
+    def __init__(self, *args):
+        super(SourcePackager, self).__init__(*args)
+        self.pkgbasename = None
+        self.pkgbaseversion = None
+        self.origtargz = None
+
+    def orig_source_version(self, directory):
+        """Determines the version from configure.in"""
+        major = run.capture_output(cmdexpand("/bin/sh -c \"cat configure.in | \
+                                             grep dbus_major_version\] | \
+                                             awk -F \[ '{print $$3}'\""),
+                                             cwd=directory)[:1]
+        minor = run.capture_output(cmdexpand("/bin/sh -c \"cat configure.in | \
+                                             grep dbus_minor_version\] | \
+                                             awk -F \[ '{print $$3}'\""),
+                                             cwd=directory)[:1]
+        micro = run.capture_output(cmdexpand("/bin/sh -c \"cat configure.in | \
+                                             grep dbus_micro_version\] | \
+                                             awk -F \[ '{print $$3}'\""),
+                                             cwd=directory)[:1]
+        if not major or not minor or not micro:
+            raise RuntimeError("Could not determine version from \
+                                %s/configure.in" % directory)
+        return "%s.%s.%s" % (major[:1],minor[:1],micro[:1])
+    
+    def determine_package_version(self, directory):
+        """ Returns a Git package Name """
+        date = run.capture_output(cmdexpand("/bin/sh -c \" git log --date=iso \
+                                             -n 1 | grep Date \
+                                             | awk \'{print $$2}\'\""),
+                                             cwd=directory)
+        time = run.capture_output(cmdexpand("/bin/sh -c \" git log --date=iso \
+                                             -n 1 | grep Date \
+                                             | awk \'{print $$3}\'\""),
+                                             cwd=directory)
+        date = date.replace('-','')
+        time = time.replace(':','')
+        return "%s-%s%s.%s" % (self.orig_source_version(directory),
+                              date[:8], time[:4], self.revision[:7])
+
+    def copy_workingcopy(self, dest):
+        treepkg.util.copytree(self.track.checkout_dir, dest)
+
+    def create_original_tarball(self):
+        copied_working_copy = os.path.join(self.work_dir, "copied_working_copy")
+        self.copy_workingcopy(copied_working_copy)
+
+        self.pkgbaseversion = \
+                            self.determine_package_version(copied_working_copy)
+        self.pkgbasename = self.pkg_basename + "_" + self.pkgbaseversion
+        self.origtargz = os.path.join(self.work_dir,
+                                      self.pkgbasename + ".orig.tar.gz")
+
+        script = (self.createtarball_script
+                  % dict(builddeps=" ".join(self.track.dependencies_required()
+                                            | self.tarball_dependencies),
+                         basedir=copied_working_copy,
+                         origtargz=self.origtargz,
+                         make_dist_command=self.make_dist_command))
+        script_name = os.path.join(self.work_dir, "createtarball")
+        treepkg.util.writefile(script_name, script, 0755)
+
+        treepkg.util.ensure_directory(self.src_dir)
+        treepkg.util.ensure_directory(self.log_dir)
+        self.track.builder.run_script([script_name],
+                                      logfile=os.path.join(self.log_dir,
+                                                           "tarball_log.txt"),
+                                      bindmounts=[self.work_dir, self.src_dir])
+
+    def create_orig_dir(self):
+        """Unpacks the tarball created by create_original_tarball into work_dir
+        """
+        unpack_dir = os.path.join(self.work_dir, "unpack")
+        treepkg.util.ensure_directory(unpack_dir)
+        run.call(cmdexpand("tar xzf $origtargz -C $unpack_dir",
+                           unpack_dir=unpack_dir, origtargz=self.origtargz))
+        unpacked_files = treepkg.util.listdir_abs(unpack_dir)
+        if len(unpacked_files) != 1:
+            raise RuntimeError("%s should have extracted to a single directory",
+                               origtargz)
+        unpacked_dir = unpacked_files[0]
+
+        orig_dir = os.path.join(self.work_dir, os.path.basename(unpacked_dir))
+        os.rename(unpacked_dir, orig_dir)
+        return orig_dir
+
+    def do_package(self):
+        self.create_original_tarball()
+        orig_dir = self.create_orig_dir()
+       
+        changemsg = ("Update to change: %s" % self.revision)
+
+        self.copy_debian_directory(orig_dir, self.pkgbaseversion, changemsg)
+
+        self.create_source_package(orig_dir, self.origtargz)
+        self.move_source_package(self.pkgbasename)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/recipes/wince/libexpat.py	Mon Jun 21 10:44:57 2010 +0000
@@ -0,0 +1,138 @@
+# Copyright (C) 2010 by Intevation GmbH
+# Authors:
+# Andre Heinecke <aheinecke@intevation.de>
+#
+# This program is free software under the GPL (>=v2)
+# Read the file COPYING coming with the software for details.
+
+"""Recipe to build libexpat from Git"""
+
+import os
+import re
+import inspect
+import new
+
+import treepkg.util
+import treepkg.packager
+import treepkg.run as run
+from treepkg.cmdexpand import cmdexpand
+
+class SourcePackager(treepkg.packager.SourcePackager):
+
+    """SourcePackager that uses pbuilder to create the source tarball"""
+
+    tarball_dependencies=set(["autoconf", "automake","git-core", "git"])
+    createtarball_script = """\
+#! /bin/bash
+set -e
+
+apt-get --assume-yes --force-yes install %(builddeps)s
+
+# copy the source tree to a directory that's under pbuilder control so
+# that it gets removed along with the build environment.  Otherwise we
+# end up with a directory containing files that cannot be removed by
+# treepkg
+workdir=/tmp/work
+cp -a %(basedir)s $workdir
+cd $workdir
+
+export MINGWPATH=/opt/mingw32ce
+export INCLUDE=$MINGWPATH/arm-mingw32ce/include:$MINGWPATH/include:$INCLUDE
+export LIB=$MINGWPATH/arm-mingw32ce/lib:$MINGWPATH/lib:$LIB
+export PATH=:$PATH:$MINGWPATH/bin:$MINGWPATH/arm-mingw32ce/bin:\
+$MINGWPATH/libexec/gcc/arm-mingw32ce/4.4.0:
+
+autoreconf
+./configure --enable-maintainer-mode --host=arm-mingw32ce
+%(make_dist_command)s
+
+mv *.tar.gz %(origtargz)s
+"""
+
+    make_dist_command = "make dist"
+
+    def __init__(self, *args):
+        super(SourcePackager, self).__init__(*args)
+        self.pkgbasename = None
+        self.pkgbaseversion = None
+        self.origtargz = None
+
+    def orig_source_version(self, directory):
+        """Determines the version from expat.h directory"""
+        filename = os.path.join(directory, "conftools/get-version.sh")
+        expat_h = os.path.join(directory, "lib/expat.h")
+        output = run.capture_output(cmdexpand("$filename $expat_h",**locals()))
+        return output
+    
+    def determine_package_version(self, directory):
+        """ Returns a Git package Name """
+        date = run.capture_output(cmdexpand("/bin/sh -c \" git log --date=iso \
+                                             -n 1 | grep Date \
+                                             | awk \'{print $$2}\'\""),
+                                             cwd=directory)
+        time = run.capture_output(cmdexpand("/bin/sh -c \" git log --date=iso \
+                                             -n 1 | grep Date \
+                                             | awk \'{print $$3}\'\""),
+                                             cwd=directory)
+        date = date.replace('-','')
+        time = time.replace(':','')
+        return "%s-%s%s.%s" % (self.orig_source_version(directory),
+                              date[:8], time[:4], self.revision[:7])
+
+    def copy_workingcopy(self, dest):
+        treepkg.util.copytree(self.track.checkout_dir, dest)
+
+    def create_original_tarball(self):
+        copied_working_copy = os.path.join(self.work_dir, "copied_working_copy")
+        self.copy_workingcopy(copied_working_copy)
+
+        self.pkgbaseversion = \
+                            self.determine_package_version(copied_working_copy)
+        self.pkgbasename = self.pkg_basename + "_" + self.pkgbaseversion
+        self.origtargz = os.path.join(self.work_dir,
+                                      self.pkgbasename + ".orig.tar.gz")
+
+        script = (self.createtarball_script
+                  % dict(builddeps=" ".join(self.track.dependencies_required()
+                                            | self.tarball_dependencies),
+                         basedir=copied_working_copy,
+                         origtargz=self.origtargz,
+                         make_dist_command=self.make_dist_command))
+        script_name = os.path.join(self.work_dir, "createtarball")
+        treepkg.util.writefile(script_name, script, 0755)
+
+        treepkg.util.ensure_directory(self.src_dir)
+        treepkg.util.ensure_directory(self.log_dir)
+        self.track.builder.run_script([script_name],
+                                      logfile=os.path.join(self.log_dir,
+                                                           "tarball_log.txt"),
+                                      bindmounts=[self.work_dir, self.src_dir])
+
+    def create_orig_dir(self):
+        """Unpacks the tarball created by create_original_tarball into work_dir
+        """
+        unpack_dir = os.path.join(self.work_dir, "unpack")
+        treepkg.util.ensure_directory(unpack_dir)
+        run.call(cmdexpand("tar xzf $origtargz -C $unpack_dir",
+                           unpack_dir=unpack_dir, origtargz=self.origtargz))
+        unpacked_files = treepkg.util.listdir_abs(unpack_dir)
+        if len(unpacked_files) != 1:
+            raise RuntimeError("%s should have extracted to a single directory",
+                               origtargz)
+        unpacked_dir = unpacked_files[0]
+
+        orig_dir = os.path.join(self.work_dir, os.path.basename(unpacked_dir))
+        os.rename(unpacked_dir, orig_dir)
+        return orig_dir
+
+    def do_package(self):
+        self.create_original_tarball()
+        orig_dir = self.create_orig_dir()
+       
+        changemsg = ("Update to change: %s" % self.revision)
+
+        self.copy_debian_directory(orig_dir, self.pkgbaseversion, changemsg)
+
+        self.create_source_package(orig_dir, self.origtargz)
+        self.move_source_package(self.pkgbasename)
+
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)