Closed Rixon-gh closed 4 years ago
i will start looking into what needs to be done now.
First off "/usr/share/common-licenses/ This exists in debian and it should also exist in termux.
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?
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!
Please report other packages that should have man pages but doesn't!
Here goes...
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.
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
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):
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
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 😜
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.
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
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.