summaryrefslogtreecommitdiff
path: root/xibuild/build_package.sh
diff options
context:
space:
mode:
authordavidovski <david@davidovski.xyz>2022-02-06 00:40:22 +0000
committerdavidovski <david@davidovski.xyz>2022-02-06 00:40:22 +0000
commit2c82b81fcd8fc723712ac605041da5142f765730 (patch)
treeda3ebf0f981d9f6e6bf4ccecef4ba55c044ae0a3 /xibuild/build_package.sh
parent0b0913a10d6714015f1d1afa1a737086e20bac41 (diff)
moved src files to xibuild files
Diffstat (limited to 'xibuild/build_package.sh')
-rwxr-xr-xxibuild/build_package.sh205
1 files changed, 205 insertions, 0 deletions
diff --git a/xibuild/build_package.sh b/xibuild/build_package.sh
new file mode 100755
index 0000000..44521a9
--- /dev/null
+++ b/xibuild/build_package.sh
@@ -0,0 +1,205 @@
+#!/bin/bash
+
+GREEN="\033[0;32m"
+BLUE="\033[0;34m"
+
+BUILDFILE=$1
+REPO=$(echo $BUILDFILE | rev | cut -d/ -f2 | rev)
+NAME=$(basename $BUILDFILE .xibuild)
+
+source $BUILDFILE
+
+extract () {
+ FILE=$1
+ case "${FILE##*.}" in
+ "gz" )
+ tar -zxf $FILE
+ ;;
+ "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_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 () {
+ # download additional files
+ local src_dir="$XIB_CHROOT/build/source"
+ mkdir -p $src_dir
+
+ cd $src_dir
+
+ if [ ! -z ${SOURCE} ]; then
+
+ if git ls-remote -q $SOURCE $BRANCH &> /dev/null; then
+ # The source is a git repo
+ git clone $SOURCE . &> /dev/null
+ git checkout $BRANCH &> /dev/null
+ 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
+ echo $file | grep -q '\.$' || mv $file .
+ done;
+ fi
+ fi
+ fi
+
+ # download additional files
+ if [ ! -z ${ADDITIONAL} ]; then
+ for url in ${ADDITIONAL[*]}; do
+ local name=$(basename $url)
+ curl -SsL $url > $src_dir/$name
+ done
+ fi
+}
+
+
+clean_chroot () {
+ local export_dir="$XIB_CHROOT/export"
+ local build_dir="$XIB_CHROOT/build"
+
+ rm -rf $export_dir
+ rm -rf $build_dir
+
+ mkdir -p $export_dir
+ mkdir -p $build_dir
+
+ mkdir -p "$XIB_EXPORT/repo/$REPO/"
+}
+
+make_buildscript () {
+
+ echo MAKEFLAGS="$MAKEFLAGS" >> "$XIB_CHROOT/build/profile"
+ echo LDFLAGS="$LDFLAGS" >> "$XIB_CHROOT/build/profile"
+
+ cat > "$XIB_CHROOT/build/build.sh" << "EOF"
+#!/bin/bash
+source /build/profile
+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
+
+echo "==========================PREPARE STAGE=========================="
+prepare || exit 1
+echo "==========================BUILD STAGE=========================="
+build || exit 1
+echo "==========================CHECK STAGE=========================="
+check || exit 1
+echo "==========================PACKAGE STAGE=========================="
+package || exit 1
+
+printf "checking for postinstall... "
+if command -v postinstall > /dev/null; then
+ echo "adding postinstall"
+ 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
+else
+ echo "no postinstall"
+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"
+
+ cd "$pkg_dest"
+ if [ "$(ls -1 | wc -l)" = "0" ]; then
+ printf " package is empty;"
+ [ -z "${SOURCE}" ] || exit 1;
+ fi
+ tar -C $pkg_dest -czf $export_pkg ./
+}
+
+build () {
+ printf "$BLUE\tCleaning chroot..."
+ clean_chroot && printf "$GREEN prepared\n" || return 1
+
+ printf "$BLUE\tfetching source..."
+ fetch_source && printf "$GREEN fetched $(du -sh "$XIB_CHROOT/build/source" | awk '{ print $1 }')\n" || return 1
+
+ printf "$BLUE\tgenerating buildscript..."
+ make_buildscript && printf "$GREEN generated\n" || return 1
+
+ cp "$BUILDFILE" "$XIB_CHROOT/build/"
+ printf $NAME > "$XIB_CHROOT/build/name"
+
+ local log_file="$XIB_EXPORT/repo/$REPO/$NAME.log"
+
+ printf "$BLUE\tBuilding package..."
+ xichroot $XIB_CHROOT /build/build.sh &> $log_file && printf "$GREEN built!\n" || return 1
+
+ printf "$BLUE\tPackaging package..."
+ package && printf "$GREEN packaged to $(du -sh "$XIB_EXPORT/repo/$REPO/$NAME.xipkg" | awk '{ print $1 }')!\n" || return 1
+
+ printf "$BLUE\tCreating package info..."
+ create_info && printf "$GREEN created info!\n" || return 1
+
+ # TODO check if the key exists, if not, skip signing
+ printf "$BLUE\tSigning package..."
+ sign && printf "$GREEN signed!\n" || return 1
+
+ cp "$BUILDFILE" "$XIB_EXPORT/repo/$REPO/"
+}
+
+[ -z "${XIB_CHROOT}" ] && echo "CRITICAL! No chroot env variable set!" && exit 1;
+
+package_exists && printf "\tPackage exists!\n" || build
+