158 lines
4.6 KiB
Bash
Executable File
158 lines
4.6 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=${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."
|
|
|
|
if [ -x ${skip_dependencies+x} ]; then
|
|
if ! [ -z ${dependencies+x} ]; then
|
|
echo "Installing dependencies of $name: (${dependencies[@]})"
|
|
for dep in ${dependencies[@]}; do
|
|
tools/install-package.sh $dep
|
|
done
|
|
fi
|
|
fi
|
|
|
|
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
|
|
|
|
if [ -z ${skip_download_sources+x} ]; then
|
|
# 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."
|
|
if ! [ -f $output ]; then
|
|
echo "Downloading tarball for $name..."
|
|
wget $url --quiet
|
|
else
|
|
echo "Using cached tarball for $name."
|
|
fi
|
|
echo "$sha256sum $output" | sha256sum -c
|
|
tar xf $output
|
|
;;
|
|
git)
|
|
if ! [ -d $srcdir ]; then
|
|
echo "Cloning repository for $name..."
|
|
git clone $url $srcdir
|
|
else
|
|
echo "Using local repository for $name."
|
|
fi
|
|
if ! [ -z ${tag+x} ]; then
|
|
cd $srcdir
|
|
git checkout $tag
|
|
cd -
|
|
fi
|
|
;;
|
|
*)
|
|
show_error "error: Unrecognized 'format' key in PACKAGE file: '$format'"
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
if ! [ "$set_cc_variables" = "no" ]; then
|
|
export CC=$LUNA_ARCH-luna-gcc
|
|
export CXX=$LUNA_ARCH-luna-g++
|
|
export AR=$LUNA_ARCH-luna-ar
|
|
export PKG_CONFIG=luna-pkg-config
|
|
export CC_FOR_BUILD=gcc
|
|
export CXX_FOR_BUILD=g++
|
|
export AR_FOR_BUILD=ar
|
|
export PKG_CONFIG_FOR_BUILD=pkg-config
|
|
fi
|
|
|
|
mkdir -p $builddir
|
|
cd $builddir
|
|
|
|
if [ -z ${skip_patch+x} ]; then
|
|
declare -F do_patch &>/dev/null && do_patch
|
|
fi
|
|
|
|
if [ -z ${skip_configure+x} ]; then
|
|
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
|
|
fi
|
|
|
|
if [ -z ${skip_build+x} ]; then
|
|
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
|
|
fi
|
|
|
|
if [ -z ${skip_install+x} ]; then
|
|
echo "Installing $name..."
|
|
|
|
rm -rf $installdir # clean it if it already existed
|
|
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
|
|
|
|
rm -f $installdir/usr/lib/*.la # remove all libtool .la files, as they use host stuff which we don't want at all
|
|
set +e
|
|
$LUNA_ARCH-luna-strip $installdir/usr/bin/* # strip all binaries
|
|
set -e
|
|
|
|
cd $installdir
|
|
|
|
tar czf $LUNA_ROOT/ports/out/$name-$version.tar.gz *
|
|
fi
|
|
|
|
if [ -z ${preserve_workdir+x} ]; then
|
|
cd $LUNA_ROOT
|
|
rm -rf $WORKDIR
|
|
fi
|