- first steps towards kiwi builds
authorMichael Schröder <mls@suse.de>
Wed, 5 Nov 2008 16:36:07 +0000 (16:36 +0000)
committerMichael Schröder <mls@suse.de>
Wed, 5 Nov 2008 16:36:07 +0000 (16:36 +0000)
build
expanddeps

diff --git a/build b/build
index 1187f98..3f28e6a 100755 (executable)
--- a/build
+++ b/build
@@ -175,7 +175,7 @@ cleanup_and_exit () {
     if test -n "$RUNNING_IN_VM" ; then
        cd /
        if test -n "$VM_SWAP" -a -e "$VM_SWAP" ; then
-           swapoff "$VM_SWAP"
+           swapoff "$VM_SWAP" 2>/dev/null
            echo -n "BUILDSTATUS$1" >"$VM_SWAP"
        fi
        exec >&0 2>&0   # so that the logging tee finishes
@@ -854,6 +854,17 @@ for SPECFILE in "${SPECFILES[@]}" ; do
     SRCDIR="${SPECFILE%/*}"
     SPECFILE="${SPECFILE##*/}"
 
+    BUILDTYPE=
+    case $SPECFILE in
+      *.spec) BUILDTYPE=spec ;;
+      *.dsc) BUILDTYPE=dsc ;;
+      *.kiwi) BUILDTYPE=kiwi ;;
+    esac
+    if test -z "$BUILDTYPE" ; then
+       echo "don't know how to build $SPECFILE"
+       cleanup_and_exit 1
+    fi
+
     cd "$SRCDIR"
 
     if [ -z "$RUNNING_IN_VM" ]; then
@@ -1068,7 +1079,7 @@ for SPECFILE in "${SPECFILES[@]}" ; do
        echo "assuming dist $BUILD_DIST"
     fi
 
-    if test "$SPECFILE" = "${SPECFILE%.dsc}" ; then
+    if test "$BUILDTYPE" = spec ; then
        TOPDIR=`chroot $BUILD_ROOT rpm --eval '%_topdir'`
     else
        TOPDIR=/usr/src/packages
@@ -1103,6 +1114,8 @@ for SPECFILE in "${SPECFILES[@]}" ; do
        egrep '^#[       ]*norootforbuild[       ]*$' >/dev/null <$SPECFILE && BUILD_USER=abuild
     fi
     test -n "$NOROOTFORBUILD" && BUILD_USER=abuild
+    test "$BUILDTYPE" = kiwi && BUILD_USER=root
+
     if test $BUILD_USER = abuild ; then
         if ! egrep '^abuild:' >/dev/null <$BUILD_ROOT/etc/passwd ; then
             echo 'abuild::399:399:Autobuild:/home/abuild:/bin/bash' >>$BUILD_ROOT/etc/passwd
@@ -1144,14 +1157,24 @@ for SPECFILE in "${SPECFILES[@]}" ; do
        test $BUILD_USER = abuild && chown 399:399 $BUILD_ROOT$TOPDIR/$i
     done
     test -e $BUILD_ROOT/exit && cleanup_and_exit
+
     mkdir -p $BUILD_ROOT$TOPDIR/SOURCES
