2022-05-17 19:52:57 +00:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
# dirs
|
|
|
|
BUILD_DIR="/mnt/build"
|
|
|
|
SRC_DIR="/mnt/src"
|
|
|
|
OUT_DIR="/mnt/out"
|
|
|
|
TMP_DIR="$(mktemp -d -t medzik-aur-XXXX)"
|
|
|
|
SCRIPT_DIR="$(realpath "$(dirname "$0")"/scripts)"
|
|
|
|
|
2022-06-20 10:09:17 +00:00
|
|
|
# load lib
|
2022-05-17 19:52:57 +00:00
|
|
|
source "${SCRIPT_DIR}/lib/parse-conf.sh"
|
2022-06-20 10:09:17 +00:00
|
|
|
source "${SCRIPT_DIR}/lib/build/patches.sh"
|
2022-05-17 19:52:57 +00:00
|
|
|
|
|
|
|
# change owner of the directories in /mnt to the current user
|
|
|
|
sudo chown -R $(id -u) /mnt/*
|
|
|
|
|
|
|
|
# makepkg flags
|
|
|
|
MAKEPKG_SYNCDEPS_FLAGS="--syncdeps --noconfirm --nobuild --noextract"
|
2022-05-19 14:16:58 +00:00
|
|
|
MAKEPKG_BUILD_FLAGS="--rmdeps --clean --skippgpcheck --nocheck --config /etc/makepkg.${BUILD_ARCH}.conf"
|
2022-05-17 19:52:57 +00:00
|
|
|
|
|
|
|
MAKEFLAGS="-j$(nproc)"
|
|
|
|
|
|
|
|
echo "[i] Creating /etc/buildtime..."
|
|
|
|
echo $(date +"%s") | sudo tee /etc/buildtime
|
|
|
|
|
|
|
|
cd "${SRC_DIR}"
|
|
|
|
|
|
|
|
# directory where temporary files with package names for the build will be created
|
|
|
|
PACKAGES_TO_BUILD_DIR="${TMP_DIR}/tobuilt"
|
|
|
|
mkdir -p "${PACKAGES_TO_BUILD_DIR}"
|
|
|
|
|
2022-06-20 10:13:31 +00:00
|
|
|
run-build() {
|
2022-05-17 19:52:57 +00:00
|
|
|
pkgname="${1}"
|
|
|
|
pkgdir="${SRC_DIR}/packages/${pkgname}"
|
|
|
|
|
|
|
|
echo "::group::[i] Building '${pkgname}'"
|
|
|
|
|
|
|
|
if [ ! -f "${pkgdir}/PKGBUILD" ]
|
|
|
|
then
|
|
|
|
eval "$(parse-conf ${pkgdir})"
|
|
|
|
|
|
|
|
aur_name="${AUR_NAME}"
|
|
|
|
|
|
|
|
git clone "https://aur.archlinux.org/${aur_name}.git" "${BUILD_DIR}/${pkgname}"
|
|
|
|
|
|
|
|
EXIT_CODE="${?}"
|
|
|
|
|
|
|
|
if (( ${EXIT_CODE} ))
|
|
|
|
then
|
|
|
|
echo "${pkgname} | exit code: ${EXIT_CODE}"
|
|
|
|
echo "${pkgname} | exit code: ${EXIT_CODE}" >> "${SRC_DIR}/fail_built.txt"
|
|
|
|
return ${EXIT_CODE}
|
|
|
|
fi
|
|
|
|
else
|
2022-05-17 20:15:51 +00:00
|
|
|
mkdir "${BUILD_DIR}/${pkgname}"
|
|
|
|
cp -r "${pkgdir}"/* "${BUILD_DIR}/${pkgname}/"
|
2022-05-17 19:52:57 +00:00
|
|
|
fi
|
|
|
|
|
|
|
|
cd "${BUILD_DIR}/${pkgname}"
|
|
|
|
|
2022-05-18 19:49:50 +00:00
|
|
|
# run custom patches
|
|
|
|
echo "[i] Running custom patches..."
|
2022-06-20 10:09:17 +00:00
|
|
|
patches
|
2022-05-18 19:49:50 +00:00
|
|
|
|
2022-05-17 19:52:57 +00:00
|
|
|
echo "[i] Installing dependencies..."
|
|
|
|
for (( i=0; i<15; i++ ))
|
|
|
|
do
|
|
|
|
sudo pacman -Sy
|
|
|
|
makepkg ${MAKEPKG_SYNCDEPS_FLAGS}
|
|
|
|
|
|
|
|
EXIT_CODE="${?}"
|
|
|
|
|
|
|
|
if ! (( ${EXIT_CODE} ))
|
|
|
|
then
|
|
|
|
break
|
|
|
|
else
|
|
|
|
sleep 2
|
|
|
|
echo "==> Sychronizing dependencies... (attempt $i)"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
SOURCE_DATE_EPOCH=$(cat /etc/buildtime) BUILDDIR="${BUILD_DIR}/makepkg" PKGDEST="${OUT_DIR}" makepkg ${MAKEPKG_BUILD_FLAGS}
|
|
|
|
|
|
|
|
EXIT_CODE="${?}"
|
|
|
|
|
|
|
|
if (( ${EXIT_CODE} ))
|
|
|
|
then
|
|
|
|
echo "${pkgname} | exit code: ${EXIT_CODE}"
|
|
|
|
echo "${pkgname} | exit code: ${EXIT_CODE}" >> "${SRC_DIR}/fail_built.txt"
|
|
|
|
return ${EXIT_CODE}
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo "::endgroup::"
|
|
|
|
}
|
|
|
|
|
2022-06-20 10:13:31 +00:00
|
|
|
# check which packages to build
|
|
|
|
while IFS= read -r pkg
|
|
|
|
do
|
|
|
|
run-build "${pkg}"
|
|
|
|
done < "${SRC_DIR}/built_packages.txt"
|
|
|
|
|
2022-05-17 19:52:57 +00:00
|
|
|
if [ -f "${SRC_DIR}/fail_built.txt" ]
|
|
|
|
then
|
|
|
|
printf "\n\nFailed to build:\n"
|
|
|
|
|
|
|
|
cat --number "${SRC_DIR}/fail_built.txt"
|
|
|
|
|
|
|
|
exit 1
|
|
|
|
fi
|