termux / termux-packages

A package build system for Termux.
https://termux.dev
Other
13.01k stars 2.99k forks source link

Missing licenses (& manpages) #2901

Closed Rixon-gh closed 4 years ago

Rixon-gh commented 5 years ago

So first of all I noticed weechat had no license file included in the package. There was a passing comment at the end of the man page (which was also not included) suggesting it was GPLv3+ and to check the file named COPYING for full license text and more info. pkg files weechat reveals no such file, so I did a bit of looking around and found that every package I looked at was missing licensing info and manpages.

The licenses for each ${package} should be put in /usr/share/{common-licenses,doc/${package}/copyright} as per this dpkg proposal. In most cases, not supplying these goes against the terms of the license. My argument is not just that you have legal issues there, but for the fact that Termux is listed on F-Droid, and the listing may be revoked if you're distributing software that either isn't free or the licensing is unclear. At the very least you will end up with '(upstream) non-free (dependencies/assets)' AntiFeature tag(s) if the packages are reviewed.

After having spoken to a couple of you on Gitter/IRC via Matrix, it seems the general consensus from you was 'nobody cares anyway', unfortunately everybody who uses F-Droid cares; it's the very reason why they use it. Anyone who cares about free software cares that the licensing is present and correct, and I personally think stripping the licenses and manpages from the packages is not only against the redistribution terms of the developers and licensing but also the ideals of free software.

You suggested creating an issue here, so here it is. I hope, regardless of the general user reaction of this issue, that this makes you reconsider - your initial response was rather flippant, legally questionable and morally unsatisfactory. It's not just something I'm wishing to be a requirement for your package build process, but a legal requirement – a requirement that should be held with high moral regard if you have any care for the developers and the ideals of free software licensing in general.

its-pointless commented 5 years ago

i will start looking into what needs to be done now.

its-pointless commented 5 years ago

First off "/usr/share/common-licenses/ This exists in debian and it should also exist in termux.

fornwall commented 5 years ago

It would be interesting to look at how other distributions and packaging efforts (Arch, Alpine, Homebrew) handles this!

Arch (https://wiki.archlinux.org/index.php/PKGBUILD#license) seems to have a license package which contains common licenses under /usr/share/licenses/common/. A package using a common license can then point to a directory there, while a package with a non-common license should install its license in /usr/share/licenses/pkgname/.

Alpine (https://wiki.alpinelinux.org/wiki/Creating_an_Alpine_package#license) seems similar using a license tag, and then:

If the license is on the SPDX License List or SPDX License Exceptions, use the identifier specified by SPDX.

If a package has a special/custom license or is not listed as OSI approved we need to provide it with the release. Because we want to save space and don't like to have licenses all over our system we have decided to include the license in the doc subpackage. Please follow the following guidelines to add a proper license. Locate the license file inside the source package. Add the doc subpackage to the $subpackages variable as follows: [...]

Homebrew: Seems to include special files such as LICENSE and COPYING automatically, and warn if not? Using something automatic by default seems nice to cut down on the administrative overhead. Anyone have a link with description how this is handled in homebrew?

fornwall commented 5 years ago

About missing man pages: This has been fixed in version 2.2-1 of weechat (the build environment did not have asciidoctor installed, so man pages were not generated). Please report other packages that should have man pages but doesn't!

Rixon-gh commented 5 years ago

Please report other packages that should have man pages but doesn't!

Here goes...

Documentation

I've probably made a stupid assumption here (has bins & no mans/infos/docs = missing) so let me know if there's a better way to guess if a package should have potentially missing documentation.

Code

Time to enjoy my horribly formatted bash! touch pkgtest.sh && chmod u+x pkgtest.sh && nano pkgtest.sh

while getopts 'vh' opt; do
  case $opt in
    v)
      verbose=true; shift $((OPTIND - 1)) ;;
    h|?)
      echo "Usage: $0 [-v] [pkgname[ pkgname…]]"
      echo "OPTIONS:"
      echo "    -v  verbose (file greps, pkg checks)"
      exit 1 ;;
  esac
done

has_bins_and_no_docs()
{
    pkg="$1"
  files="$2"

  bins=$(egrep -o '/usr/s?bin/.+'        <<<"$files")\
      && [ "$verbose" = true ] && printf '%s BINS:\n%s\n' "$pkg" "$bins"
  mans=$(egrep -o '/usr/share/man/.+'    <<<"$files")\
      && [ "$verbose" = true ] && printf '%s MANS:\n%s\n' "$pkg" "$mans"
  info=$(egrep -o '/usr/share/info/.+'   <<<"$files")\
      && [ "$verbose" = true ] && printf '%s INFO:\n%s\n' "$pkg" "$info"
  docs=$(egrep -o '/usr/share/doc/.+/.+' <<<"$files"\
        |egrep -iv 'license|copy(ing|right)')\
      && [ "$verbose" = true ] && printf '%s DOCS:\n%s\n' "$pkg" "$docs"
        # insensitive inverse match on non-documentative license files

  # test assertion:
  [ -n "$bins" ] && # bins is non-zero length &&
  [[ -z "$mans"     # [[ mans is zero length
  && -z "$info"     # && info is zero length
  && -z "$docs" ]]  # && docs is zero length ]]
  # implicit 'return "$?"' on chained test ([ ] && [[ ]])
}

