and mark it as finished in the README.
This is another example showing how broken the GNU coreutils are:
$ echo -e "äää\tüüü\tööö" | gnu-expand -t "5,10,20"
äää üüü ööö
$ echo -e "äää\tüüü\tööö" | sbase-expand -t "5,10,20"
äää üüü ööö
This is due to the fact that they are still not UTF8-aware and
actually see "ä" as two single characters, expanding the "äää" with
4 spaces to a tab of length 10.
The correct way however is to expand the "äää" with 2 spaces to a
tab of length 5.
One can only imagine how this silently breaks a lot of code around
the world.
WHAT WERE THEY THINKING?
sbase - suckless unix tools
===========================
sbase is a collection of unix tools that are inherently portable
across UNIX and UNIX-like systems.
The following tools are implemented ('*' == finished, '#' == UTF-8 support,
'=' == implicit UTF-8 support):
UTILITY POSIX 2008 COMPLIANT MISSING OPTIONS
------- -------------------- ---------------
=* basename yes none
=* cal yes none
=* cat yes none
= chgrp no -h, -H, -L, -P
=* chmod yes none
= chown no -h, -H, -L, -P
= chroot non-posix none
=* cksum yes none
cmp yes none
cols non-posix none
=* comm yes none
= cp no -H, (-i), -L
=* cron non-posix none
#* cut yes none
=* date yes none
=* dirname yes none
= du no -H, -L, (-x)
=* echo yes none
=* env yes none
#* expand yes none
expr yes none
=* false yes none
fold yes none
grep yes none
head yes none
= hostname non-posix none
=* kill yes none
= link yes none
= ln yes none
=* logger yes none
= logname yes none
= ls no -C, -R, -q, -u
md5sum non-posix none
= mkdir yes none
= mkfifo yes none
= mktemp non-posix none
= mv yes (-i)
= nice yes none
= nl no -d, -f, -h, -l, -n, -p, -v, -w
= nohup yes none
paste yes none
= printenv non-posix none
printf stolen stolen
=* pwd yes none
= readlink non-posix none
= renice yes none
= rm yes (-i)
= rmdir no -p
= sleep yes none
= setsid non-posix none
sort no -m, -o, -d, -f, -i
split yes none
= sponge non-posix none
strings no -a, -n, -t
= sync non-posix none
= tail no -c, -f
= tar non-posix none
=* tee yes none
test yes none
= touch no -r
#* tr yes none
=* true yes none
= tty yes none
= uudecode no -o
= uuencode no -m
= uname yes none
# unexpand yes none
= uniq no -f, -s
= unlink yes none
seq non-posix none
= sha1sum non-posix none
= sha256sum non-posix none
= sha512sum non-posix none
wc yes none
= xargs no -I, -L, -p, -s, -t, -x
= yes yes none
The complement of sbase is ubase[1] which is Linux-specific and
provides all the non-portable tools. Together they are intended to
form a base system similar to busybox but much smaller and suckless.
Building
--------
To build sbase, simply type make. You may have to fiddle with
config.mk depending on your system.
You can also build sbase-box, which generates a single binary
containing all the required tools. You can then symlink the
individual tools to sbase-box.
Ideally you will want to statically link sbase. If you are on Linux
we recommend using musl-libc[2].
Portability
-----------
sbase has been compiled on a variety of different operating systems,
including Linux, *BSD, OSX, Haiku, Solaris, SCO OpenServer and others.
Various combinations of operating systems and architectures have also
been built.
You can build sbase with gcc, clang, tcc, nwcc and pcc.
[1] http://git.suckless.org/ubase/
[2] http://www.musl-libc.org/