| | |
| | | function usage |
| | | { |
| | | [[ -n "$1" ]] && printf "ERROR: %s\n\n" "$1" >&2 |
| | | printf "Usage: license-detector [-d] LICENSE_FILE\n" >&2 |
| | | printf "Usage: license-detector [-d] [-l LICENSE] LICENSE_FILE\n" >&2 |
| | | [[ -n "$1" ]] && exit 1 |
| | | exit 0 |
| | | } |
| | | |
| | | |
| | | DEBUG=0 |
| | | while getopts ":hd" OPT ; do |
| | | LICENSE="*" |
| | | while getopts ":hdl:" OPT ; do |
| | | case "$OPT" in |
| | | "?"|"h") usage ;; |
| | | "d") DEBUG=1 ;; |
| | | "l") LICENSE="*.$OPTARG" ;; |
| | | esac |
| | | done |
| | | shift $((OPTIND - 1)) |
| | |
| | | |
| | | F="$LICENSE_FILE" |
| | | |
| | | if grep -A 1 "Apache License" "$F" | grep -q "Version 2\.0, January 2004" ; then |
| | | D="Apache-2.0" |
| | | [[ -n "$L" ]] && L="$L OR " ; L="$L$D" |
| | | fi |
| | | |
| | | if grep -q -i "Artistic License" "$F" ; then |
| | | if ! grep -q -i "Artistic License.*2" "$F" ; then |
| | | D="Artistic-1.0-TODO" |
| | | D= |
| | | grep -q "7\. C subroutines" "$F" && grep -q "10\. THIS PACKAGE IS PROVIDED" "$F" && D="Artistic-1.0-Perl" |
| | | grep -q "7\. C or perl subroutines" "$F" && grep -q "10\. THIS PACKAGE IS PROVIDED" "$F" && D="Artistic-1.0-cl8" |
| | | grep -q "7\. C or perl subroutines" "$F" && grep -q "9\. THIS PACKAGE IS PROVIDED" "$F" && D="Artistic-1.0" |
| | | else |
| | | D="Artistic-2.0" |
| | | fi |
| | | [[ -n "$L" ]] && L="$L OR " ; L="$L$D" |
| | | [[ -n "$L" && -n "$D" ]] && L="$L OR " ; L="$L$D" |
| | | fi |
| | | |
| | | if grep -A 1 "GNU GENERAL PUBLIC LICENSE" "$F" | grep -q "Version 1, February 1989" ; then |
| | |
| | | [[ -n "$L" ]] && L="$L OR " ; L="$L$D" |
| | | fi |
| | | |
| | | if grep -i -A 1 "GENERAL PUBLIC LICENSE" "$F" | grep -q "Version 2, June 1991" ; then |
| | | D="GPL-2.0-only" |
| | | grep -A 2 "GNU General Public License as published by the" "$F" | grep -q "or (at your option) any" && D="GPL-2.0-or-later" |
| | | [[ -n "$L" ]] && L="$L OR " ; L="$L$D" |
| | | fi |
| | | |
| | | if grep -A 1 "GNU LIBRARY GENERAL PUBLIC LICENSE" "$F" | grep -q "Version 2, June 1991" ; then |
| | | D="LGPL-2.0-only" |
| | | [[ -n "$L" ]] && L="$L OR " ; L="$L$D" |
| | | fi |
| | | |
| | | TMPFILE=$(mktemp -q) |
| | | [[ -z "$TMPFILE" ]] && printf "ERROR: Temporary file creation failed\n" >&2 && exit 1 |
| | | |
| | | for l in "$WS_TOOLS"/licenses/* ; do |
| | | typeset -A matched |
| | | for l in "$WS_TOOLS"/licenses/$LICENSE ; do |
| | | [[ -f "$l" ]] || continue |
| | | # skip filters |
| | | [[ "$l" != "${l%.filter}" ]] && continue |
| | | |
| | | # extract license identifier |
| | | license_id="${l##*/}" |
| | | license_id="${license_id#header.}" |
| | | license_id="${license_id#license.}" |
| | | # sanity check, this should never happen |
| | | [[ -z "$license_id" ]] && continue |
| | | |
| | | # make sure we do not match one license twice |
| | | [[ -n "$matched[$license_id]" ]] && continue |
| | | |
| | | cat <<#EOF > "$TMPFILE" |
| | | dos2unix -ascii \\ |
| | | | tr -d '\\014' \\ |
| | | | LC_ALL=C sed -E -e 's/^[[:space:]]+\$//g' \\ |
| | | | awk '/^#/{next}/^\$/{\$0="\n"}1' ORS=' ' \\ |
| | | | sed -E -e 's/[[:space:]]+/ /g' -e 's/^ //' -e 's/ \$//' -e '/^\$/d' \\ |
| | | | LC_ALL=C sed -E -e 's/[[:space:]]+/ /g' -e 's/^ //' -e 's/ \$//' -e '/^\$/d' \\ |
| | | EOF |
| | | # Remove some reStructuredText markup |
| | | if [[ "${F%.rst}" != "$F" ]] ; then |
| | | cat <<#EOF >> "$TMPFILE" |
| | | | sed -e '/^\*\*\$/d' -e 's/^\*\*\([^*]\)/\1/' -e 's/\([^*]\)\*\*\$/\1/' -e 's/\([^*]\)\*\*\([^*]\)/\1\2/g' \\ |
| | | EOF |
| | | fi |
| | | # Apply filter if any |
| | | [[ -x "$l.filter" ]] && printf "\t| %s \\\n" "$l.filter" >> "$TMPFILE" |
| | | [[ -x "$l.filter" ]] && printf '\t| LC_ALL=C %s \\\n' "$l.filter" >> "$TMPFILE" |
| | | cat <<#EOF >> "$TMPFILE" |
| | | | LC_ALL=C tr '[:upper:]' '[:lower:]' \\ |
| | | | sed -e 's|http://|https://|g' \ |
| | | | tr ' ' '\\n' | fmt |
| | | EOF |
| | | |
| | |
| | | |
| | | diff -i <(. "$TMPFILE" < "$l") <(. "$TMPFILE" < "$F") > "$REDIRECT" || continue |
| | | |
| | | matched[$license_id]="$l" |
| | | |
| | | [[ -n "$L" ]] && L="$L OR " |
| | | l="${l##*/}" |
| | | l="${l#header.}" |
| | | l="${l#license.}" |
| | | L="$L$l" |
| | | L="$L$license_id" |
| | | done |
| | | |
| | | rm -f "$TMPFILE" |