has_no_license_doc()
{
     pkg="$1"
  pkgesc="${pkg//+/\\+}" # escaping pkg names with + in them for egrep
   files="$2"

  common=$(egrep -o '/usr/share/(common-licenses|licenses/common)/.+' \
           <<< "$files") \
        && [ "$verbose" = true ] && printf '%s LICC:\n%s\n' "$pkg" "$common"

  # was using …/$pkgesc/.+ but saw taskwarrior uses /task/ so for now
  # I'm using …/.+/.+ -v licenses/common, looks like the answer might be
  # for name in "$bins"; do namesc=${name//+/\\+}; egrep …/$namesc/.+; done
  specif=$(egrep -o "/usr/share/licenses/.+/.+" \
           <<< "$files" | grep -v 'licenses/common') \
        && [ "$verbose" = true ] && printf '%s LICS:\n%s\n' "$pkg" "$specif"

  doclic=$(egrep -io "/usr/share/doc/.+/(license|copy(ing|right)).*" \
           <<< "$files") \
        && [ "$verbose" = true ] && printf '%s LICD:\n%s\n' "$pkg" "$doclic"

  [[ -z "$common" && -z "$specif" && -z "$doclic" ]]
}

installed_pkgs=$(
  pkg list-installed 2> /dev/null ` # hide apt script caution stderr ` \
  | tail -n +2                    ` # skip "\nListing...\n"          ` \
  | cut -d / -f 1                   # get name
)

