summaryrefslogtreecommitdiff
path: root/src/build_package.sh
diff options
context:
space:
mode:
Diffstat (limited to 'src/build_package.sh')
-rwxr-xr-xsrc/build_package.sh190
1 files changed, 190 insertions, 0 deletions
diff --git a/src/build_package.sh b/src/build_package.sh
new file mode 100755
index 0000000..0c37069
--- /dev/null
+++ b/src/build_package.sh
@@ -0,0 +1,190 @@
+#!/bin/bash
+
+BUILDFILE=$1
+REPO=$(echo $BUILDFILE | rev | cut -d/ -f2 | rev)
+NAME=$(basename $BUILDFILE .xibuild)
+
+source $BUILDFILE
+
+extract () {
+ FILE=$1
+ case "${FILE#*.}" in
+ "tar.gz" )
+ tar -zxf $FILE
+ ;;
+ "tar.lz" )
+ tar --lzip -xf "$FILE"
+ ;;
+ "zip" )
+ unzip $FILE
+ ;;
+ * )
+ tar -xf $FILE
+ ;;
+ esac
+}
+
+package_exists () {
+ local exported="$XIB_EXPORT/repo/$REPO/$NAME"
+ local exported_pkg="$exported.xipkg"
+ local exported_pkg_info="$exported.xipkg.info"
+ local exported_pkg_build="$exported.xibuild"
+
+ if [ -f $exported_pkg ] && [ -f $exported_pkg_info ] && [ -f $exported_pkg_build ]; then
+ local built_sum=$(md5sum $exported_pkg_build | cut -d" " -f1)
+ local current_sum=$(md5sum $BUILDFILE | cut -d" " -f1)
+
+ if [ "$built_sum" = "$current_sum" ]; then
+ return 0
+ fi
+ fi
+
+ return 1
+}
+
+fetch_source () {
+ local src_dir="$XIB_CHROOT/build/source"
+ mkdir -pv $src_dir
+
+ pushd $src_dir
+ if git ls-remote -q $SOURCE $BRANCH &> /dev/null; then
+ # The source is a git repo
+ git clone $SOURCE .
+ git checkout $BRANCH
+ else
+ # The source is a file
+
+ local downloaded_file=$(basename $SOURCE)
+ curl -SsL $SOURCE > $downloaded_file
+ extract $downloaded_file
+
+ # if the extracted file only had one directory
+ if [ "$(ls -l | wc -l)" = "3" ]; then
+ for file in */*; do
+ mv $file .
+ done;
+ fi
+ fi
+ popd
+}
+
+clean_chroot () {
+ local export_dir="$XIB_CHROOT/export"
+ local build_dir="$XIB_CHROOT/build"
+
+ rm -rf $export_dir
+ rm -rf $build_dir
+
+ mkdir -pv $export_dir
+ mkdir -pv $build_dir
+
+ mkdir -pv "$XIB_EXPORT/repo/$REPO/"
+}
+
+make_buildscript () {
+ cat > "$XIB_CHROOT/build/build.sh" << "EOF"
+#!/bin/bash
+
+export PKG_NAME=$(cat /build/name)
+export PKG_DEST=/export
+
+prepare () {
+ echo "passing prepare"
+}
+
+build () {
+ echo "passing build"
+}
+
+check () {
+ echo "passing check"
+}
+
+package () {
+ echo "passing package"
+}
+
+cd /build
+ls
+source $PKG_NAME.xibuild
+cd /build/source
+
+prepare || exit 1
+build || exit 1
+check
+package || exit 1
+
+if command -v postinstall > /dev/null; then
+ POSTINSTALL=$(type postinstall | sed '1,3d,$d')
+ if [${#POSTINSTALL} != 0]; then
+ POST_DIR=$PKG_DEST/var/lib/xipkg/postinstall
+ mkdir -p $POST_DIR
+ echo "#!/bin/sh" > $POST_DIR/$PKG_NAME.sh
+ echo $POSTINSTALL >> $POST_DIR/$PKG_NAME.sh
+ fi
+fi
+EOF
+ chmod 700 "$XIB_CHROOT/build/build.sh"
+}
+
+package () {
+ local export_repo="$XIB_EXPORT/repo/$REPO"
+ local export_pkg="$XIB_EXPORT/repo/$REPO/$NAME.xipkg"
+ local pkg_dest="$XIB_CHROOT/export"
+
+ pushd "$pkg_dest"
+ if [ "$(ls -1 | wc -l)" = "0" ]; then
+ echo "package is empty"
+ exit 1;
+ fi
+ tar -C $pkg_dest -cvzf $export_pkg ./
+ popd
+}
+
+create_info () {
+ local export_pkg="$XIB_EXPORT/repo/$REPO/$NAME.xipkg"
+ local pkg_info="$export_pkg.info"
+
+ echo "" > $pkg_info
+ echo "NAME=$NAME" >> $pkg_info
+ echo "DESCRIPTION=$DESC" >> $pkg_info
+ echo "PKG_FILE=$NAME.xipkg" >> $pkg_info
+ echo "CHECKSUM=$(md5sum $export_pkg | awk '{ print $1 }')" >> $pkg_info
+ echo "SOURCE=$SOURCE" >> $pkg_info
+ echo "DATE=$(date)" >> $pkg_info
+ echo "DEPS=(${DEPS[*]})" >> $pkg_info
+}
+
+sign () {
+ local export_pkg="$XIB_EXPORT/repo/$REPO/$NAME.xipkg"
+ local pkg_info="$export_pkg.info"
+
+ echo "SIGNATURE=" >> $pkg_info
+ openssl dgst -sign $PRIV_KEY $export_pkg >> $pkg_info
+
+}
+
+build () {
+ clean_chroot
+ fetch_source
+ make_buildscript
+
+ cp "$BUILDFILE" "$XIB_CHROOT/build/"
+ printf $NAME > "$XIB_CHROOT/build/name"
+
+ local log_file="$XIB_EXPORT/repo/$REPO/$NAME.log"
+ xichroot $XIB_CHROOT /build/build.sh > $log_file
+
+ package
+ create_info
+
+ # TODO check if the key exists, if not, skip signing
+ sign
+
+ cp "$BUILDFILE" "$XIB_EXPORT/repo/$REPO/"
+
+}
+
+[ -z "${XIB_CHROOT}" ] && echo "CRITICAL! No chroot env variable set!" && exit 1;
+
+package_exists || build