#!/bin/bash
# Copyright 2010 Nicolás Reynolds, Joshua Ismael

# ---------- GNU General Public License 3 ----------

# 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 <http://www.gnu.org/licenses/>. 

. /etc/libretools.conf
. /etc/abs.conf

cmd=${0##*/}

usage() {
	echo "Usage: $cmd pkgname-from-aur1 [pkgname-from-aur2 ...]"
	echo
	echo "This script will download packages from aur to the current dir"
	echo "and check their license for nonfree issues."
}

main() {
	while getopts 'h' arg; do
		case $arg in
			h) usage; exit 0;;
			*) usage; exit 1;;
		esac
	done

	local missing_deps=()
	for _pkg in "$@"; do

		# Remove the version
		_pkg="${_pkg%%[<>=]*}"

		if [[ -f "${_pkg}/PKGBUILD" ]]; then
			warning "${_pkg} already existed."

			# Check if we want to diff
			if [[ -z "${DIFFTOOL}" ]]; then
				continue
			else
				# Store our copy of the PKGBUILD dir
				_diff="${PWD}/${_pkg}"
				stdnull "pushd $(mktemp --tmpdir -d ${_pkg}.XXXX)"
				msg2 "Downloading PKGBUILD into ${PWD} for diff"
			fi
		fi

		msg "Downloading $_pkg..."
		local url=https://aur.archlinux.org/packages/${_pkg:0:2}/${_pkg}/$_pkg.tar.gz
		wget -O - -q "$url" | tar xzf - >/dev/null 2>&1

		if [[ $? -ne 0 ]]; then
			error "Couldn't get $_pkg"
			continue
		fi

		stdnull "pushd $_pkg"

		if [[ ! -z "$_diff" ]]; then
			msg2 "Diffing files"
			# Diff all files with our difftool
			for file in *; do
				"${DIFFTOOL}" "${_diff}/${file}" "${file}"
			done

			# Go back to our copy to continue working
			stdnull "pushd ${_diff}"
		fi

		. PKGBUILD

		################################################################

		if ! pkgbuild-check-nonfree; then
			if [[ $? = 15 ]]; then
				warning "This PKGBUILD links to known unfree packages"
			fi
		fi

		################################################################

		msg2 "Checking license..."
		local free=0
		for _license in ${license[@]}; do
			if [[ ! -d /usr/share/licenses/common/$_license ]]; then
				warning "License $_license is not a common license"
				free=1
			fi
		done

		if [[ $free -eq 1 ]]; then
			plain "Please check that the license is included in the package and *specially* that it respects your freedom."
		fi

		################################################################

		for _dep in "${depends[@]}" "${makedepends[@]}"; do
			_dep=${_dep/[<>=]*/}
			if ! is_built $_dep; then
				if ! find ${ABSROOT} -maxdepth 2 -type d -name "$_dep" | egrep "*" >/dev/null ; then
					msg2 "$_dep will be get from AUR"
					missing_deps+=($_dep)
				fi
			else
				msg2 "$_dep is on repos"
			fi
		done

		stdnull popd
	done

	[[ ${#missing_deps[*]} -gt 0 ]] && {
		msg2 "Retrieving missing deps: ${missing_deps[@]}"
		$0 ${missing_deps[@]}
	}

	exit 0
}

main "$@"