-    cp -p "$MYSRCDIR"/* $BUILD_ROOT$TOPDIR/SOURCES/
+    if test "$BUILDTYPE" = kiwi ; then
+       mkdir -p $BUILD_ROOT$TOPDIR/KIWI
+       if test "$MYSRCDIR" = $BUILD_ROOT/.build-srcdir ; then
+           mv "$MYSRCDIR"/* $BUILD_ROOT$TOPDIR/SOURCES/
+       else
+           cp -a "$MYSRCDIR"/* $BUILD_ROOT$TOPDIR/SOURCES/
+       fi
+    else
+       cp -p "$MYSRCDIR"/* $BUILD_ROOT$TOPDIR/SOURCES/
+    fi
     test "$MYSRCDIR" = $BUILD_ROOT/.build-srcdir && rm -rf "$MYSRCDIR"
 
     CHANGELOGARGS=
     test -n "$CHANGELOG" -a -f "$BUILD_ROOT/.build-changelog" && CHANGELOGARGS="--changelog $BUILD_ROOT/.build-changelog"
 
-    if test "$SPECFILE" = "${SPECFILE%.dsc}" ; then
+    if test "$BUILDTYPE" = spec ; then
        # do buildrequires/release substitution
        args=()
        if test -n "$RELEASE"; then
@@ -1187,7 +1210,7 @@ for SPECFILE in "${SPECFILES[@]}" ; do
        fi
     fi
 
-    if test "$SPECFILE" != "${SPECFILE%.dsc}" ; then
+    if test "$BUILDTYPE" = dsc ; then
        rm -rf $BUILD_ROOT$TOPDIR/BUILD
        test $BUILD_USER = abuild && chown 399:399 $BUILD_ROOT$TOPDIR
        DEB_TRANSFORM=
@@ -1206,6 +1229,7 @@ for SPECFILE in "${SPECFILES[@]}" ; do
            chroot $BUILD_ROOT su -c "dpkg-source -x $TOPDIR/SOURCES/$SPECFILE $TOPDIR/BUILD" - $BUILD_USER
         fi
     fi
+
     if test $BUILD_USER = abuild ; then
         chown -R 399:399 $BUILD_ROOT$TOPDIR/*
     else
@@ -1226,7 +1250,7 @@ for SPECFILE in "${SPECFILES[@]}" ; do
 
     BUILD_SUCCEDED=false
 
-    if test "$SPECFILE" = "${SPECFILE%.dsc}" ; then
+    if test "$BUILDTYPE" = spec ; then
        test -z "$BUILD_RPM_BUILD_STAGE" && BUILD_RPM_BUILD_STAGE=-ba
 
        # XXX: move _srcdefattr to macro file?
@@ -1262,7 +1286,9 @@ for SPECFILE in "${SPECFILES[@]}" ; do
                > $BUILD_ROOT/.build.command
        chmod 755 $BUILD_ROOT/.build.command
        chroot $BUILD_ROOT su -c /.build.command - $BUILD_USER < /dev/null && BUILD_SUCCEDED=true
-    else
+    fi
+
+    if test "$BUILDTYPE" = dsc ; then
        chroot $BUILD_ROOT su -c "cd $TOPDIR/BUILD && dpkg-buildpackage -us -uc -rfakeroot-tcp" - $BUILD_USER < /dev/null && BUILD_SUCCEDED=true
        mkdir -p $BUILD_ROOT/$TOPDIR/DEBS
        for DEB in $BUILD_ROOT/$TOPDIR/*.deb ; do
@@ -1270,6 +1296,11 @@ for SPECFILE in "${SPECFILES[@]}" ; do
        done
     fi
 
+    if test "$BUILDTYPE" = kiwi ; then
+       chroot $BUILD_ROOT su -c "cd $TOPDIR/SOURCES && kiwi --prepare $TOPDIR/SOURCES --logfile /.build.log.prepare --root $TOPDIR/KIWIROOT" - $BUILD_USER < /dev/null && BUILD_SUCCEDED=true
+       chroot $BUILD_ROOT su -c "kiwi --create $TOPDIR/KIWIROOT --logfile /.build.log -d $TOPDIR/KIWI --type iso" - $BUILD_USER < /dev/null && BUILD_SUCCEDED=true
+    fi
+
     test "$BUILD_SUCCEDED" = true || cleanup_and_exit 1
     test -d "$SRCDIR" && cd "$SRCDIR"
 done
index f19c4ef..bd1fe3e 100755 (executable)
@@ -60,8 +60,8 @@ $configdir = '.' unless defined $configdir;
 $archs = '' unless defined $archs;
 die("you must specfiy a depfile!\n") unless defined $rpmdeps;
 
-my @extradeps = grep {!/\.(?:spec|dsc)$/} @ARGV;
-my @specs = grep {/\.(?:spec|dsc)$/} @ARGV;
+my @extradeps = grep {!/\.(?:spec|dsc|kiwi)$/} @ARGV;
+my @specs = grep {/\.(?:spec|dsc|kiwi)$/} @ARGV;
 die("can only work with at most one spec\n") if @specs > 1;
 my $spec = $specs[0];
 
@@ -211,7 +211,16 @@ my ($packname, $packvers, $subpacks, @packdeps);
 $subpacks = [];
 
 if ($spec) {
-  my $d = Build::parse($cf, $spec);
+  my $d;
+  if ($spec =~ /\.kiwi$/) {
+    # just set up kiwi root for now
+    $d = {
+      'deps' => [ 'kiwi', 'zypper', 'createrepo' ],
+      'subpacks' => [],
+    };
+  } else {
+    $d = Build::parse($cf, $spec);
+  }
   $packname = $d->{'name'};
   $packvers = $d->{'version'};
   $subpacks = $d->{'subpacks'};