#!/bin/bash # Copyright 2010 Joshua Ismael # Copyright 2010 Nicolás Reynolds # Copyright 2013 Luke Shumaker # # This file is part of Parabola. # # Parabola 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. # Parabola 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 Parabola. If not, see . . libremessages cmd=${0##*/} usage() { echo "Usage: $cmd [-h] pkgname-from-aur1 [pkgname-from-aur2 ...]" echo echo "This script will download packages from AUR to the current" echo "directory and check their license for nonfree issues. This does" echo "not mean that they are free; they may be incorrectly labeled, or" echo "have other freedom issues. It's a tool to help Parabola" echo "packagers, not to help users install things directly from AUR." } main() { while getopts 'h' arg; do case $arg in h) usage; return 0;; *) usage >&2; return 1;; esac done if [[ $# -lt 1 ]]; then usage >&2 return 1 fi . $(librelib conf.sh) load_files libretools check_vars libretools DIFFTOOL || exit 1 local startdir="$(pwd)" local missing_deps=() local ret=0 local pkg local copy_new local copy_old for pkg in "$@"; do pkg="${pkg%%[<>=]*}" # remove the version msg "Processing package: %s" "$pkg" copy_new="$startdir/$pkg" copy_old= if [[ -f "${copy_new}/PKGBUILD" ]]; then warning "%s already exists, will compare with new version." "$pkg" # Store our copy of the PKGBUILD dir copy_old=$copy_new copy_new="$(mktemp --tmpdir -d aur-${pkg}.new.XXXX)/$pkg" cd "${copy_new%/*}" fi msg2 "Downloading" local url="https://aur.archlinux.org/packages/${pkg:0:2}/$pkg/$pkg.tar.gz" set -o pipefail if ! wget -O- -q "$url" | bsdtar xf -; then ret=$(($ret|2)) error "Couldn't get %s" "$pkg" continue fi set +o pipefail if [[ -n $copy_old ]]; then msg2 "Diffing files" cd "$copy_new" # Diff all files with our difftool local diffed=false for file in *; do if ! cmp -s "${copy_old}/${file}" "${copy_new}/${file}" ; then warning "%s != %s" "${copy_old}/${file}" "${copy_new}/${file}" diffed=true "${DIFFTOOL}" "${copy_old}/${file}" "${copy_new}/${file}" fi done if $diffed; then read -p "Press enter to continue." fi # Go back to our copy to continue working cd "$copy_old" rm -rf -- "${copy_new%/*}" else cd "$copy_new" fi load_PKGBUILD ################################################################ pkgbuild-check-nonfree -c case $? in 0) :;; 15) warning "This PKGBUILD links to known unfree packages";; *) warning "pkgbuild-check-nonfree failed to run";; esac ################################################################ local s=0 pkgbuild-check-licenses || s=$? for i in 1 2 4; do if [[ $i -eq $(($s & $i)) ]]; then case $i in 1) warning "pkgbuild-check-licenses encountered an error";; 2) warning "This PKGBUILD has an uncommon license";; 4) warning "This PKGBUILD has a known nonfree license";; esac fi done unset s ################################################################ local _deps=( # depends "${depends[@]}" "${makedepends[@]}" "${checkdepends[@]}" # mksource depends "${mkdepends[@]}" ) local _dep msg2 "Checking dependencies" for _dep in "${_deps[@]}"; do _dep=${_dep/[<>=]*/} if ! is_built $_dep; then if ! pacman -Sddp "$_dep" &>/dev/null ; then plain "%s: will be downloaded from AUR" "$_dep" missing_deps+=($_dep) fi else plain "%s: is on repos" "$_dep" fi done cd "$startdir" done if [[ ${#missing_deps[*]} -gt 0 ]]; then msg "Retrieving missing deps: %s" "${missing_deps[*]}" "$0" "${missing_deps[@]}" ret=$(($ret|$?)) fi return $ret; } main "$@"