Skip to content
Snippets Groups Projects
Select Git revision
  • master default protected
1 result

sbase

  • Clone with SSH
  • Clone with HTTPS
  • Evan Gates's avatar
    Evan Gates authored
    Specify dependencies correctly to allow parallel builds with -j.
    Previously the makefiles relied upon sequential execution in order to
    ensure prerequisites were built first. The new dependencies are done
    on a per package level and a per directory level. For example parts of
    the parted package depend on parts of the e2fsprogs package.  Instead of
    listing the exact dependencies and recipes in the parted makefile, list
    e2fsprog as a prerequisite for parted in the bin/stali.mk. While this
    isn't as exact, and means that you can't build parted directly from its
    directory, it sucks much less to implement and puts dependencies in a
    more central location and makes them easier to read and add to.
    
    Using guard files to protect against redundant recipe execution.
    In some instances more than one target is built by a single execution of
    a recipe. For example, the awk package uses yacc to create both ytab.h
    and ytab.c from awkgram.y. However when doing a parallel build the recipe
    would be executed twice in parallel, once to create ytab.h and once to
    create ytab.c. In order to avoid this an intermediate rule is used. The
    rule could be PHONY, but then it would run every time instead of only
    when the grammar is updated. Instead the intermediate rule, called _ytab,
    touches a file called _ytab so we have a modification time to compare
    against. I used the convention of guard files begining with an underscore.
    02a255c1
    History
    Name Last commit Last update
    ..
    libutf
    libutil
    .origin
    LICENSE
    Makefile
    README
    TODO
    arg.h
    basename.1
    basename.c
    cal.1
    cal.c
    cat.1
    cat.c
    chgrp.1
    chgrp.c
    chmod.1
    chmod.c
    chown.1
    chown.c
    chroot.1
    chroot.c
    cksum.1
    cksum.c
    cmp.1
    cmp.c
    cols.1
    cols.c
    comm.1
    comm.c
    compat.h
    config.mk
    cp.1
    cp.c
    cron.1
    cron.c
    crypt.h
    cut.1
    cut.c
    date.1
    date.c
    dirname.1
    dirname.c
    du.1
    du.c
    echo.1
    echo.c
    ed.1
    ed.c
    env.1
    env.c
    expand.1
    expand.c
    expr.1
    expr.c
    false.1
    false.c
    find.1
    find.c
    flock.1
    flock.c
    fold.1
    fold.c
    fs.h
    getconf.1
    getconf.c
    getconf.sh
    grep.1
    grep.c
    head.1
    head.c
    hostname.1
    hostname.c
    join.1
    join.c
    kill.1
    kill.c
    link.1
    link.c
    ln.1
    ln.c
    logger.1
    logger.c
    logname.1
    logname.c
    ls.1
    ls.c
    md5.h
    md5sum.1
    md5sum.c
    mkdir.1
    mkdir.c
    mkfifo.1
    mkfifo.c
    mktemp.1
    mktemp.c
    mv.1
    mv.c
    nice.1
    nice.c
    nl.1
    nl.c
    nohup.1
    nohup.c
    od.1
    od.c
    paste.1
    paste.c
    pathchk.1
    pathchk.c
    printenv.1
    printenv.c
    printf.1
    printf.c
    pwd.1
    pwd.c
    queue.h
    readlink.1
    readlink.c
    renice.1
    renice.c
    rm.1
    rm.c
    rmdir.1
    rmdir.c
    sed.1
    sed.c
    seq.1
    seq.c
    setsid.1
    setsid.c
    sha1.h
    sha1sum.1
    sha1sum.c
    sha224.h
    sha224sum.1
    sha224sum.c
    sha256.h
    sha256sum.1
    sha256sum.c
    sha384.h
    sha384sum.1
    sha384sum.c
    sha512-224.h
    sha512-224sum.1
    sha512-224sum.c
    sha512-256.h
    sha512-256sum.1
    sha512-256sum.c
    sha512.h
    sha512sum.1
    sha512sum.c
    sleep.1
    sleep.c
    sort.1
    sort.c
    split.1
    split.c
    sponge.1
    sponge.c
    stali.mk
    strings.1
    strings.c
    sync.1
    sync.c
    tail.1
    tail.c
    tar.1
    tar.c
    tee.1
    tee.c
    test.1
    test.c
    text.h
    tftp.1
    tftp.c
    time.1
    time.c
    touch.1
    touch.c
    tr.1
    tr.c
    true.1
    true.c
    tsort.1
    tsort.c
    tty.1
    tty.c
    uname.1
    uname.c
    unexpand.1
    unexpand.c
    uniq.1
    uniq.c
    unlink.1
    unlink.c
    utf.h
    util.h
    uudecode.1
    uudecode.c
    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:
    
    '#'  -> UTF-8 support, '=' -> Implicit UTF-8 support, '*' -> Finished,
    '|'  -> Audited,       'o' -> POSIX 2013 compliant,   'x' -> Non-POSIX,
    '0'  -> NUL handling,  '()' -> Petty flag
    
          UTILITY         MISSING
          -------         -------
    0=*|o basename        .
    0=*|o cal             .
    0=*|o cat             .
    0=*|o chgrp           .
    0=*|o chmod           .
    0=*|o chown           .
    0=*|x chroot          .
    0=*|o cksum           .
    0=*|o cmp             .
    0#*|x cols            .
    0=*|o comm            .
    0=*|o cp              (-i)
    0=*|x cron            .
    0#*|o cut             .
    0=*|o date            .
    0=*|o dirname         .
    0=*|o du              .
    0=*|o echo            .
        o ed              .
    0=*|o env             .
    0#*|o expand          .
    0#*|o expr            .
    0=*|o false           .
    0=    find            .
    0=* x flock           .
    0#*|o fold            .
    0=*|o getconf         (-v)
     =*|o grep            .
    0=*|o head            .
    0=*|x hostname        .
    0=*|x install         .
    0=* o join            .
    0=*|o kill            .
    0=*|o link            .
    0=*|o ln              .
    0=*|o logger          .
    0=*|o logname         .
    0#* o ls              (-C, -k, -m, -p, -s, -x)
    0=*|x md5sum          .
    0=*|o mkdir           .
    0=*|o mkfifo          .
    0=*|x mktemp          .
    0=*|o mv              (-i)
    0=*|o nice            .
    0#*|o nl              .
    0=*|o nohup           .
    0=*|o od              .
    0#* o pathchk         .
     #*|o paste           .
    0=*|x printenv        .
    0#*|o printf          .
    0=*|o pwd             .
    0=*|x readlink        .
    0=*|o renice          .
    0=*|o rm              (-i)
    0=*|o rmdir           .
     #    sed             .
    0=*|x seq             .
    0=*|x setsid          .
    0=*|x sha1sum         .
    0=* x sha224sum       .
    0=*|x sha256sum       .
    0=* x sha238sum       .
    0=*|x sha512sum       .
    0=* x sha512-224sum   .
    0=* x sha512-256sum   .
    0=*|o sleep           .
    0#*|o sort            .
    0=*|o split           .
    0=*|x sponge          .
    0#*|o strings         .
    0=*|x sync            .
    0=*|o tail            .
    0=*|x tar             .
    0=*|o tee             .
    0=*|o test            .
    0=*|x tftp            .
    0=*|o time            .
    0=*|o touch           .
    0#*|o tr              .
    0=*|o true            .
    0=* o tsort           .
    0=*|o tty             .
    0=*|o uname           .
    0#*|o unexpand        .
    0=*|o uniq            .
    0=*|o unlink          .
    0=*|o uudecode        .
    0=*|o uuencode        .
    0#*|o wc              .
    0=*|x which           .
    0=*|x whoami          .
    0=*|o xargs           (-p)
    0=*|x yes             .
    
    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 or run: make sbase-box-install
    
    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/