diff options
Diffstat (limited to 'pkgbuild-check-nonfree')
-rwxr-xr-x | pkgbuild-check-nonfree | 147 |
1 files changed, 82 insertions, 65 deletions
diff --git a/pkgbuild-check-nonfree b/pkgbuild-check-nonfree index e947a39..21842ac 100755 --- a/pkgbuild-check-nonfree +++ b/pkgbuild-check-nonfree @@ -3,79 +3,96 @@ # 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/>. -source /etc/libretools.conf -[[ -f $XDG_CONFIG_HOME/libretools/libretools.conf ]] && \ - source $XDG_CONFIG_HOME/libretools/libretools.conf +# 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. -mkdir -p $XDG_CONFIG_HOME/libretools -pushd $XDG_CONFIG_HOME/libretools/ >/dev/null +# 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. -# This is the exit status. -ev=0 +# You should have received a copy of the GNU General Public License +# along with Parabola. If not, see <http://www.gnu.org/licenses/>. -# Check if the blacklist variable is empty, and if so error. -[[ ${#BLACKLIST} -eq 0 ]] && { - error "BLACKLIST variable is not set your libretools.conf file" - exit 1 +function in_array { # usage : in_array( $needle, $haystack ) + + [[ $2 ]] || return 1 # Not found + local needle=$1; shift + local item + for item in "$@"; do + [[ ${item#@} = $needle ]] && return 0 # Found + done + return 1 # Not Found } -# Download the blacklist. -msg "Downloading the blacklist of proprietary software packages." -wget -N -q -O blacklist.txt "${BLACKLIST}" 2>/dev/null || { - error "Download failed, exiting" - [ -e $XDG_CONFIG_HOME/libretools/blacklist.txt ] || exit 1 + +function get_blacklist { # Download the blacklist. + + msg "Downloading the blacklist of proprietary software packages." + wget -N -q -O blacklist.txt "${BLACKLIST}" 2>/dev/null || { + [ -e $XDG_CONFIG_HOME/libretools/blacklist.txt ] || { + error "Download failed, exiting" + exit 1 + } + warning "Using local copy of blacklist" } -# Get everything before the `:' in the blacklist (that's the names of the -# packages). -unfree=($(cut -d: -f1 blacklist.txt)) -freerep=($(cut -d: -f2 blacklist.txt)) - -popd >/dev/null - -source /etc/rc.d/functions # We want the `in_array' function. -source ./PKGBUILD - -# The following piece of code will check whether a package is, or depends on; -# any non free package(s). - -# The `pkgname', `depends', `makedepends' arrays have been sourced from -# ./PKGBUILD. -msg "Looking for unfree dependencies" -for item in ${pkgname[@]} ${depends[@]} ${makedepends[@]} ; do -# We cycle through all of the programs in the array (if any), and check if -# they are in the `unfree' array. - if in_array $item ${unfree[@]} ; then -# If the package has a replacement of the same name, skip - if in_array $item ${freerep[@]} ; then - warning "$item is repackaged with the same name." - ev=0 - continue -# if item has a free replacement, use error 16. - elif in_array $item-libre ${freerep[@]} ; then - warning "$item -> $item-libre" - ev=16 - else - ev=15 - msg2 "found $item" +function check_deps { # Check wheter a package depends on non-free + + pushd $XDG_CONFIG_HOME/libretools/ >/dev/null + local unfree=($(cut -d: -f1 blacklist.txt)) # pkgname:free-replacement:comments + local freerep=($(cut -d: -f2 blacklist.txt)) # pkgname:free-replacement:comments + popd >/dev/null + + msg "Looking for unfree dependencies" + for item in ${pkgname[@]} ${depends[@]} ${makedepends[@]} ; do + + if in_array $item ${unfree[@]} ; then + + if in_array $item ${freerep[@]} ; then + warning "$item is repackaged with the same name." + continue + + elif in_array $item-libre ${freerep[@]} ; then + warning "$item -> $item-libre" + continue + else + ev=15 + msg2 "found $item" + fi fi - fi -done + done +} + +source /etc/libretools.conf + +if [ -z $XDG_CONFIG_HOME ]; then # Avoid /libretools dir doesn't exist errors + error "There's no XDG_CONFIG_HOME var set"; exit 1 +elif [ -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 [ -r PKGBUILD ]; then + source PKGBUILD +else + error "There is no PKGBUILD in dir"; exit 1 +fi + +if [ ! -d "$XDG_CONFIG_HOME/libretools" ]; then + mkdir -p $XDG_CONFIG_HOME/libretools +fi + +get_blacklist + +check_deps exit $ev |