summaryrefslogtreecommitdiffstats
path: root/tools/Linux/packaging/mk-debian-package.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tools/Linux/packaging/mk-debian-package.sh')
-rwxr-xr-xtools/Linux/packaging/mk-debian-package.sh187
1 files changed, 187 insertions, 0 deletions
diff --git a/tools/Linux/packaging/mk-debian-package.sh b/tools/Linux/packaging/mk-debian-package.sh
new file mode 100755
index 0000000..ad81be0
--- /dev/null
+++ b/tools/Linux/packaging/mk-debian-package.sh
@@ -0,0 +1,187 @@
+#!/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
+# <http://www.gnu.org/licenses/>.
+#
+
+
+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
+