if [ $# -gt 0 ]  # if args:
  then list="$@" # take 'em; else list-all as above
  else list=$(pkg list-all 2>/dev/null|tail -n+2|cut -d/ -f1)
fi

header="lic|doc|pkg name
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾"
echo "$header"
for pkg in $list                    # loop names into $pkg
do failed=false
  if installed=$(grep "^$pkg\$" <<< "$installed_pkgs")
  then files=$(pkg files "$pkg")
       has_no_license_doc "$pkg" "$files"   && lic='✗'
       has_bins_and_no_docs "$pkg" "$files" && doc='✗'
  else # not installed
    if apt-get download "$pkg" > /dev/null 2>&1    # quiet
    then if files=$(dpkg -c $pkg*.deb | cut -d '.' -f 2- | tail -n +2)
         then has_no_license_doc "$pkg" "$files"   && lic='✗'
              has_bins_and_no_docs "$pkg" "$files" && doc='✗'
         else  # just being overcautious about the globbing
              echo "FAIL: dpkg -c $pkg*.deb" >&2
              ((d_fails++)) && failed=true
         fi

         if ! rm $pkg*.deb       # more globbing caution
         then echo "FAIL: rm $pkg*.deb" >&2
              ((g_fails++)) && failed=true
         fi
    else
      echo "FAIL: apt-get download \"$pkg\"" >&2
      ((a_fails++)) && failed=true
    fi
  fi

  if [ "$failed" = false ]
  then if [[ $lic == '✗' || $doc == '✗' ]]
       then echo "[${lic- }]|[${doc- }]|$pkg" | tee -a pkgtest-bad
       else echo "$pkg" >> pkgtest-good
       fi
  fi
  unset lic doc failed
done

if fails=$((d_fails + g_fails + a_fails)) && [ $fails -gt 0 ]
  then echo "Done: $fails fails" \
            "(${d_fails-0}dpkg ${g_fails-0}rmglob ${a_fails-0}apt)" >&2
  exit 1
else
  if [ -e pkgtest-bad ]
  then echo "$header" > pkgtest-bad-SORTed
       sort pkgtest-bad >> pkgtest-bad-SORTed
  else echo "Output fail: no pkgtest-bad to sort!" >&2
       exit 1
  fi
  echo "Done: success"
fi

Output

pkgtest-good:

mpc
ncmpcpp
privoxy
taskwarrior

just these 4 with (bins & docs) & (license files), is my logic screwed? edit: yea probably, has_bins_and_no_docs() might be losing a few in the short circuit of no bins? I'll have another go at it later in the week.

for now, this returned the following sort (note no full cross over to license not missing & docs missing):

pkgtest-bad-SORTed:

lic|doc|pkg name
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
[✗]|[ ]|abduco
[✗]|[ ]|abook
[✗]|[ ]|alpine
[✗]|[ ]|apache2
[✗]|[ ]|apache2-dev
[✗]|[ ]|apksigner
[✗]|[ ]|apr
[✗]|[ ]|apr-util
[✗]|[ ]|apt-transport-tor
[✗]|[ ]|argp
[✗]|[ ]|aria2
[✗]|[ ]|attr
[✗]|[ ]|attr-dev
[✗]|[ ]|autoconf
[✗]|[ ]|automake
[✗]|[ ]|autossh
[✗]|[ ]|axel
[✗]|[ ]|babl
[✗]|[ ]|babl-dev
[✗]|[ ]|bash
[✗]|[ ]|bash-completion
[✗]|[ ]|bash-dev
[✗]|[ ]|bc
[✗]|[ ]|binutils
[✗]|[ ]|binutils-dev
[✗]|[ ]|bison
[✗]|[ ]|blogc
[✗]|[ ]|bmon
[✗]|[ ]|boost
[✗]|[ ]|boost-dev
[✗]|[ ]|brotli
[✗]|[ ]|brotli-dev
[✗]|[ ]|bsdtar
[✗]|[ ]|busybox
[✗]|[ ]|bvi
[✗]|[ ]|byobu
[✗]|[ ]|bzip2
[✗]|[ ]|c-ares
[✗]|[ ]|c-ares-dev
[✗]|[ ]|c-toxcore
[✗]|[ ]|c-toxcore-dev
[✗]|[ ]|ca-certificates
[✗]|[ ]|ca-certificates-java
[✗]|[ ]|calcurse
[✗]|[ ]|cboard
[✗]|[ ]|ccache
[✗]|[ ]|ccrypt
[✗]|[ ]|clang
[✗]|[ ]|cmark
[✗]|[ ]|cmark-dev
[✗]|[ ]|cmatrix
[✗]|[ ]|cmus
[✗]|[ ]|colordiff
[✗]|[ ]|command-not-found
[✗]|[ ]|coreutils
[✗]|[ ]|corkscrew
[✗]|[ ]|cowsay
[✗]|[ ]|cpio
[✗]|[ ]|cppi
[✗]|[ ]|cscope
[✗]|[ ]|ctags
[✗]|[ ]|curl
[✗]|[ ]|curseofwar
[✗]|[ ]|cvs
[✗]|[ ]|daemonize
[✗]|[ ]|dash
[✗]|[ ]|datamash
[✗]|[ ]|dcraw
[✗]|[ ]|ddrescue
[✗]|[ ]|debianutils
[✗]|[ ]|debootstrap
[✗]|[ ]|dialog
[✗]|[ ]|diffutils
[✗]|[ ]|direvent
[✗]|[ ]|dirmngr
[✗]|[ ]|dnsutils
[✗]|[ ]|dnsutils-dev
[✗]|[ ]|dos2unix
[✗]|[ ]|doxygen
[✗]|[ ]|dpkg
[✗]|[ ]|dpkg-dev
[✗]|[ ]|dropbear
[✗]|[ ]|dvtm
[✗]|[ ]|ed
[✗]|[ ]|elinks
[✗]|[ ]|emacs
[✗]|[ ]|espeak-dev
[✗]|[ ]|expect
[✗]|[ ]|expect-dev
[✗]|[ ]|fakeroot
[✗]|[ ]|fd
[✗]|[ ]|fdupes
[✗]|[ ]|ffmpeg
[✗]|[ ]|ffmpeg-dev
[✗]|[ ]|fftw
[✗]|[ ]|fftw-dev
[✗]|[ ]|figlet
[✗]|[ ]|file
[✗]|[ ]|file-dev
[✗]|[ ]|finch
[✗]|[ ]|finch-dev
[✗]|[ ]|findutils
[✗]|[ ]|fish
[✗]|[ ]|flac
[✗]|[ ]|flex
[✗]|[ ]|fontconfig
[✗]|[ ]|fontconfig-dev
[✗]|[ ]|fortune
[✗]|[ ]|freetype
[✗]|[ ]|freetype-dev
[✗]|[ ]|fribidi-dev
[✗]|[ ]|frotz
[✗]|[ ]|fsmon
[✗]|[ ]|fwknop
[✗]|[ ]|fwknop-dev
[✗]|[ ]|fzf
[✗]|[ ]|gawk
[✗]|[ ]|gawk-dev
[✗]|[ ]|gcal
[✗]|[ ]|gdb
[✗]|[ ]|gdb-dev
[✗]|[ ]|gdbm
[✗]|[ ]|gdbm-dev
[✗]|[ ]|gdk-pixbuf
[✗]|[ ]|gdk-pixbuf-dev
[✗]|[ ]|gegl-dev
[✗]|[ ]|getconf
[✗]|[ ]|getmail
[✗]|[ ]|gettext
[✗]|[ ]|gettext-dev
[✗]|[ ]|ghostscript
[✗]|[ ]|gifsicle
[✗]|[ ]|git
[✗]|[ ]|glib
[✗]|[ ]|glib-bin
[✗]|[ ]|glib-dev
[✗]|[ ]|global
[✗]|[ ]|gmic
[✗]|[ ]|gnuchess
[✗]|[ ]|gnugo
[✗]|[ ]|gnuit
[✗]|[ ]|gnupg
[✗]|[ ]|gnuplot
[✗]|[ ]|gnushogi
[✗]|[ ]|gnutls
[✗]|[ ]|golang-doc
[✗]|[ ]|googletest
[✗]|[ ]|gperf
[✗]|[ ]|gpgv
[✗]|[ ]|graphicsmagick
[✗]|[ ]|graphicsmagick++
[✗]|[ ]|graphicsmagick++-dev
[✗]|[ ]|graphicsmagick-dev
[✗]|[ ]|graphviz
[✗]|[ ]|graphviz-dev
[✗]|[ ]|greed
[✗]|[ ]|grep
[✗]|[ ]|gsl
[✗]|[ ]|gsl-dev
[✗]|[ ]|gst-plugins-bad
[✗]|[ ]|gst-plugins-bad-dev
[✗]|[ ]|gst-plugins-base
[✗]|[ ]|gst-plugins-base-dev
[✗]|[ ]|gst-plugins-good
[✗]|[ ]|gst-plugins-ugly
[✗]|[ ]|gstreamer
[✗]|[ ]|gstreamer-dev
[✗]|[ ]|gzip
[✗]|[ ]|harfbuzz
[✗]|[ ]|harfbuzz-dev
[✗]|[ ]|harfbuzz-icu
[✗]|[ ]|hashdeep
[✗]|[ ]|hexcurse
[✗]|[ ]|heyu
[✗]|[ ]|hfsutils
[✗]|[ ]|htop
[✗]|[ ]|httping
[✗]|[ ]|hunspell
[✗]|[ ]|hunspell-dev
[✗]|[ ]|hunspell-en-us
[✗]|[ ]|hunspell-ru
[✗]|[ ]|hydra
[✗]|[ ]|iconv
[✗]|[ ]|icu-devtools
[✗]|[ ]|imagemagick
[✗]|[ ]|imagemagick-dev
[✗]|[ ]|indent
[✗]|[ ]|inetutils
[✗]|[ ]|inotify-tools
[✗]|[ ]|inotify-tools-dev
[✗]|[ ]|iperf3
[✗]|[ ]|iperf3-dev
[✗]|[ ]|ired
[✗]|[ ]|irssi
[✗]|[ ]|irssi-dev
[✗]|[ ]|isync
[✗]|[ ]|jhead
[✗]|[ ]|joe
[✗]|[ ]|jq
[✗]|[ ]|jq-dev
[✗]|[ ]|json-c
[✗]|[ ]|json-c-dev
[✗]|[ ]|json-glib
[✗]|[ ]|json-glib-dev
[✗]|[ ]|jsoncpp
[✗]|[ ]|jsoncpp-dev
[✗]|[ ]|jupp
[✗]|[ ]|kakoune
[✗]|[ ]|krb5
[✗]|[ ]|krb5-dev
[✗]|[ ]|ldns
[✗]|[ ]|ldns-dev
[✗]|[ ]|ledger
[✗]|[ ]|ledger-dev
[✗]|[ ]|leptonica-dev
[✗]|[ ]|less
[✗]|[ ]|leveldb
[✗]|[ ]|leveldb-dev
[✗]|[ ]|lftp
[✗]|[ ]|libandroid-glob
[✗]|[ ]|libandroid-glob-dev
[✗]|[ ]|libandroid-shmem
[✗]|[ ]|libandroid-shmem-dev
[✗]|[ ]|libandroid-support
[✗]|[ ]|libandroid-support-dev
[✗]|[ ]|libarchive
[✗]|[ ]|libarchive-dev
[✗]|[ ]|libassuan
[✗]|[ ]|libbz2
[✗]|[ ]|libbz2-dev
[✗]|[ ]|libc++
[✗]|[ ]|libcaca
[✗]|[ ]|libcaca-dev
[✗]|[ ]|libcairo-dev
[✗]|[ ]|libcairo-gobject
[✗]|[ ]|libclang
[✗]|[ ]|libclang-dev
[✗]|[ ]|libcln
[✗]|[ ]|libcln-dev
[✗]|[ ]|libconfig
[✗]|[ ]|libconfig-dev
[✗]|[ ]|libconfuse
[✗]|[ ]|libconfuse-dev
[✗]|[ ]|libcroco-dev
[✗]|[ ]|libcrypt
[✗]|[ ]|libcrypt-dev
[✗]|[ ]|libcue
[✗]|[ ]|libcue-dev
[✗]|[ ]|libcurl
[✗]|[ ]|libcurl-dev
[✗]|[ ]|libdb
[✗]|[ ]|libdb-dev
[✗]|[ ]|libedit
[✗]|[ ]|libedit-dev
[✗]|[ ]|libelf
[✗]|[ ]|libelf-dev
[✗]|[ ]|libev
[✗]|[ ]|libev-dev
[✗]|[ ]|libevent
[✗]|[ ]|libevent-dev
[✗]|[ ]|libexif
[✗]|[ ]|libexif-dev
[✗]|[ ]|libexpat
[✗]|[ ]|libexpat-dev
[✗]|[ ]|libffi
[✗]|[ ]|libffi-dev
[✗]|[ ]|libflac
[✗]|[ ]|libflac-dev
[✗]|[ ]|libgc
[✗]|[ ]|libgc-dev
[✗]|[ ]|libgcrypt
[✗]|[ ]|libgcrypt-dev
[✗]|[ ]|libgd-dev
[✗]|[ ]|libgit2
[✗]|[ ]|libgit2-dev
[✗]|[ ]|libgmime
[✗]|[ ]|libgmime-dev
[✗]|[ ]|libgmp
[✗]|[ ]|libgmp-dev
[✗]|[ ]|libgnutls
[✗]|[ ]|libgnutls-dev
[✗]|[ ]|libgpg-error
[✗]|[ ]|libgpg-error-dev
[✗]|[ ]|libgraphite
[✗]|[ ]|libgraphite-dev
[✗]|[ ]|libgrpc-dev
[✗]|[ ]|libgsasl
[✗]|[ ]|libgsasl-dev
[✗]|[ ]|libhdf5-dev
[✗]|[ ]|libical
[✗]|[ ]|libical-dev
[✗]|[ ]|libicu
[✗]|[ ]|libicu-dev
[✗]|[ ]|libid3tag
[✗]|[ ]|libid3tag-dev
[✗]|[ ]|libidn
[✗]|[ ]|libidn-dev
[✗]|[ ]|libidn2
[✗]|[ ]|libidn2-dev
[✗]|[ ]|libisl
[✗]|[ ]|libisl-dev
[✗]|[ ]|libjansson
[✗]|[ ]|libjansson-dev
[✗]|[ ]|libjasper
[✗]|[ ]|libjasper-dev
[✗]|[ ]|libjasper-utils
[✗]|[ ]|libjpeg-turbo
[✗]|[ ]|libjpeg-turbo-dev
[✗]|[ ]|libjpeg-turbo-progs
[✗]|[ ]|libksba
[✗]|[ ]|libllvm
[✗]|[ ]|libllvm-dev
[✗]|[ ]|libltdl
[✗]|[ ]|liblua
[✗]|[ ]|liblua-dev
[✗]|[ ]|liblz4
[✗]|[ ]|liblz4-dev
[✗]|[ ]|liblzma
[✗]|[ ]|liblzma-dev
[✗]|[ ]|liblzo
[✗]|[ ]|liblzo-dev
[✗]|[ ]|libmad
[✗]|[ ]|libmad-dev
[✗]|[ ]|libmesode
[✗]|[ ]|libmesode-dev
[✗]|[ ]|libmnl
[✗]|[ ]|libmnl-dev
[✗]|[ ]|libmosquitto
[✗]|[ ]|libmosquitto-dev
[✗]|[ ]|libmp3lame
[✗]|[ ]|libmp3lame-dev
[✗]|[ ]|libmp3splt
[✗]|[ ]|libmp3splt-dev
[✗]|[ ]|libmpc
[✗]|[ ]|libmpc-dev
[✗]|[ ]|libmpdclient
[✗]|[ ]|libmpdclient-dev
[✗]|[ ]|libmpfr
[✗]|[ ]|libmpfr-dev
[✗]|[ ]|libmsgpack
[✗]|[ ]|libmsgpack-dev
[✗]|[ ]|libnettle
[✗]|[ ]|libnettle-dev
[✗]|[ ]|libnghttp2
[✗]|[ ]|libnghttp2-dev
[✗]|[ ]|libnl
[✗]|[ ]|libnl-dev
[✗]|[ ]|libnpth-dev
[✗]|[ ]|libogg
[✗]|[ ]|libogg-dev
[✗]|[ ]|liboggz
[✗]|[ ]|liboggz-dev
[✗]|[ ]|libopus
[✗]|[ ]|libopus-dev
[✗]|[ ]|libopusenc
[✗]|[ ]|libopusenc-dev
[✗]|[ ]|libotr
[✗]|[ ]|libotr-dev
[✗]|[ ]|libpcap
[✗]|[ ]|libpcap-dev
[✗]|[ ]|libpipeline
[✗]|[ ]|libpipeline-dev
[✗]|[ ]|libpixman
[✗]|[ ]|libpixman-dev
[✗]|[ ]|libpng
[✗]|[ ]|libpng-dev
[✗]|[ ]|libpopt
[✗]|[ ]|libpopt-dev
[✗]|[ ]|libprotobuf
[✗]|[ ]|libprotobuf-dev
[✗]|[ ]|libpulseaudio
[✗]|[ ]|libpulseaudio-dev
[✗]|[ ]|libqrencode
[✗]|[ ]|libqrencode-dev
[✗]|[ ]|librsvg
[✗]|[ ]|librsvg-dev
[✗]|[ ]|librsync
[✗]|[ ]|librsync-dev
[✗]|[ ]|libsasl
[✗]|[ ]|libsasl-dev
[✗]|[ ]|libsndfile
[✗]|[ ]|libsndfile-dev
[✗]|[ ]|libsodium
[✗]|[ ]|libsodium-dev
[✗]|[ ]|libsoup
[✗]|[ ]|libsoup-dev
[✗]|[ ]|libsoxr
[✗]|[ ]|libsoxr-dev
[✗]|[ ]|libsqlite
[✗]|[ ]|libsqlite-dev
[✗]|[ ]|libssh
[✗]|[ ]|libssh-dev
[✗]|[ ]|libssh2
[✗]|[ ]|libssh2-dev
[✗]|[ ]|libtalloc
[✗]|[ ]|libtalloc-dev
[✗]|[ ]|libtermkey
[✗]|[ ]|libtermkey-dev
[✗]|[ ]|libtiff
[✗]|[ ]|libtiff-dev
[✗]|[ ]|libtiff-utils
[✗]|[ ]|libtool
[✗]|[ ]|libtsm
[✗]|[ ]|libtsm-dev
[✗]|[ ]|libunibilium
[✗]|[ ]|libunibilium-dev
[✗]|[ ]|libunistring
[✗]|[ ]|libunistring-dev
[✗]|[ ]|libunwind
[✗]|[ ]|libunwind-dev
[✗]|[ ]|libutil
[✗]|[ ]|libuuid
[✗]|[ ]|libuuid-dev
[✗]|[ ]|libuv
[✗]|[ ]|libuv-dev
[✗]|[ ]|libvorbis
[✗]|[ ]|libvorbis-dev
[✗]|[ ]|libvpx
[✗]|[ ]|libvpx-dev
[✗]|[ ]|libvterm
[✗]|[ ]|libvterm-dev
[✗]|[ ]|libwebp
[✗]|[ ]|libwebp-dev
[✗]|[ ]|libwebsockets
[✗]|[ ]|libwebsockets-dev
[✗]|[ ]|libx264
[✗]|[ ]|libx264-dev
[✗]|[ ]|libx265
[✗]|[ ]|libx265-dev
[✗]|[ ]|libxapian
[✗]|[ ]|libxapian-dev
[✗]|[ ]|libxml2
[✗]|[ ]|libxml2-dev
[✗]|[ ]|libxml2-utils
[✗]|[ ]|libxslt
[✗]|[ ]|libxslt-dev
[✗]|[ ]|libyaml
[✗]|[ ]|libyaml-dev
[✗]|[ ]|libzmq
[✗]|[ ]|libzmq-dev
[✗]|[ ]|libzopfli
[✗]|[ ]|libzopfli-dev
[✗]|[ ]|lighttpd
[✗]|[ ]|linux-man-pages
[✗]|[ ]|littlecms
[✗]|[ ]|littlecms-dev
[✗]|[ ]|littlecms-utils
[✗]|[ ]|lldb
[✗]|[ ]|lldb-dev
[✗]|[ ]|llvm
[✗]|[ ]|ltrace
[✗]|[ ]|lua
[✗]|[ ]|lynx
[✗]|[ ]|lz4
[✗]|[ ]|lzip
[✗]|[ ]|lzop
[✗]|[ ]|m4
[✗]|[ ]|macchanger
[✗]|[ ]|make
[✗]|[ ]|make-dev
[✗]|[ ]|man
[✗]|[ ]|mariadb
[✗]|[ ]|mariadb-dev
[✗]|[ ]|mathomatic
[✗]|[ ]|mbedtls
[✗]|[ ]|mbedtls-dev
[✗]|[ ]|mc
[✗]|[ ]|mdp
[✗]|[ ]|megatools
[✗]|[ ]|memcached
[✗]|[ ]|memcached-dev
[✗]|[ ]|mime-support
[✗]|[ ]|minicom
[✗]|[ ]|mlocate
[✗]|[ ]|moon-buggy
[✗]|[ ]|moria
[✗]|[ ]|mosh
[✗]|[ ]|mosquitto
[✗]|[ ]|mp3splt
[✗]|[ ]|mpd
[✗]|[ ]|mpv
[✗]|[ ]|msmtp
[✗]|[ ]|mtools
[✗]|[ ]|multitail
[✗]|[ ]|mutt
[✗]|[ ]|nano
[✗]|[ ]|ncdc
[✗]|[ ]|ncdu
[✗]|[ ]|ncurses
[✗]|[ ]|ncurses-dev
[✗]|[ ]|ncurses-ui-libs
[✗]|[ ]|ndk-multilib
[✗]|[ ]|ndk-stl
[✗]|[ ]|ndk-sysroot
[✗]|[ ]|ne
[✗]|[ ]|neofetch
[✗]|[ ]|neovim
[✗]|[ ]|net-tools
[✗]|[ ]|netcat
[✗]|[ ]|netpbm-dev
[✗]|[ ]|newsboat
[✗]|[ ]|nginx
[✗]|[ ]|nmap
[✗]|[ ]|nnn
[✗]|[ ]|nodejs
[✗]|[ ]|nodejs-dev
[✗]|[ ]|nodejs-lts
[✗]|[ ]|nodejs-lts-dev
[✗]|[ ]|notmuch
[✗]|[ ]|notmuch-dev
[✗]|[ ]|nyancat
[✗]|[ ]|oathtool
[✗]|[ ]|oathtool-dev
[✗]|[ ]|ocrad
[✗]|[ ]|ocrad-dev
[✗]|[ ]|openal-soft
[✗]|[ ]|openal-soft-dev
[✗]|[ ]|openjpeg
[✗]|[ ]|openjpeg-dev
[✗]|[ ]|openssh
[✗]|[ ]|openssl
[✗]|[ ]|openssl-dev
[✗]|[ ]|optipng
[✗]|[ ]|opus-tools
[✗]|[ ]|opusfile
[✗]|[ ]|opusfile-dev
[✗]|[ ]|p7zip
[✗]|[ ]|pango
[✗]|[ ]|pango-dev
[✗]|[ ]|par2
[✗]|[ ]|parallel
[✗]|[ ]|parted
[✗]|[ ]|parted-dev
[✗]|[ ]|pass
[✗]|[ ]|pass-otp
[✗]|[ ]|pastebinit
[✗]|[ ]|patch
[✗]|[ ]|patchelf
[✗]|[ ]|pcre
[✗]|[ ]|pcre-dev
[✗]|[ ]|pcre2
[✗]|[ ]|pcre2-dev
[✗]|[ ]|perl
[✗]|[ ]|php
[✗]|[ ]|php-apache
[✗]|[ ]|php-dev
[✗]|[ ]|php-fpm
[✗]|[ ]|php-pgsql
[✗]|[ ]|pick
[✗]|[ ]|picolisp
[✗]|[ ]|pkg-config
[✗]|[ ]|play-audio
[✗]|[ ]|pngquant
[✗]|[ ]|poppler
[✗]|[ ]|poppler-dev
[✗]|[ ]|postgresql
[✗]|[ ]|postgresql-dev
[✗]|[ ]|potrace
[✗]|[ ]|procps
[✗]|[ ]|procps-dev
[✗]|[ ]|profanity
[✗]|[ ]|profanity-dev
[✗]|[ ]|proot
[✗]|[ ]|psmisc
[✗]|[ ]|pulseaudio
[✗]|[ ]|pure-ftpd
[✗]|[ ]|pv
[✗]|[ ]|pwgen
[✗]|[ ]|python
[✗]|[ ]|python-dev
[✗]|[ ]|python2
[✗]|[ ]|python2-dev
[✗]|[ ]|qalc-dev
[✗]|[ ]|qpdf
[✗]|[ ]|qpdf-dev
[✗]|[ ]|radare2
[✗]|[ ]|radare2-dev
[✗]|[ ]|ragel
[✗]|[ ]|ranger
[✗]|[ ]|rclone
[✗]|[ ]|rcs
[✗]|[ ]|rdiff
[✗]|[ ]|readline
[✗]|[ ]|readline-dev
[✗]|[ ]|redir
[✗]|[ ]|remind
[✗]|[ ]|resolv-conf
[✗]|[ ]|rgbds
[✗]|[ ]|rhash
[✗]|[ ]|rhash-dev
[✗]|[ ]|ripgrep
[✗]|[ ]|rlwrap
[✗]|[ ]|root-repo
[✗]|[ ]|rsync
[✗]|[ ]|rtmpdump
[✗]|[ ]|rtmpdump-dev
[✗]|[ ]|ruby
[✗]|[ ]|ruby-dev
[✗]|[ ]|ruby-ri
[✗]|[ ]|screen
[✗]|[ ]|screenfetch
[✗]|[ ]|scrypt
[✗]|[ ]|sed
[✗]|[ ]|sensible-utils
[✗]|[ ]|serf
[✗]|[ ]|serf-dev
[✗]|[ ]|sharutils
[✗]|[ ]|silversearcher-ag
[✗]|[ ]|sl
[✗]|[ ]|socat
[✗]|[ ]|sox
[✗]|[ ]|sox-dev
[✗]|[ ]|sqlite
[✗]|[ ]|squid
[✗]|[ ]|sshpass
[✗]|[ ]|stag
[✗]|[ ]|stfl
[✗]|[ ]|stfl-dev
[✗]|[ ]|stow
[✗]|[ ]|strace
[✗]|[ ]|stunnel
[✗]|[ ]|subversion
[✗]|[ ]|subversion-dev
[✗]|[ ]|syncthing
[✗]|[ ]|tar
[✗]|[ ]|tasksh
[✗]|[ ]|tcl
[✗]|[ ]|tcl-dev
[✗]|[ ]|tcsh
[✗]|[ ]|teckit
[✗]|[ ]|teckit-dev
[✗]|[ ]|termux-exec
[✗]|[ ]|teseq
[✗]|[ ]|tesseract
[✗]|[ ]|tesseract-dev
[✗]|[ ]|texinfo
[✗]|[ ]|texlive
[✗]|[ ]|texlive-bin
[✗]|[ ]|texlive-bin-dev
[✗]|[ ]|tig
[✗]|[ ]|timewarrior
[✗]|[ ]|tinyproxy
[✗]|[ ]|tmate
[✗]|[ ]|tmux
[✗]|[ ]|toilet
[✗]|[ ]|tor
[✗]|[ ]|torsocks
[✗]|[ ]|toxic
[✗]|[ ]|tracepath
[✗]|[ ]|transmission
[✗]|[ ]|tree
[✗]|[ ]|tsocks
[✗]|[ ]|tty-clock
[✗]|[ ]|ttyd
[✗]|[ ]|ttyrec
[✗]|[ ]|units
[✗]|[ ]|unzip
[✗]|[ ]|utf8cpp
[✗]|[ ]|utf8proc
[✗]|[ ]|utf8proc-dev
[✗]|[ ]|utfdecode
[✗]|[ ]|util-linux
[✗]|[ ]|util-linux-dev
[✗]|[ ]|valac
[✗]|[ ]|valac-dev
[✗]|[ ]|valadoc
[✗]|[ ]|valgrind-dev
[✗]|[ ]|vcsh
[✗]|[ ]|vifm
[✗]|[ ]|vim
[✗]|[ ]|vim-python
[✗]|[ ]|vim-runtime
[✗]|[ ]|vorbis-tools
[✗]|[ ]|vttest
[✗]|[ ]|vtutils
[✗]|[ ]|w3m
[✗]|[ ]|wcalc
[✗]|[ ]|weechat
[✗]|[ ]|weechat-dev
[✗]|[ ]|weechat-lua-plugin
[✗]|[ ]|weechat-perl-plugin
[✗]|[ ]|weechat-python-plugin
[✗]|[ ]|weechat-ruby-plugin
[✗]|[ ]|wget
[✗]|[ ]|wireguard-tools
[✗]|[ ]|wol
[✗]|[ ]|x11-repo
[✗]|[ ]|xapian-tools
[✗]|[ ]|xmlsec
[✗]|[ ]|xmlsec-dev
[✗]|[ ]|xmlstarlet
[✗]|[ ]|xorriso
[✗]|[ ]|xsltproc
[✗]|[ ]|xvidcore
[✗]|[ ]|xvidcore-dev
[✗]|[ ]|xz-utils
[✗]|[ ]|yasm
[✗]|[ ]|yasm-dev
[✗]|[ ]|zbar
[✗]|[ ]|zbar-dev
[✗]|[ ]|zile
[✗]|[ ]|zip
[✗]|[ ]|zsh
[✗]|[ ]|zstd
[✗]|[ ]|zstd-dev
[✗]|[✗]|aapt
[✗]|[✗]|ack-grep
[✗]|[✗]|angband
[✗]|[✗]|apr-dev
[✗]|[✗]|apr-util-dev
[✗]|[✗]|apt
[✗]|[✗]|asciinema
[✗]|[✗]|atomicparsley
[✗]|[✗]|binutils-gold
[✗]|[✗]|brogue
[✗]|[✗]|bs1770gain
[✗]|[✗]|cava
[✗]|[✗]|cgdb
[✗]|[✗]|cmake
[✗]|[✗]|cmake-curses-gui
[✗]|[✗]|darkhttpd
[✗]|[✗]|db
[✗]|[✗]|dx
[✗]|[✗]|ecj
[✗]|[✗]|ecj4.6
[✗]|[✗]|erlang
[✗]|[✗]|espeak
[✗]|[✗]|fontconfig-utils
[✗]|[✗]|fossil
[✗]|[✗]|fribidi
[✗]|[✗]|frobtads
[✗]|[✗]|gbt
[✗]|[✗]|gegl
[✗]|[✗]|git-crypt
[✗]|[✗]|glulxe
[✗]|[✗]|golang
[✗]|[✗]|gpgme
[✗]|[✗]|gpgme-dev
[✗]|[✗]|gpsbabel
[✗]|[✗]|gtypist
[✗]|[✗]|harfbuzz-utils
[✗]|[✗]|hub
[✗]|[✗]|icecast
[✗]|[✗]|imgflo
[✗]|[✗]|ipcalc
[✗]|[✗]|ipfs
[✗]|[✗]|kbfs
[✗]|[✗]|keybase
[✗]|[✗]|kona
[✗]|[✗]|ldc
[✗]|[✗]|leptonica
[✗]|[✗]|libassuan-dev
[✗]|[✗]|libcairo
[✗]|[✗]|libcroco
[✗]|[✗]|libgd
[✗]|[✗]|libgrpc
[✗]|[✗]|libhdf5
[✗]|[✗]|libksba-dev
[✗]|[✗]|libnpth
[✗]|[✗]|lld
[✗]|[✗]|luarocks
[✗]|[✗]|micro
[✗]|[✗]|ncurses-utils
[✗]|[✗]|netpbm
[✗]|[✗]|nettle
[✗]|[✗]|ninja
[✗]|[✗]|nzbget
[✗]|[✗]|openjpeg-tools
[✗]|[✗]|openssl-tool
[✗]|[✗]|pathpicker
[✗]|[✗]|pforth
[✗]|[✗]|pinentry
[✗]|[✗]|protobuf
[✗]|[✗]|qalc
[✗]|[✗]|redis
[✗]|[✗]|termux-am
[✗]|[✗]|termux-api
[✗]|[✗]|termux-apt-repo
[✗]|[✗]|termux-create-package
[✗]|[✗]|termux-elf-cleaner
[✗]|[✗]|termux-tools
[✗]|[✗]|texlive-tlmgr
[✗]|[✗]|tintin++
[✗]|[✗]|tinyscheme
[✗]|[✗]|tsu
[✗]|[✗]|tty-solitaire
[✗]|[✗]|unrar
[✗]|[✗]|valgrind
[✗]|[✗]|x264
[✗]|[✗]|x265
[✗]|[✗]|yarn
[✗]|[✗]|zopfli

Notes

I see some of these are libs where the bins are probably not meant to be directly executed by the user and so documentation will be elsewhere, but should still have licensing info.

I realise this is probably not as helpful as I imagined it would be when I started writing it, but it's a start.

It's sometimes helpful to use -v pkgname[ pkgname2…] to test an individual package and see the matching but I haven't done anything about changing the hardcoded file outputs or even running the verbose stuff through tee to the outfile in that situation yet so you get the greps on the stdout but they don't go to pkgtest-* as of yet. Also appending without overwriting at the moment in the case of the unsorted output.

Let me know how unhelpful I've been 😜

Rixon-gh commented 5 years ago

One thing I did notice that I will look into further on the next iteration is that there are packages like linux-man-pages - they're likely to be a "no bins but has docs" situation getting lost in the short circuit.

Grimler91 commented 5 years ago

I've opened https://github.com/termux/termux-packages/pull/3730 to address this. All licenses that we are currently using are put in $PREFIX/share/LICENSES/ and packages then create a symlink from there to $PREFIX/share/$PKG/LICENSE