|
#!/bin/bash
|
|
|
|
# getsource - Get build files for Arch/AUR packages on Arch Linux
|
|
# Copyright (C) 2018 Pekka Helenius
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
###########################################################
|
|
|
|
# TODO: Add support for wider range of processor architectures (below)
|
|
# TODO: Add directory support (getsource wine ~/winesource)
|
|
# TODO: create subdir for source files automatically to the current main dir
|
|
|
|
###########################################################
|
|
|
|
ARCH_DOMAINURL="https://git.archlinux.org"
|
|
ARCH_GITBASES=('packages.git' 'community.git')
|
|
|
|
AUR_DOMAINURL="https://aur.archlinux.org"
|
|
AUR_GITBASES=('aur.git')
|
|
|
|
CURDIR=$(pwd | awk '{print $NF}' FS=/)
|
|
|
|
if [[ -n "$1" ]]; then
|
|
CURDIR="$1"
|
|
else
|
|
read -r -p "Source package name? [Default: $CURDIR] " response
|
|
if [[ -n $response ]]; then
|
|
CURDIR=$response
|
|
fi
|
|
fi
|
|
|
|
##################################
|
|
|
|
function check_database() {
|
|
for GITBASE in ${2}; do
|
|
|
|
if [[ "$1" != "$AUR_DOMAINURL" ]]; then
|
|
BASEURL="$1/svntogit/$GITBASE/tree/trunk?h=packages/$CURDIR"
|
|
DOMAINURL=$ARCH_DOMAINURL
|
|
else
|
|
BASEURL="$1/cgit/$GITBASE/snapshot/$CURDIR.tar.gz"
|
|
DOMAINURL=$AUR_DOMAINURL
|
|
fi
|
|
|
|
wget -q -T 5 "$BASEURL" -o -
|
|
if [[ $? -eq 0 ]]; then
|
|
wget -q "$BASEURL"
|
|
if [[ "$1" != "$AUR_DOMAINURL" ]]; then
|
|
mv ./trunk?h=packages%2F$CURDIR ./baseurl.html
|
|
else
|
|
tar xf "$CURDIR.tar.gz"
|
|
fi
|
|
break
|
|
fi
|
|
done
|
|
|
|
if [[ ! -f ./baseurl.html ]]; then
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
##################################
|
|
|
|
function arch_repos_deepscan() {
|
|
|
|
ARCH_DATABASES=(core extra community community-testing)
|
|
|
|
for ARCH_DB in ${ARCH_DATABASES[*]}; do
|
|
|
|
ARCH_DB_URL="https://www.archlinux.org/packages/$ARCH_DB/x86_64/$CURDIR"
|
|
|
|
wget -q -T 5 "$ARCH_DB_URL" -o -
|
|
if [[ $? -eq 0 ]]; then
|
|
wget -q "$ARCH_DB_URL"
|
|
mv ./$CURDIR ./baseurl_2.html
|
|
break
|
|
fi
|
|
|
|
done
|
|
|
|
if [[ -f baseurl_2.html ]]; then
|
|
echo -e "Selecting another package name:\n"
|
|
CURDIR=$(grep "Source Files" baseurl_2.html | sed "s/.*href=[\"'].*packages\///g; s/[\"'].*//g")
|
|
echo -e "Package name is $CURDIR"
|
|
rm baseurl_2.html
|
|
check_database "$ARCH_DOMAINURL" "${ARCH_GITBASES[*]}"
|
|
arch_dl_files
|
|
else
|
|
echo -e "\nCouldn't find package $CURDIR\n"
|
|
exit 1
|
|
fi
|
|
|
|
}
|
|
|
|
##################################
|
|
|
|
function arch_dl_files() {
|
|
if [[ -f baseurl.html ]]; then
|
|
FILELIST=$(cat baseurl.html | grep -E "ls-mode" | sed "s/.*href=[\"']//g; s/[\"']>plain.*//g")
|
|
|
|
for file in $FILELIST; do
|
|
if [[ ! -f $file ]]; then
|
|
# Wget only if file doesn't exist
|
|
wget -q $DOMAINURL/$file
|
|
mv $(echo "$file" | sed 's/.*trunk//g; s/\///1' | sed 's/\//%2F/g') $(echo $file | sed 's/.*trunk//g; s/?.*//g; s/\///g')
|
|
fi
|
|
done
|
|
rm baseurl.html
|
|
echo -e "\nSource files for $CURDIR downloaded\n"
|
|
|
|
elif [[ -f "$CURDIR.tar.gz" ]]; then
|
|
mv ./$CURDIR/* ./
|
|
rm -Rf {"$CURDIR.tar.gz",$CURDIR}
|
|
echo -e "\nSource files for $CURDIR downloaded\n"
|
|
else
|
|
arch_repos_deepscan
|
|
fi
|
|
}
|
|
|
|
##################################
|
|
|
|
check_database "$ARCH_DOMAINURL" "${ARCH_GITBASES[*]}"
|
|
|
|
if [[ ! $? -eq 0 ]]; then
|
|
check_database "$AUR_DOMAINURL" "${AUR_GITBASES[*]}"
|
|
fi
|
|
|
|
arch_dl_files
|
|
|
|
##################################
|
|
|
|
# Check if we are raspberry pi (ARM 7) or not
|
|
if [[ $(cat /proc/cpuinfo | grep -i armv7 -m1 | wc -l) -eq 1 ]]; then
|
|
if [[ -f PKGBUILD ]]; then
|
|
cat PKGBUILD | grep arch= | grep -E "any|armv7h" > /dev/null
|
|
if [[ $? -ne 0 ]]; then
|
|
sed -i "s/arch=.*/arch=('any')/" PKGBUILD
|
|
echo -e "Modified architecture in PKGBUILD to 'any'\n"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
##################################
|
|
|
|
rm -Rf ./{,*trunk*} 2>/dev/null
|