summaryrefslogtreecommitdiff
path: root/src/pkgbuild-check-nonfree
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkgbuild-check-nonfree')
-rwxr-xr-xsrc/pkgbuild-check-nonfree205
1 files changed, 205 insertions, 0 deletions
diff --git a/src/pkgbuild-check-nonfree b/src/pkgbuild-check-nonfree
new file mode 100755
index 0000000..df0ff36
--- /dev/null
+++ b/src/pkgbuild-check-nonfree
@@ -0,0 +1,205 @@
+#!/bin/bash
+# pkgbuild-check-nonfree
+# Copyright 2010 Joshua Ismael Haase Hernández, Joseph Graham
+
+# ---------- 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/>.
+
+# function log_end {
+# kill "$teepid"
+# rm "$logpipe"
+# }
+
+# function log {
+# LOG="pkgbuild-check-nonfree-$(date -u +%Y%m%d).log"
+# # ensure overridden package variables survive tee with split packages
+# logpipe="$(mktemp -u "$startdir/logpipe.XXXXXXXX")"
+# mkfifo "$logpipe"
+# tee "$LOG" < "$logpipe" &
+# teepid=$!
+# trap log_end ERR EXIT
+# }
+
+
+function 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'
+
+}
+
+function 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
+}
+
+function check_replacement {
+
+ [ $2 ] || return 0 # Free (not found)
+ local needle=$1; shift
+ local item
+ local rep
+ for line in $@; do
+
+ item="$(echo "$line" | cut -d':' -f1)"
+ 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)
+}
+
+function get_blacklist { # Download the blacklist.
+
+ 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
+}
+
+function check_deps { # Check wheter a package depends on non-free
+
+ unset_pkgbuild
+
+ if ! assert_pkgbuild "$1"; then
+ return 1 # not PKGBUILD
+ fi
+
+ msg2 "${pkgbase:-${pkgname[0]}} $pkgver $pkgrel ${epoch:-""}" # > "$logpipe"
+
+ for pkg in ${pkgname[@]} ${depends[@]} ${makedepends[@]} ${checkdepends[@]}; do
+
+ lines=($(grep "$pkg" "$XDG_CONFIG_HOME/libretools/blacklist.txt" | tr " " "_"))
+
+ rep="$(check_replacement $pkg ${lines[@]})"
+ freedom=$?
+
+ if [ "$freedom" -eq 15 ]; then
+ warning "found $pkg" # > "$logpipe"
+ ev=15
+ continue
+
+ elif [ -n "$rep" ]; then
+
+ if [ "$rep" = "$pkg" ]; then
+ plain "$pkg is repackaged with the same name." # > "$logpipe"
+ continue
+ else
+ plain "$pkg -> $rep" # > "$logpipe"
+ continue
+ fi
+
+ fi
+
+ done
+
+}
+
+function usage {
+ # TODO: implement PKGBUILD arguments
+ echo ""
+ echo "$(basename $0) [options] [PKGBUILD1 PKGBUILD2 ...]"
+ echo ""
+ echo "OPTIONS"
+ echo ""
+ echo " -h : this message"
+ echo ""
+ echo "If no PKGBUILD is specified, one is searched on current directory"
+
+ exit 1
+}
+
+while getopts 'h' arg; do
+ case "$arg" in
+ h) usage ;;
+ esac
+done
+
+if [ -w / ]; then
+ error "Run as normal user"
+fi
+
+source /etc/libretools.conf
+if [ -e "$XDG_CONFIG_HOME/libretools/libretools.conf" ]; then
+ source "$XDG_CONFIG_HOME/libretools/libretools.conf"
+fi
+
+if [ -z "${BLACKLIST}" ]; then
+ error "BLACKLIST variable is not set your libretools.conf file"
+ exit 1
+fi
+
+if [ ! -d "$XDG_CONFIG_HOME/libretools" ]; then
+ mkdir -p "$XDG_CONFIG_HOME/libretools"
+fi
+
+startdir=`pwd`
+
+get_blacklist
+# log
+
+shift $(( OPTIND - 1))
+
+msg "Looking for unfree dependencies"
+
+if [ $# -ge 1 ]; then
+
+ for p in $@; do
+ if [ -n "$p" ]; then
+ check_deps "$p"
+ fi
+ done
+
+else
+
+ check_deps "`pwd`/PKGBUILD"
+
+fi
+
+exit $ev