summaryrefslogtreecommitdiff
path: root/src/pkgbuild-check-nonfree
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkgbuild-check-nonfree')
-rwxr-xr-xsrc/pkgbuild-check-nonfree187
1 files changed, 187 insertions, 0 deletions
diff --git a/src/pkgbuild-check-nonfree b/src/pkgbuild-check-nonfree
new file mode 100755
index 0000000..0fd480c
--- /dev/null
+++ b/src/pkgbuild-check-nonfree
@@ -0,0 +1,187 @@
+#!/bin/bash
+# pkgbuild-check-nonfree
+# Copyright 2010 Joshua Ismael Haase Hernández, Joseph Graham
+# Copyright 2012 Luke Shumaker
+
+# ---------- 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
+
+cmd=${0##*/}
+ev=0
+
+# log_end() {
+# kill "$teepid"
+# rm "$logpipe"
+# }
+
+# log() {
+# local LOG="pkgbuild-check-nonfree-$(date -u +%Y%m%d).log"
+# # ensure overridden package variables survive tee with split packages
+# logpipe="$(mktemp)"
+# mkfifo "$logpipe"
+# tee "$LOG" < "$logpipe" &
+# teepid=$!
+# trap log_end ERR EXIT
+# }
+
+
+unset_pkgbuild() {
+ unset 'pkgbase' 'pkgname' 'pkgver' 'pkgrel' 'epoch' 'pkgdesc' \
+ 'arch' 'url' 'license' 'groups' 'optdepends' 'provides' \
+ 'conflicts' 'replaces' 'backup' 'options' 'install' \
+ 'changelog' 'source' 'noextract' 'md5sums' 'build' \
+ 'check' 'package' 'depends' 'makedepends' 'checkdepends'
+}
+
+assert_pkgbuild() {
+ if [ -e "$1" ]; then
+
+ source "$1"
+ if [ -n "${pkgname[0]}" ]; then
+ return 0 # valid PKGBUILD
+ fi
+
+ fi
+
+ error "$1 is not a valid PKGBUILD"
+ return 1
+}
+
+check_replacement() {
+ [ $2 ] || return 0 # Free (not found)
+ local needle=$1; shift
+ local item
+ local rep
+ for line in $@; do
+
+ local item="$(echo "$line" | cut -d':' -f1)"
+ local rep="$(echo "$line" | cut -s -d':' -f2)"
+
+ if [ "$item" == "$needle" ]; then
+ if [ -z "$rep" ]; then
+ return 15 # Nonfree (found)
+ else
+ echo "$rep"
+ return 0 # Free (has replacement)
+ fi
+ fi
+
+ done
+ return 0 # Free (not found)
+}
+
+##
+# Download the blacklist.
+##
+get_blacklist() {
+ mkdir -p "$XDG_CONFIG_HOME/libretools"
+ pushd "$XDG_CONFIG_HOME/libretools" >/dev/null
+
+ msg "Downloading the blacklist of proprietary software packages."
+
+ if ! wget -N -q -O blacklist.txt "${BLACKLIST}" 2>/dev/null; then
+
+ if [ -e "$XDG_CONFIG_HOME/libretools/blacklist.txt" ]; then
+ warning "Using local copy of blacklist"
+ else
+ error "Download failed, exiting"
+ fi
+
+ fi
+
+ popd > /dev/null
+}
+
+##
+# Check wheter a package depends on non-free
+##
+check_deps() {
+ unset_pkgbuild
+ if ! assert_pkgbuild "$1"; then
+ exit 1 # not PKGBUILD
+ fi
+
+ msg2 "${pkgbase:-${pkgname[0]}} $pkgver $pkgrel ${epoch:-""}" # > "$logpipe"
+
+ for pkg in "${pkgname[@]}" "${depends[@]}" "${makedepends[@]}" "${checkdepends[@]}"; do
+
+ local lines=($(grep "$pkg" "$XDG_CONFIG_HOME/libretools/blacklist.txt" | tr " " "_"))
+
+ local rep="$(check_replacement $pkg ${lines[@]})"
+ local freedom=$?
+
+ if [[ $freedom = 15 ]]; then
+ warning "found $pkg" # > "$logpipe"
+ ev=15
+ elif [ -n "$rep" ]; then
+ if [ "$rep" = "$pkg" ]; then
+ plain "$pkg is repackaged with the same name." # > "$logpipe"
+ else
+ plain "$pkg -> $rep" # > "$logpipe"
+ fi
+ fi
+ done
+}
+
+usage() {
+ # TODO: implement PKGBUILD arguments
+ echo "Usage: $cmd [OPTIONS] [PKGBUILD1 PKGBUILD2 ...]"
+ echo ""
+ echo "If no PKGBUILD is specified, \`./PKGBUILD' is implied"
+ echo ""
+ echo "Options:"
+ echo " -f Allow running as root user"
+ echo " -h Show this message"
+}
+
+main() {
+ local asroot=false
+ while getopts 'fh' arg; do
+ case "$arg" in
+ f) asroot=true;;
+ h) usage; exit 0;;
+ *) usage; exit 1;;
+ esac
+ done
+ shift $(($OPTIND - 1))
+ pkgbuilds=("$@")
+ if [[ $# < 1 ]]; then
+ pkgbuilds=("`pwd`/PKGBUILD")
+ fi
+
+ if [[ -w / ]] && ! $asroot; then
+ error "Run as normal user"
+ exit 1
+ fi
+
+ get_blacklist
+ # log
+
+ msg "Looking for unfree dependencies"
+
+ for p in "${pkgbuilds[@]}"; do
+ if [[ -n "$p" ]]; then
+ check_deps "$p"
+ fi
+ done
+
+ return $ev
+}
+
+main "$@"