Luna/tools/make-package.sh
apio 2e2b87b714
All checks were successful
continuous-integration/drone/push Build is passing
ports+tools: Add bc port
It segfaults when writing "about", but oh well...
2023-07-24 19:14:22 +02:00

118 lines
3.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -e
source $(dirname $0)/env.sh
cd $LUNA_ROOT
PORT_NAME=$1
if ! [ -f ports/$PORT_NAME/PACKAGE ]
then
echo "Package $PORT_NAME does not exist. Make sure there is a valid PACKAGE file in the appropriate directory!"
exit 1
fi
export WORKDIR=$LUNA_ROOT/ports/temp/
show_error()
{
echo $1
exit 1
}
source ports/$PORT_NAME/PACKAGE
[ -z ${name+x} ] && show_error "error: The port's PACKAGE file does not have a 'name' key."
[ -z ${version+x} ] && show_error "error: The port's PACKAGE file does not have a 'version' key."
[ -z ${format+x} ] && show_error "error: The port's PACKAGE file does not have a 'format' key."
[ -z ${url+x} ] && show_error "error: The port's PACKAGE file does not have a 'url' key."
export portdir=$LUNA_ROOT/ports/$name/
export srcdir=${srcdir:-$WORKDIR/$name-$version}
export builddir=$WORKDIR/build-$name
export installdir=$WORKDIR/pkgroot-$name
mkdir -p $WORKDIR
cd $WORKDIR
# Download package sources
case $format in
tar)
[ -z ${output+x} ] && show_error "error: The 'tar' download format needs an 'output' key."
[ -z ${sha256sum+x} ] && show_error "error: The 'tar' download format needs a 'sha256sum' key."
echo "Downloading tarball for $name..."
wget $url --quiet
echo "$sha256sum $output" | sha256sum -c
tar xf $output
rm $output
;;
git)
echo "Cloning repository for $name..."
git clone $url $srcdir
if ! [ -z ${tag+x} ]; then
cd $srcdir
git checkout $tag
cd -
fi
;;
*)
show_error "error: Unrecognized 'format' key in PACKAGE file: '$format'"
;;
esac
export CC=x86_64-luna-gcc
export CXX=x86_64-luna-g++
export CC_FOR_BUILD=gcc
export CXX_FOR_BUILD=g++
mkdir -p $builddir
cd $builddir
declare -F do_patch &>/dev/null && do_patch
echo "Configuring $name..."
if [ "$use_default_configure" = "true" ]; then
$srcdir/configure --host=$LUNA_ARCH-luna --prefix=/usr
elif [ "$use_cmake_configure" = "true" ]; then
cmake -S $srcdir -B . -DCMAKE_C_COMPILER=$LUNA_ARCH-luna-gcc -DCMAKE_CXX_COMPILER=$LUNA_ARCH-luna-g++ -G "Unix Makefiles"
else
declare -F do_configure &>/dev/null || show_error "error: If not using a default configure line, the PACKAGE file must provide a 'do_configure' function."
do_configure
fi
echo "Building $name..."
export MAKEJOBS=$(nproc)
if [ "$default_build_make" = "true" ]; then
make -j$MAKEJOBS
elif [ "$default_build_cmake" = "true" ]; then
cmake --build .
else
declare -F do_build &>/dev/null || show_error "error: If not using a default build preset, the PACKAGE file must provide a 'do_build' function."
do_build
fi
echo "Installing $name..."
mkdir -p $installdir
export DESTDIR=$installdir
if [ "$default_install_make" = "true" ]; then
make install
elif [ "$default_install_cmake" = "true" ]; then
cmake --install $builddir --prefix /usr
else
declare -F do_install &>/dev/null || show_error "error: If not using a default install preset, the PACKAGE file must provide a 'do_install' function."
do_install
fi
cd $installdir
tar czf $LUNA_ROOT/ports/out/$name-$version.tar.gz *
cd $LUNA_ROOT
rm -rf $WORKDIR