iglupkg/iglupkg.sh

167 lines
2.8 KiB
Bash
Raw Normal View History

2021-10-28 14:02:47 +00:00
#!/bin/sh
2022-02-13 08:56:12 +00:00
set -e
2021-10-28 14:02:47 +00:00
2022-02-13 08:56:12 +00:00
export HOST_ARCH=$(uname -m)
export HOST_TRIPLE="$HOST_ARCH-unknown-linux-musl"
2022-03-25 18:42:44 +00:00
usage() {
echo "usage: $(basename $0) [fbp]"
exit 1
}
2022-03-25 18:42:44 +00:00
fatal() {
echo "ERROR: $@"
exit 1
}
warn() {
echo "WARNING: $@"
}
to_run=
2022-03-25 18:42:44 +00:00
while [ ! -z "$1" ]; do
case "$1" in
--with-cross=*)
ARCH=$(echo "$1" | cut -d'=' -f2)
[ -z "$ARCH" ] && fatal '--with-cross=<arch> requires an argument'
echo "INFO: cross compiling for $ARCH"
WITH_CROSS="$ARCH"
;;
--with-cross)
fatal '--with-cross=<arch> requires an argument'
;;
--with-cross-dir=*)
WITH_CROSS_DIR=$(echo "$1" | cut -d'=' -f2)
[ -z "$WITH_CROSS_DIR" ] && fatal '--with-cross-dir=<sysroot> requires an argument'
[ -d "$WITH_CROSS_DIR" ] 2>/dev/null || warn "$WITH_CROSS_DIR does not exist"
;;
--with-cross-dir)
fatal '--with-cross-dir=<sysroot> requires an argument'
;;
2022-03-25 18:42:44 +00:00
--for-cross)
echo 'INFO: for cross'
FOR_CROSS=1
;;
--for-cross-dir=*)
FOR_CROSS_DIR=$(echo "$1" | cut -d'=' -f2)
[ -z "$FOR_CROSS_DIR" ] && fatal '--for-cross-dir=<sysroot> requires an argument'
;;
--for-cross-dir)
fatal '--for-cross-dir=<sysroot> requires an argument'
;;
2022-03-25 18:42:44 +00:00
fbp)
to_run="f b p"
;;
fb)
to_run="f b"
;;
f)
to_run="f"
;;
bp)
to_run="b p"
;;
b)
to_run="b"
;;
p)
to_run="p"
;;
*)
fatal "invalid argument $1"
;;
esac
shift
done
[ -z "$WITH_CROSS_DIR" ] && WITH_CROSS_DIR=/usr/$ARCH-linux-musl
[ -z "$FOR_CROSS_DIR" ] && FOR_CROSS_DIR=/usr/$ARCH-linux-musl
2022-02-13 08:56:12 +00:00
if [ -z "$ARCH" ]; then
export ARCH=$HOST_ARCH
2022-03-25 18:42:44 +00:00
fi
if [ ! -z "$FOR_CROSS" ]; then
2022-02-13 08:56:12 +00:00
cross=-$ARCH
fi
export TRIPLE="$ARCH-unknown-linux-musl"
export CC=cc
export CXX=c++
2022-02-13 08:56:12 +00:00
export AR=ar
export RANLIB=ranlib
2022-03-25 18:42:44 +00:00
export CFLAGS="-O3"
2022-02-13 08:56:12 +00:00
export CXXFLAGS=$CFLAGS
2021-12-29 18:59:35 +00:00
export JOBS=$(nproc)
2022-02-13 08:56:12 +00:00
[ -f build.sh ] || fatal 'build.sh not found'
2021-10-28 14:02:47 +00:00
. ./build.sh
2022-02-13 08:56:12 +00:00
srcdir="$(pwd)/src"
outdir="$(pwd)/out"
pkgdir="$(pwd)/out/$pkgname.$pkgver"
2022-02-13 08:56:12 +00:00
rm -rf "$outdir"
2021-10-28 14:02:47 +00:00
2022-02-13 08:56:12 +00:00
_genmeta() {
2021-10-28 14:02:47 +00:00
echo "[pkg]"
echo "pkgname=$pkgname"
echo "pkgver=$pkgver"
echo "deps=$deps"
echo ""
echo "[license]"
license
echo ""
echo "[backup]"
backup
echo ""
echo "[fs]"
cd "$pkgdir"
find *
cd "$srcdir"
}
2022-02-13 08:56:12 +00:00
_f() {
rm -rf "$srcdir"
mkdir -p "$srcdir"
2021-10-28 14:02:47 +00:00
cd "$srcdir"
fetch
cd "$srcdir"
2022-02-13 08:56:12 +00:00
:> .fetched
}
2021-10-28 14:02:47 +00:00
2022-02-13 08:56:12 +00:00
_b() {
2021-10-28 14:02:47 +00:00
cd "$srcdir"
2022-02-13 08:56:12 +00:00
[ -f .fetched ] || fatal 'must fetch before building'
2022-03-25 18:42:44 +00:00
MAKEFLAGS=-j"$JOBS" build
2021-10-28 14:02:47 +00:00
cd "$srcdir"
2022-02-13 08:56:12 +00:00
:> .built
}
2021-10-28 14:02:47 +00:00
2022-02-13 08:56:12 +00:00
_p() {
cd "$srcdir"
[ -f .built ] || fatal 'must build before packaging'
mkdir -p "$pkgdir"
package
install -d "$pkgdir/usr/share/iglupkg/"
cd "$srcdir"
_genmeta > "$pkgdir/usr/share/iglupkg/$pkgname$cross"
2021-10-31 09:58:37 +00:00
cd "$pkgdir"
2022-03-25 18:42:44 +00:00
tar --owner=0 --group=0 -cf ../$pkgname$cross.$pkgver.tar.zst * -I zstd
2022-02-13 08:56:12 +00:00
}
2021-10-31 09:58:37 +00:00
2022-03-25 18:42:44 +00:00
if [ -z "$to_run" ]; then
2022-02-13 08:56:12 +00:00
[ -f "$srcdir/.fetched" ] || _f
[ -f "$srcdir/.built" ] || _b
_p
else
2022-03-25 18:42:44 +00:00
set -- $to_run
2022-02-13 08:56:12 +00:00
while [ ! -z "$1" ]; do
_"$1"
shift
done
2021-10-28 14:02:47 +00:00
fi