2023-07-24 15:07:49 +00:00
#!/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
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
2023-07-24 16:50:51 +00:00
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"
2023-07-24 15:07:49 +00:00
else
2023-07-24 16:50:51 +00:00
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."
2023-07-24 15:07:49 +00:00
do_configure
fi
echo " Building $name ... "
export MAKEJOBS = $( nproc)
if [ " $default_build_make " = "true" ] ; then
make -j$MAKEJOBS
2023-07-24 16:50:51 +00:00
elif [ " $default_build_cmake " = "true" ] ; then
cmake --build .
2023-07-24 15:07:49 +00:00
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 ... "
2023-07-24 16:50:51 +00:00
mkdir -p $installdir
2023-07-24 15:07:49 +00:00
export DESTDIR = $installdir
if [ " $default_install_make " = "true" ] ; then
make install
2023-07-24 16:50:51 +00:00
elif [ " $default_install_cmake " = "true" ] ; then
cmake --install $builddir --prefix /usr
2023-07-24 15:07:49 +00:00
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