Re: [dev] lightweight build system

From: ochern <dexahex_AT_gmail.com>
Date: Sun, 23 Jul 2017 12:38:59 +0300

Thanks for the extended answer. mk looks very close to Make as I have
read from the manual. I like Make as it's simple but not in cases when
I try to build project consisting from multiple files and libraries
with the need to parametrize configuration, take into account
different compilers, hosts, targets and dependencies. I can't rely on
simple Makefile in this case. But I don't like autogenerated bullshit
from Autohell also. What is the reason to invent any new version of
Make-like tool when it's possible just to put your old Makefile in
Shell here-document and parametrize it using Shell full-grain
programming language. Here is an example of 'mkmf' script that
generates final Makefile:

# --------------------------------

. $TOP/build.conf

case "$target_os" in
  gnulinux)
    SOURCES="$SOURCES linux.c"
    CFLAGS="-DENABLE_LINUX_FEATURES
    ;;
  *)
    SOURCES="$SOURCES unix.c"
    ;;
  esac

OBJECTS=`src2obj $SOURCES`
PROG=app

cat <<EOF >Makefile

$PROG: $OBJECTS
    $CC -o $PROG $OBJECTS

o.c.:
    $CC -c $CFLAGS \$< -o \$_AT_

EOF

# ----------------------------------

It's just a simple example. But it shows that we can put Makefile
inside Shell instead of Shell inside Makefile rules. It give full
control over the final Makefile using common programming in Shell
instead of using freaky GNU Make or else extentions that give very
little.
Shell is rather standardized and it's not hard to write rather
portable script. No I don't say about insane portability as Autoconf
tries to provide, though it doesn't work. Instead I think it's wise to
support rather modern environments and not care about different old
osf1-based systems. 99% of current OSes have Bash that is compatible
with POSIX SH. I made scripts that work fine on all linuxes, bsds,
macos, solaris, commercial unixes, cygwin, msys. Most problems I had
with Solaris sh.

According to your schema user must install 9base+rc to be able to
build a package, right? It's not simpler than just run './configure;
make'.

I'm not focusing on another build system but rather rethinking
standard usage of Make by substituting it with 'mkmf' shell scripts
that wrap Makefile into Shell. This is the core. Every Makefile can be
substituted by 'mkmf'. mkmf generates Makefile and runs all other mkmf
scripts in subdirs. So by running a toplevel mkmf we generate a
hierarchy of makefiles. Additionally we can add toplevel 'configure'
to provide simple configuration by command-line parameters like
-prefix, -enable-xxx etc. configure runs and generates toplevel
build.conf and than runs toplevel mkmf that call all other mkmf
scripts recursively. Thus we have a simple and flexible build system.

I'd like to read about rc and 9base. Could you give some reference?

Alex


On Sun, Jul 23, 2017 at 11:36 AM, Anselm R Garbe <garbeam_AT_gmail.com> wrote:
> Hi Alex,
>
> On 23 July 2017 at 09:47, ochern <dexahex_AT_gmail.com> wrote:
>> I'm new here and I want to ask if somebody is interested in discussing
>> a development of lightweight build system based on simple Shell and
>> Make. It would be great to hear the opinions from the community and
>> may be there would rise a common welth and opportunity to develop
>> suckless build system :)
>
> Imho an almost suckless build system already exists: mk[0]+9base.
>
> "Almost" derives from the fact, that 9base or p9p in conjunction with
> the popular rc shell is kind of an alien citizen in a regular
> Linux/BSD environment, and thus probably not the easiest choice for
> gaining straight adoption. Nevertheless, if you dig deeper into all
> the problems of GNU vs BSD vs Shitwaris etc. userlands, you will
> notice that it becomes a hard task to find a suitable subset in
> Makefiles + shell commands that will work almost painfree on most
> platforms. sbase+ubase doesn't ease the solution, as they don't nicely
> co-exist with GNU or BSD userlands.
>
> In such situations, relying on mk+9base is an excellent choice, as the
> limitations of mk, rc and its native userland are well understood --
> and still mk+9base are a lot(!) smaller in code size than bash for
> instance.
>
> For stali development I considered switching to mk, but concluded it
> isn't worth the effort as stali can only be built in a Linux
> environment anyways.
>
> To conclude, mk and our just-Makefile based build systems aren't
> perfect, but they are extremely suckless in comparison to generated
> GNUmakefiles and GNU authell.
>
> Instead on focussing on yet another build system, I would rather
> suggest to focus on a better mail archiver or to work on a nice
> bugtracker, that fits well into the mlmmj world of things.
>
> [0] http://doc.cat-v.org/bell_labs/mk/mk.pdf
>
> Best regards,
> Anselm
>
Received on Sun Jul 23 2017 - 11:38:59 CEST

This archive was generated by hypermail 2.3.0 : Sun Jul 23 2017 - 11:48:44 CEST