From f49d58b5406b236db5b46b21f19bde03e4ba6d97 Mon Sep 17 00:00:00 2001 From: Caleb Fontenot Date: Fri, 8 Mar 2024 10:59:57 -0600 Subject: [PATCH] Init --- .gitignore | 2 + clone.sh | 136 ++++++++++++++++++++++++++ packages.txt | 269 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 407 insertions(+) create mode 100644 .gitignore create mode 100755 clone.sh create mode 100644 packages.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..02d550d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +built_packages/ +clone/ diff --git a/clone.sh b/clone.sh new file mode 100755 index 0000000..3b6ee90 --- /dev/null +++ b/clone.sh @@ -0,0 +1,136 @@ +#!/bin/bash +#set -x + +### Color Codes + +RED="\e[31m" +GREEN="\e[32m" +ENDCOLOR="\e[0m" + +#find . -not -name "packages.txt" -not -name "clone.sh" -not -name "." -exec rm -rfv {} \; +working_directory=$(pwd) +mkdir $working_directory/built_packages/ +mkdir $working_directory/clone/ +function statisfy_dependencies() { + for line in "$@"; do + cd $working_directory/clone + # clone all the packages first + echo "Attempting to clone $line..." + if ! [ -d $line ]; then + timeout 10s git clone https://gitlab.archlinux.org/archlinux/packaging/packages/$line.git + cd $working_directory/clone/$line + git switch main + #git branch -a + else + cd $working_directory/clone/$line +# git pull +# git switch main + fi + done + + cd $working_directory +} +function containsElement () { + local e match="$1" + shift + for e in "$@"; do + [[ "$e" == "$match" ]] && return 0; done + return 1 +} + +readarray first_pass < packages.txt +echo $first_pass +statisfy_dependencies ${first_pass[@]} +depends_array=() +makedepends_array=() +conflicts_array=() +while read line; do + # Check each PKGBUILD's dependencies. + cd $working_directory/clone/$line + # grab depends array +# eval $(source PKGBUILD; echo depends=$depends; echo makedepends=$makedepends; echo conflicts=$conflicts) + + # cache the output of makepkg to a file, since makepkg is slow at parsing the srcinfo data + if [[ ! -f $working_directory/clone/$line/.SRCINFO ]]; then + makepkg_output=$(makepkg --printsrcinfo ) + echo $makepkg_output | tee $working_directory/clone/$line/.SRCINFO + else + makepkg_output=$(cat $working_directory/clone/$line/.SRCINFO) + fi + #echo "$makepkg_output" + depends=$(echo "$makepkg_output" | grep -w "depends" | sed "s/depends = //g" | xargs) + makedepends=$(echo "$makepkg_output" | grep -w "makedepends" | sed "s/makedepends = //g" | xargs) + conflicts=$(echo "$makepkg_output" | grep -w "conflicts" | sed "s/conflicts = //g" | xargs) + # if we don't have the dependency, we need build it too + echo "depends for $line: ${depends[@]}" + for depends_element in ${depends[@]}; do + containsElement "$depends_element" "${depends_array[@]}" + if [[ $? == 1 ]]; then + echo "Adding ${depends_element}..." + depends_array+=("$depends_element") + fi + done + for depends_element in ${makedepends[@]}; do + containsElement "$depends_element" "${depends_array[@]}" + if [[ $? == 1 ]]; then + echo "Adding ${depends_element}..." + depends_array+=("$depends_element") + makedepends_array+=("$depends_element") + fi + done + for conflicts_element in ${conflicts[@]}; do + containsElement "$conflicts_element" "${conflicts_array[@]}" + if [[ $? == 1 ]]; then + echo -e "Conflicting elements for $line: ${RED} ${conflicts_element}${ENDCOLOR} ..." + conflicts_array+=("${conflicts_element}") + fi + done + +done < packages.txt +cd $working_directory +# Remove these dependencies, they are already taken care of, anyway :P +#delete=(gcc-libs glibc appstream-qt futuresql-qt6 cron clang=16.0.6 boost-libs kcachegrind-common kquickimageeditor libkmahjongg marble-common libcolord corrosion flatpak colord cronie kwrite plasma-workspace kgamma5 kdesdk-kioslaves zeroconf-ioslave kalendar) +delete=(clang=17.0.6 llvm-libs appstream-qt gcc-libs futuresql-qt6 boost-libs util-linux-libs systemd-libs packagekit-qt6 polkit-qt6 sh mesa-utils mesa-utils libpipewire) +for target in "${delete[@]}"; do + for i in "${!depends_array[@]}"; do + if [[ ${depends_array[i]} = $target ]]; then + unset 'depends_array[i]' + fi + done +done +echo ${depends_array[@]} +statisfy_dependencies ${depends_array[@]} +cd $working_directory/clone +echo -e "Conflicts detected: ${RED} ${conflicts_array[@]} ${ENDCOLOR}" +#read -p "Press Enter to continue..."