#!/bin/bash # # Copyright (C) 2013 Team XBMC # http://kodi.tv # # 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 XBMC; see the file COPYING. If not, see # . # RELEASEV=${RELEASEV:-"auto"} VERSION_PREFIX=${VERSION_PREFIX:-""} TAG=${TAG} TAGREV=${TAGREV:-""} REPO_DIR=${WORKSPACE:-$(cd "$(dirname $0)/../../../" ; pwd)} [[ $(which lsb_release) ]] && DISTS=${DISTS:-$(lsb_release -cs)} || DISTS=${DISTS:-"stable"} ARCHS=${ARCHS:-$(dpkg --print-architecture)} BUILDER=${BUILDER:-"debuild"} DEBUILD_OPTS=${DEBUILD_OPTS:-""} PDEBUILD_OPTS=${PDEBUILD_OPTS:-""} PBUILDER_BASE=${PBUILDER_BASE:-"/var/cache/pbuilder"} DPUT_TARGET=${DPUT_TARGET:-"local"} DEBIAN=${DEBIAN:-"https://github.com/xbmc/xbmc-packaging/archive/master.tar.gz"} BUILD_DATE=$(date '+%Y%m%d.%H%M') function usage { echo "$0: This script builds a Kodi debian package from a git repository." echo "The build is controlled by ENV variables, which can be overridden as appropriate:" echo "BUILDER is either debuild(default) or pdebuild(needs a proper pbuilder setup)" checkEnv } function checkEnv { echo "#------ build environment ------#" echo "REPO_DIR: $REPO_DIR" getVersion echo "RELEASEV: $RELEASEV" echo "REVISION: $TAGREV" [[ -n $TAG ]] && echo "TAG: $TAG" echo "DISTS: $DISTS" echo "ARCHS: $ARCHS" echo "DEBIAN: $DEBIAN" echo "BUILDER: $BUILDER" echo "CONFIGURATION: $Configuration" if ! [[ $(which $BUILDER) ]] then echo "Error: can't find ${BUILDER}, consider using full path to [debuild|pdebuild]" exit 1 fi if [[ "$BUILDER" =~ "pdebuild" ]] then if ! [[ -d $PBUILDER_BASE ]] ; then echo "Error: $PBUILDER_BASE does not exist"; exit 1; fi echo "PBUILDER_BASE: $PBUILDER_BASE" echo "PDEBUILD_OPTS: $PDEBUILD_OPTS" else echo "DEBUILD_OPTS: $DEBUILD_OPTS" fi echo "#-------------------------------#" } function getVersion { getGitRev if [[ $RELEASEV == "auto" ]] then local MAJORVER=$(grep VERSION_MAJOR $REPO_DIR/version.txt | awk '{ print $2 }') local MINORVER=$(grep VERSION_MINOR $REPO_DIR/version.txt | awk '{ print $2 }') RELEASEV=${MAJORVER}.${MINORVER} else PACKAGEVERSION="${RELEASEV}~git${BUILD_DATE}-${TAG}" fi if [[ -n ${VERSION_PREFIX} ]] then PACKAGEVERSION="${VERSION_PREFIX}:${RELEASEV}~git${BUILD_DATE}-${TAG}" else PACKAGEVERSION="${RELEASEV}~git${BUILD_DATE}-${TAG}" fi } function getGitRev { cd $REPO_DIR || exit 1 REV=$(git log -1 --pretty=format:"%h") [[ -z $TAG ]] && TAG=$REV [[ -z $TAGREV ]] && TAGREV=0 } function archiveRepo { cd $REPO_DIR || exit 1 git clean -xfd echo $REV > VERSION tools/depends/target/ffmpeg/autobuild.sh -d DEST="kodi-${RELEASEV}~git${BUILD_DATE}-${TAG}" [[ -d debian ]] && rm -rf debian cd .. tar -czf ${DEST}.tar.gz --exclude .git $(basename $REPO_DIR) ln -s ${DEST}.tar.gz ${DEST/-/_}.orig.tar.gz echo "Output Archive: ${DEST}.tar.gz" cd $REPO_DIR || exit 1 getDebian } function getDebian { if [[ -d $DEBIAN ]] then cp -r $DEBIAN . else mkdir tmp && cd tmp curl -L -s $DEBIAN -o debian.tar.gz tar xzf debian.tar.gz cd xbmc-packaging-* for FILE in *.unified; do mv $FILE debian/${FILE%.unified}; done mv debian $REPO_DIR cd $REPO_DIR ; rm -rf tmp fi } function buildDebianPackages { archiveRepo cd $REPO_DIR || exit 1 sed -e "s/#PACKAGEVERSION#/${PACKAGEVERSION}/g" -e "s/#TAGREV#/${TAGREV}/g" debian/changelog.in > debian/changelog.tmp [ "$Configuration" == "Debug" ] && sed -i "s/XBMC_RELEASE = yes/XBMC_RELEASE = no/" debian/rules for dist in $DISTS do sed "s/#DIST#/${dist}/g" debian/changelog.tmp > debian/changelog for arch in $ARCHS do cd $REPO_DIR echo "building: DIST=$dist ARCH=$arch" if [[ "$BUILDER" =~ "pdebuild" ]] then DIST=$dist ARCH=$arch $BUILDER $PDEBUILD_OPTS [ $? -eq 0 ] && uploadPkg || exit 1 else $BUILDER $DEBUILD_OPTS echo "output directory: $REPO_DIR/.." fi done done } function uploadPkg { PKG="${PBUILDER_BASE}/${dist}-${arch}/result/${DEST/-/_}-${TAGREV}_${arch}.changes" echo "signing package" debsign $PKG echo "uploading $PKG to $DPUT_TARGET" dput $DPUT_TARGET $PKG UPLOAD_DONE=$? } function cleanup { if [[ $UPLOAD_DONE -eq 0 ]] && [[ "$BUILDER" =~ "pdebuild" ]] then cd $REPO_DIR/.. || exit 1 rm ${DEST}* rm ${DEST/-/_}* fi } ### # main ### if [[ $1 = "-h" ]] || [[ $1 = "--help" ]] then usage exit fi checkEnv buildDebianPackages cleanup