I've made a lot of changes to the makefiles to specify dependencies
correctly and allow parallel builds with make -j. Please be on the
lookout for bugs and please bring up any objections/criticism.

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 without building anything else, 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.
From 969482a848c1bd44284e80d1426a72c046f8d0f0 Mon Sep 17 00:00:00 2001
From: Evan Gates <evan.ga...@gmail.com>
Date: Wed, 7 Sep 2016 16:03:28 -0700
Subject: [PATCH] Lots of makefile changes

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.
---
 bin/abduco/stali.mk                |  5 ++--
 bin/curl/src/stali.mk              |  2 +-
 bin/curl/stali.mk                  |  2 ++
 bin/dvtm/stali.mk                  |  7 +++---
 bin/e2fsprogs/debugfs/stali.mk     | 15 +++++++++---
 bin/e2fsprogs/e2fsck/stali.mk      |  2 +-
 bin/e2fsprogs/intl/stali.mk        |  4 +--
 bin/e2fsprogs/lib/blkid/stali.mk   |  5 ++--
 bin/e2fsprogs/lib/e2p/stali.mk     |  1 -
 bin/e2fsprogs/lib/et/stali.mk      |  5 ++--
 bin/e2fsprogs/lib/ext2fs/stali.mk  | 10 +++++---
 bin/e2fsprogs/lib/ss/stali.mk      |  7 ++++--
 bin/e2fsprogs/lib/support/stali.mk |  8 +++---
 bin/e2fsprogs/lib/uuid/stali.mk    |  5 ++--
 bin/e2fsprogs/misc/stali.mk        |  2 +-
 bin/e2fsprogs/resize/stali.mk      |  3 +--
 bin/e2fsprogs/stali.mk             | 16 +++++++++---
 bin/e2fsprogs/util/stali.mk        | 33 ++++++++++++-------------
 bin/git/stali.mk                   |  9 ++++---
 bin/gzip/lib/stali.mk              |  8 +++---
 bin/gzip/stali.mk                  | 42 ++++++++------------------------
 bin/hbase/_install/stali.mk        |  2 --
 bin/hbase/awk/awkgram.y            |  1 +
 bin/hbase/awk/stali.mk             | 16 ++++++------
 bin/hbase/bc/stali.mk              | 13 ++++------
 bin/hbase/dc/stali.mk              |  2 --
 bin/hbase/diff/stali.mk            |  5 ++--
 bin/hbase/fmt/stali.mk             |  2 --
 bin/hbase/hd/stali.mk              |  2 --
 bin/hbase/lex/stali.mk             | 11 ++++-----
 bin/hbase/libcommon/stali.mk       | 11 +++++----
 bin/hbase/libuxre/stali.mk         |  2 --
 bin/hbase/patch/stali.mk           |  2 --
 bin/hbase/pgrep/stali.mk           |  3 ---
 bin/hbase/stali.mk                 | 11 ++++++---
 bin/hbase/stty/stali.mk            |  2 --
 bin/hbase/yacc/stali.mk            | 17 +++----------
 bin/iproute2/ip/stali.mk           |  2 +-
 bin/iproute2/stali.mk              |  2 ++
 bin/kbd/src/libkeymap/stali.mk     | 13 +++++++---
 bin/kbd/src/stali.mk               |  2 +-
 bin/kbd/stali.mk                   |  2 ++
 bin/libarchive/cpio/stali.mk       |  3 +--
 bin/libarchive/stali.mk            |  6 +++--
 bin/libarchive/tar/stali.mk        |  3 +--
 bin/parted/lib/stali.mk            |  8 +++---
 bin/parted/parted/stali.mk         |  3 +--
 bin/parted/stali.mk                |  2 ++
 bin/rc/stali.mk                    |  1 -
 bin/sbase/stali.mk                 |  7 ++++--
 bin/sinit/stali.mk                 |  4 +--
 bin/smdev/stali.mk                 |  3 +--
 bin/ssh/stali.mk                   | 12 +++++----
 bin/stali.mk                       |  2 ++
 bin/vis/stali.mk                   | 13 +++-------
 config.mk                          | 50 ++++++++++++++++++++------------------
 etc/stali.mk                       |  1 -
 lib/ncurses/ncurses/stali.mk       | 46 ++++++-----------------------------
 lib/stali.mk                       |  2 ++
 mk/bin.mk                          | 24 ++++++++++++------
 mk/dir.mk                          | 24 ++++--------------
 mk/etc.mk                          |  8 +++---
 mk/lib.mk                          | 18 ++++++++++----
 stali.mk                           |  4 +--
 64 files changed, 253 insertions(+), 305 deletions(-)

diff --git a/bin/abduco/stali.mk b/bin/abduco/stali.mk
index d7c28aa..075680f 100644
--- a/bin/abduco/stali.mk
+++ b/bin/abduco/stali.mk
@@ -7,11 +7,10 @@ CFLAGS += -std=c99 -pedantic -Wall -DVERSION=\"${VERSION}\" 
-DNDEBUG
 CPPFLAGS += -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700
 OBJS = abduco.o
 BIN = abduco
-CLEAN_FILES = config.h
+DEPS = config.h
+CLEAN_FILES = $(DEPS)
 
 include $(ROOT)/mk/bin.mk
 
-deps: config.h
-
 config.h:
        cp config.def.h config.h
diff --git a/bin/curl/src/stali.mk b/bin/curl/src/stali.mk
index 851035b..86a0e38 100644
--- a/bin/curl/src/stali.mk
+++ b/bin/curl/src/stali.mk
@@ -50,7 +50,7 @@ OBJS = tool_xattr.o\
 CLEAN_FILES =  tool_hugehelp.c
 CPPFLAGS += -DHAVE_CONFIG_H -DHAVE_FSETXATTR
 CFLAGS = -I../lib -I../include -I$(ROOT)/lib/zlib
-LDFLAGS += ../lib/libcurl.a $(ROOT)/lib/zlib/libz.a 
$(ROOT)/lib/libressl/ssl/libssl.a $(ROOT)/lib/libressl/crypto/libcrypto.a
+LIBS = ../lib/libcurl.a $(ROOT)/lib/zlib/libz.a 
$(ROOT)/lib/libressl/ssl/libssl.a $(ROOT)/lib/libressl/crypto/libcrypto.a
 
 include $(ROOT)/mk/bin.mk
 
diff --git a/bin/curl/stali.mk b/bin/curl/stali.mk
index 53bbfa2..25c4ddd 100644
--- a/bin/curl/stali.mk
+++ b/bin/curl/stali.mk
@@ -4,3 +4,5 @@ SUBDIRS = lib\
        src
 
 include $(ROOT)/mk/dir.mk
+
+src: lib
diff --git a/bin/dvtm/stali.mk b/bin/dvtm/stali.mk
index 8067fbb..c3302e6 100644
--- a/bin/dvtm/stali.mk
+++ b/bin/dvtm/stali.mk
@@ -7,12 +7,11 @@ CFLAGS += -I. -I$(ROOT)/lib/ncurses/include -std=c99 -Wall 
-DVERSION=\"${VERSION
 CPPFLAGS += -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700
 OBJS = dvtm.o vt.o
 BIN = dvtm
-LDFLAGS += $(ROOT)/lib/ncurses/libncurses.a
-CLEAN_FILES = config.h
+LIBS = $(ROOT)/lib/ncurses/libncurses.a
+DEPS = config.h
+CLEAN_FILES = $(DEPS)
 
 include $(ROOT)/mk/bin.mk
 
-deps: config.h
-
 config.h:
        cp config.def.h config.h
diff --git a/bin/e2fsprogs/debugfs/stali.mk b/bin/e2fsprogs/debugfs/stali.mk
index 7891d2f..6a373b1 100644
--- a/bin/e2fsprogs/debugfs/stali.mk
+++ b/bin/e2fsprogs/debugfs/stali.mk
@@ -7,10 +7,11 @@ OBJS= debug_cmds.o debugfs.o util.o ncheck.o icheck.o ls.o \
        lsdel.o dump.o set_fields.o logdump.o htree.o unused.o e2freefrag.o \
        filefrag.o extent_cmds.o extent_inode.o zap.o create_inode.o \
        quota.o xattrs.o journal.o revoke.o recovery.o do_journal.o
-CLEAN_FILES =  extent_cmds.c extent_cmds.h debug_cmds.c debug_cmds.h
+CLEAN_FILES =  extent_cmds.c extent_cmds.h debug_cmds.c debug_cmds.h 
_extent_cmds _debug_cmds
 CPPFLAGS = -DHAVE_CONFIG_H -DDEBUGFS
 CFLAGS = -I. -I../lib -I../intl -I../e2fsck
-LDFLAGS += ../lib/libsupport.a ../lib/libext2fs.a ../lib/libe2p.a 
../lib/libss.a -ldl ../lib/libcom_err.a ../lib/libblkid.a ../lib/libuuid.a 
../lib/libuuid.a
+LDFLAGS += -ldl
+LIBS = ../lib/libsupport.a ../lib/libext2fs.a ../lib/libe2p.a ../lib/libss.a 
../lib/libcom_err.a ../lib/libblkid.a ../lib/libuuid.a ../lib/libuuid.a
 
 include $(ROOT)/mk/bin.mk
 
@@ -26,8 +27,14 @@ revoke.o: ../e2fsck/revoke.c
 recovery.o: ../e2fsck/recovery.c
        @$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
 
-extent_cmds.c extent_cmds.h: extent_cmds.ct
+extent_cmds.c extent_cmds.h: _extent_cmds ;
+
+_extent_cmds: extent_cmds.ct
        @DIR=../lib/ss ../lib/ss/mk_cmds extent_cmds.ct
+       @touch $@
+
+debug_cmds.c debug_cmds.h: _debug_cmds ;
 
-debug_cmds.c debug_cmds.h: debug_cmds.ct
+_debug_cmds: debug_cmds.ct
        @DIR=../lib/ss ../lib/ss/mk_cmds debug_cmds.ct
+       @touch $@
diff --git a/bin/e2fsprogs/e2fsck/stali.mk b/bin/e2fsprogs/e2fsck/stali.mk
index 4730142..ebda0af 100644
--- a/bin/e2fsprogs/e2fsck/stali.mk
+++ b/bin/e2fsprogs/e2fsck/stali.mk
@@ -12,7 +12,7 @@ OBJS= unix.o e2fsck.o super.o pass1.o pass1b.o pass2.o \
 CLEAN_FILES = 
 CPPFLAGS = -DHAVE_CONFIG_H
 CFLAGS = -I../lib -I../intl
-LDFLAGS += ../lib/libsupport.a ../lib/libext2fs.a ../lib/libcom_err.a 
../lib/libblkid.a ../lib/libuuid.a ../lib/libuuid.a ../intl/libintl.a 
../lib/libe2p.a 
+LIBS = ../lib/libsupport.a ../lib/libext2fs.a ../lib/libcom_err.a 
../lib/libblkid.a ../lib/libuuid.a ../lib/libuuid.a ../intl/libintl.a 
../lib/libe2p.a 
 
 include $(ROOT)/mk/bin.mk
 
diff --git a/bin/e2fsprogs/intl/stali.mk b/bin/e2fsprogs/intl/stali.mk
index a7e1c8e..cf4b0f9 100644
--- a/bin/e2fsprogs/intl/stali.mk
+++ b/bin/e2fsprogs/intl/stali.mk
@@ -27,13 +27,13 @@ OBJS = \
   printf.o \
   osdep.o \
   intl-compat.o
-CLEAN_FILES = libgnuintl.h
+DEPS = libgnuintl.h
+CLEAN_FILES = $(DEPS)
 CPPFLAGS += -DLOCALE_ALIAS_PATH=\"$(PREFIX)share/locale\" 
-DLIBDIR=\"$(PREFIX)lib\" -DIN_LIBINTL -DENABLE_RELOCATABLE=1 -DIN_LIBRARY 
-DINSTALLDIR=\"$(PREFIX)lib\" -DNO_XMALLOC 
-Dset_relocation_prefix=libintl_set_relocation_prefix 
-Drelocate=libintl_relocate -DDEPENDS_ON_LIBICONV=1 -DHAVE_CONFIG_H
 CFLAGS += -I. -I.. -I../lib
 
 include $(ROOT)/mk/lib.mk
 
-deps: libgnuintl.h
 
 libgnuintl.h: libgnuintl.h.in
        @sed -e 's,@''HAVE_POSIX_PRINTF''@,1,g' \
diff --git a/bin/e2fsprogs/lib/blkid/stali.mk b/bin/e2fsprogs/lib/blkid/stali.mk
index 65ec59e..596def6 100644
--- a/bin/e2fsprogs/lib/blkid/stali.mk
+++ b/bin/e2fsprogs/lib/blkid/stali.mk
@@ -6,13 +6,12 @@ LIB = ../libblkid.a
 LIB_INST =
 OBJS= cache.o dev.o devname.o devno.o getsize.o llseek.o probe.o \
  read.o resolve.o save.o tag.o version.o 
-CLEAN_FILES = blkid.h blkid_types.h
+DEPS = blkid.h blkid_types.h
+CLEAN_FILES = $(DEPS)
 CFLAGS += -I../
 
 include $(ROOT)/mk/lib.mk
 
-deps: blkid.h blkid_types.h
-
 blkid.h: blkid.h.in
        @cp blkid.h.in blkid.h
 
diff --git a/bin/e2fsprogs/lib/e2p/stali.mk b/bin/e2fsprogs/lib/e2p/stali.mk
index 1cf3003..6649c84 100644
--- a/bin/e2fsprogs/lib/e2p/stali.mk
+++ b/bin/e2fsprogs/lib/e2p/stali.mk
@@ -12,4 +12,3 @@ CLEAN_FILES =
 CFLAGS += -I../
 
 include $(ROOT)/mk/lib.mk
-
diff --git a/bin/e2fsprogs/lib/et/stali.mk b/bin/e2fsprogs/lib/et/stali.mk
index a368cfa..76aa0aa 100644
--- a/bin/e2fsprogs/lib/et/stali.mk
+++ b/bin/e2fsprogs/lib/et/stali.mk
@@ -5,13 +5,12 @@ include $(ROOT)/config.mk
 LIB = ../libcom_err.a
 LIB_INST = 
 OBJS= error_message.o et_name.o init_et.o com_err.o com_right.o
-CLEAN_FILES = compile_et ../config.h ../dirpaths.h
+DEPS = ../dirpaths.h ../config.h compile_et
+CLEAN_FILES = $(DEPS)
 CFLAGS += -I../
 
 include $(ROOT)/mk/lib.mk
 
-deps: ../dirpaths.h ../config.h compile_et
-
 ../dirpaths.h:
        @cp ../dirpaths.h.stali ../dirpaths.h
 
diff --git a/bin/e2fsprogs/lib/ext2fs/stali.mk 
b/bin/e2fsprogs/lib/ext2fs/stali.mk
index ddc598b..bb92be4 100644
--- a/bin/e2fsprogs/lib/ext2fs/stali.mk
+++ b/bin/e2fsprogs/lib/ext2fs/stali.mk
@@ -85,19 +85,21 @@ OBJS= $(DEBUGFS_LIB_OBJS) $(RESIZE_LIB_OBJS) 
$(E2IMAGE_LIB_OBJS) \
        valid_blk.o \
        version.o \
        rbtree.o
-CLEAN_FILES = ext2_err.et ext2_types.h ext2_err.c ext2_err.h
+DEPS = ext2_err.et ext2_types.h crc32c_table.h ext2_err.c ext2_err.h
+CLEAN_FILES = ext2_err.et ext2_types.h ext2_err.c ext2_err.h _ext2_err
 CFLAGS = -I. -I../ -I../../intl -DHAVE_CONFIG_H
 CPPFLAGS =
 
 include $(ROOT)/mk/lib.mk
 
-deps: ext2_err.et ext2_types.h crc32c_table.h ext2_err.c ext2_err.h
-
 ext2_err.et: ext2_err.et.in
        @../../util/subst -f ../../util/subst.conf ext2_err.et.in ext2_err.et
 
 ext2_types.h: ext2_types.h.in
        @cp ext2_types.h.in ext2_types.h
 
-ext2_err.c ext2_err.h: ext2_err.et
+ext2_err.c ext2_err.h: _ext2_err ;
+
+_ext2_err: ext2_err.et
        @DIR=../et ../et/compile_et ext2_err.et
+       @touch $@
diff --git a/bin/e2fsprogs/lib/ss/stali.mk b/bin/e2fsprogs/lib/ss/stali.mk
index 025c539..0f4e414 100644
--- a/bin/e2fsprogs/lib/ss/stali.mk
+++ b/bin/e2fsprogs/lib/ss/stali.mk
@@ -10,13 +10,16 @@ OBJS=       ss_err.o \
        execute_cmd.o listen.o parse.o error.o prompt.o \
        request_tbl.o list_rqs.o pager.o requests.o \
        data.o get_readline.o
-CLEAN_FILES = ss_err.c ss_err.h std_rqs.c mk_cmds
+CLEAN_FILES = ss_err.c ss_err.h std_rqs.c mk_cmds _ss_err
 CFLAGS += -I../
 
 include $(ROOT)/mk/lib.mk
 
-ss_err.c ss_err.h: ss_err.et
+ss_err.c ss_err.h: _ss_err ;
+       
+_ss_err: ss_err.et
        @DIR=../et ../et/compile_et ss_err.et
+       @touch $@
 
 std_rqs.c: std_rqs.ct mk_cmds
        @DIR=. ./mk_cmds std_rqs.ct
diff --git a/bin/e2fsprogs/lib/support/stali.mk 
b/bin/e2fsprogs/lib/support/stali.mk
index 748572b..77c116b 100644
--- a/bin/e2fsprogs/lib/support/stali.mk
+++ b/bin/e2fsprogs/lib/support/stali.mk
@@ -13,12 +13,14 @@ OBJS=               mkquota.o \
                quotaio_v2.o \
                quotaio_tree.o \
                dict.o
-CLEAN_FILES = prof_err.c prof_err.h
+DEPS = prof_err.c prof_err.h
+CLEAN_FILES = $(DEPS) _prof_err
 CFLAGS += -I../
 
 include $(ROOT)/mk/lib.mk
 
-deps: prof_err.c prof_err.h
+prof_err.c prof_err.h: _prof_err ;
 
-prof_err.c prof_err.h: prof_err.et
+_prof_err: prof_err.et
        @DIR=../et ../et/compile_et prof_err.et
+       @touch $@
diff --git a/bin/e2fsprogs/lib/uuid/stali.mk b/bin/e2fsprogs/lib/uuid/stali.mk
index 8ea6a82..ef924d4 100644
--- a/bin/e2fsprogs/lib/uuid/stali.mk
+++ b/bin/e2fsprogs/lib/uuid/stali.mk
@@ -14,12 +14,11 @@ OBJS=               clear.o \
                unpack.o \
                unparse.o \
                uuid_time.o
-CLEAN_FILES = uuid.h 
+DEPS = uuid.h
+CLEAN_FILES = $(DEPS)
 CFLAGS += -I../
 
 include $(ROOT)/mk/lib.mk
 
-deps: uuid.h
-
 uuid.h: uuid.h.in
        @cp uuid.h.in uuid.h
diff --git a/bin/e2fsprogs/misc/stali.mk b/bin/e2fsprogs/misc/stali.mk
index 74c42e4..f00e88f 100644
--- a/bin/e2fsprogs/misc/stali.mk
+++ b/bin/e2fsprogs/misc/stali.mk
@@ -27,7 +27,7 @@ MAN8_INFILES = badblocks.8.in blkid.8.in dumpe2fs.8.in 
e2freefrag.8.in e2image.8
             e4defrag.8.in filefrag.8.in fsck.8.in logsave.8.in mke2fs.8.in 
mklost+found.8.in tune2fs.8.in uuidd.8.in
 MAN8_FILES = badblocks.8 blkid.8 dumpe2fs.8 e2freefrag.8 e2image.8 e2undo.8 
e4crypt.8\
             e4defrag.8 filefrag.8 fsck.8 logsave.8 mke2fs.8 mklost+found.8 
tune2fs.8 uuidd.8
-CLEAN_FILES = default_profile.c $(BINS)
+CLEAN_FILES = default_profile.c mke2fs.conf $(BINS)
 CPPFLAGS = -DHAVE_CONFIG_H
 CFLAGS = -I. -I../lib -I../intl 
 LDFLAGS += ../lib/libext2fs.a ../lib/libcom_err.a ../lib/libsupport.a 
../lib/libblkid.a ../lib/libuuid.a\
diff --git a/bin/e2fsprogs/resize/stali.mk b/bin/e2fsprogs/resize/stali.mk
index 7ec7b50..f4ab827 100644
--- a/bin/e2fsprogs/resize/stali.mk
+++ b/bin/e2fsprogs/resize/stali.mk
@@ -7,7 +7,6 @@ OBJS= extent.o resize2fs.o main.o online.o resource_track.o 
sim_progress.o
 CLEAN_FILES =  
 CPPFLAGS = -DHAVE_CONFIG_H
 CFLAGS = -I. -I../lib -I../intl
-LDFLAGS += ../lib/libe2p.a ../lib/libext2fs.a ../lib/libcom_err.a 
../intl/libintl.a
+LIBS = ../lib/libe2p.a ../lib/libext2fs.a ../lib/libcom_err.a ../intl/libintl.a
 
 include $(ROOT)/mk/bin.mk
-
diff --git a/bin/e2fsprogs/stali.mk b/bin/e2fsprogs/stali.mk
index 41fea7c..13f84e0 100644
--- a/bin/e2fsprogs/stali.mk
+++ b/bin/e2fsprogs/stali.mk
@@ -1,13 +1,15 @@
 ROOT=../..
 
-SUBDIRS = util\
-       lib/et\
+LIBDIRS = lib/et\
        lib/ss\
        lib/ext2fs\
        lib/e2p\
        lib/uuid\
        lib/blkid\
-       lib/support\
+       lib/support
+
+SUBDIRS = util\
+    $(LIBDIRS)\
        intl\
        e2fsck\
        debugfs\
@@ -15,3 +17,11 @@ SUBDIRS = util\
        resize
 
 include $(ROOT)/mk/dir.mk
+
+lib/et lib/ext2fs lib/ss misc: util
+
+debugfs e2fsck intl misc resize: $(LIBDIRS)
+
+# TODO: move dependencies into this file instead of
+#       making everything depend on lib/et
+lib/ss lib/ext2fs lib/e2p lib/uuid lib/blkid lib/support: lib/et
diff --git a/bin/e2fsprogs/util/stali.mk b/bin/e2fsprogs/util/stali.mk
index f023755..8817e1f 100644
--- a/bin/e2fsprogs/util/stali.mk
+++ b/bin/e2fsprogs/util/stali.mk
@@ -2,20 +2,21 @@ ROOT=../../..
 
 include $(ROOT)/config.mk
 
-CFLAGS = $(HOSTCFLAGS)
 BINS = subst symlinks
-CLEAN_FILES = *.o $(BINS) dirpaths.h
+OBJS = $(BINS:=.o)
+DEPS = dirpaths.h subst.conf
+CLEAN_FILES = $(DEPS) $(BINS)
 
-all: options deps $(BINS)
+all: options $(BINS)
+$(BINS): $(OBJS)
+$(OBJS): $(DEPS)
 
 options:
        @echo build options:
-       @echo "CFLAGS   = $(CFLAGS)"
-       @echo "CPPFLAGS = $(CPPFLAGS)"
-       @echo "LDFLAGS  = $(LDFLAGS)"
-       @echo "CC       = $(CC)"
-
-deps: dirpaths.h subst.conf
+       @echo "HOSTCFLAGS   = $(HOSTCFLAGS)"
+       @echo "HOSTCPPFLAGS = $(HOSTCPPFLAGS)"
+       @echo "HOSTLDFLAGS  = $(HOSTLDFLAGS)"
+       @echo "HOSTCC       = $(HOSTCC)"
 
 dirpaths.h:
        @echo "/* fake dirpaths.h for config.h */" > dirpaths.h
@@ -24,16 +25,12 @@ subst.conf:
        @cp subst.conf.stali subst.conf
 
 .c.o:
-       @echo CC $< 
-       @$(HOSTCC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
-
-subst: subst.o
-       @echo LD $@
-       @$(HOSTCC) -o $@ subst.o $(LDFLAGS)
+       @echo HOSTCC $< 
+       @$(HOSTCC) $(HOSTCFLAGS) $(HOSTCPPFLAGS) -c $< -o $@
 
-symlinks: symlinks.o
-       @echo LD $@
-       @$(HOSTCC) -o $@ symlinks.o $(LDFLAGS)
+.o:
+       @echo HOSTLD $<
+       @$(HOSTCC) -o $@ $< $(HOSTLDFLAGS) 
 
 install:
 
diff --git a/bin/git/stali.mk b/bin/git/stali.mk
index dbc797c..3f59b28 100644
--- a/bin/git/stali.mk
+++ b/bin/git/stali.mk
@@ -335,9 +335,12 @@ SCRIPTS_SH = git-bisect.sh\
        git-submodule.sh\
        git-web--browse.sh
 
+DEPS = $(SCRIPTS_SH) common-cmds.h
 CLEAN_FILES = common-cmds.h
 
-all: options deps $(BIN)
+all: options $(BIN)
+
+$(OBJS): $(DEPS)
 
 options:
        @echo $(BIN) build options:
@@ -350,8 +353,6 @@ options:
        @echo CC $< 
        @$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
 
-deps: $(SCRIPTS_SH) common-cmds.h
-
 common-cmds.h: generate-cmdlist.sh command-list.txt
 
 common-cmds.h: $(wildcard Documentation/git-*.txt)
@@ -425,4 +426,4 @@ uninstall:
        @cd $(DESTDIR)$(PREFIX)/bin && rm -f git-remote-https git-remote-ftp 
git-remote-ftps
        @rm -rf $(DESTDIR)$(PREFIX)/share/git-core
 
-.PHONY: deps options clean install uninstall
+.PHONY: options clean install uninstall
diff --git a/bin/gzip/lib/stali.mk b/bin/gzip/lib/stali.mk
index 3d9a5ed..780a829 100644
--- a/bin/gzip/lib/stali.mk
+++ b/bin/gzip/lib/stali.mk
@@ -63,7 +63,7 @@ OBJS = stripslash.o\
        fflush.o\
        fseek.o\
        xalloc-die.o
-GEN = alloca.h\
+DEPS = alloca.h\
        configmake.h\
        c++defs.h\
        arg-nonnull.h\
@@ -83,12 +83,10 @@ GEN = alloca.h\
        wchar.h\
        wctype.h
 
-CLEAN_FILES = $(GEN)
+CLEAN_FILES = $(DEPS)
 
 include $(ROOT)/mk/lib.mk
 
-deps: $(GEN)
-
-$(GEN):
+$(DEPS):
        @echo GEN $@
        @cp $@.stali $@
diff --git a/bin/gzip/stali.mk b/bin/gzip/stali.mk
index 3f2151b..2287d12 100644
--- a/bin/gzip/stali.mk
+++ b/bin/gzip/stali.mk
@@ -4,12 +4,10 @@ include $(ROOT)/config.mk
 
 CFLAGS += -I. -Ilib
 CPPFLAGS +=
-LIBGZIP = lib/libgzip.a
-LIB = $(LIBGZIP)
-
+LIB = lib/libgzip.a
 BIN = gzip
 # gunzip zcat zcmp zdiff zegrep zforce zgrep zless zmore znew
-OBJ = bits.o\
+OBJS = bits.o\
        deflate.o\
        gzip.o\
        inflate.o\
@@ -23,41 +21,21 @@ OBJ = bits.o\
        version.o\
        zip.o
 
-GZIP_OBJS = bits.o\
-       deflate.o\
-       gzip.o\
-       inflate.o\
-       lzw.o\
-       trees.o\
-       unlzh.o\
-       unlzw.o\
-       unpack.o\
-       unzip.o\
-       util.o\
-       zip.o\
-       version.o
+all: $(BIN)
 
-all: $(LIB) $(OBJ) $(BIN)
+$(OBJS): $(LIB)
 
-$(LIBGZIP):
-       @cd lib; $(MAKE) -f stali.mk;
+$(LIB):
+       @cd lib && $(MAKE) -f stali.mk
 
-gzip: $(LIB) $(OBJ)
+$(BIN): $(OBJS) $(LIB)
        @echo LD $@
-       @$(LD) $(LDFLAGS) -o $@ $(GZIP_OBJS) $(LIB) lib/libgzip.a
+       @$(LD) $(LDFLAGS) -o $@ $^
 
 .c.o:
        @echo CC $<
        @$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
 
-$(LIBCOMMON): $(LIBCOMMONOBJ)
-       @$(AR) rc $@ $?
-       @$(RANLIB) $@
-
-$(LIBFONT): $(LIBFONTOBJ)
-       @$(AR) rc $@ $?
-       @$(RANLIB) $@
-
 install: all
        @mkdir -p $(DESTDIR)$(PREFIX)/bin
        @cp -f $(BIN) $(DESTDIR)$(PREFIX)/bin
@@ -72,8 +50,8 @@ uninstall:
        @cd $(DESTDIR)$(MANPREFIX)/man1 && rm -f $(BIN).1
 
 clean:
-       rm -f $(BIN) $(OBJ) $(LIB)
-       @cd lib; $(MAKE) -f stali.mk clean;
+       rm -f $(BIN) $(OBJS) $(LIB)
+       @cd lib && $(MAKE) -f stali.mk clean;
 
 .PHONY:
        all install uninstall clean
diff --git a/bin/hbase/_install/stali.mk b/bin/hbase/_install/stali.mk
index 256e4ac..3647113 100644
--- a/bin/hbase/_install/stali.mk
+++ b/bin/hbase/_install/stali.mk
@@ -7,8 +7,6 @@ OBJS = install.o
 
 include $(ROOT)/mk/bin.mk
 
-deps:
-
 postinst:
        @mv $(DESTDIR)$(PREFIX)/bin/$(BIN) $(DESTDIR)$(PREFIX)/bin/install
        @mv $(DESTDIR)$(MANPREFIX)/man1/$(BIN).1 
$(DESTDIR)$(MANPREFIX)/man1/install.1
diff --git a/bin/hbase/awk/awkgram.y b/bin/hbase/awk/awkgram.y
index 4eb0310..053940d 100644
--- a/bin/hbase/awk/awkgram.y
+++ b/bin/hbase/awk/awkgram.y
@@ -27,6 +27,7 @@ THIS SOFTWARE.
 #include <stdio.h>
 #include <string.h>
 #include "awk.h"
+#include <unistd.h>
 
 void checkdup(Node *list, Cell *item);
 int yywrap(void) { return(1); }
diff --git a/bin/hbase/awk/stali.mk b/bin/hbase/awk/stali.mk
index 8eba108..930c15b 100644
--- a/bin/hbase/awk/stali.mk
+++ b/bin/hbase/awk/stali.mk
@@ -4,20 +4,20 @@ include $(ROOT)/config.mk
 
 BIN = awk
 OBJS = ytab.o lex.o b.o main.o parse.o proctab.o tran.o lib.o run.o
-CLEAN_FILES = ytab.c ytab.h proctab.c gen/maketab
+DEPS = ytab.h
+CLEAN_FILES = _ytab ytab.c ytab.h proctab.c gen/maketab
 LDFLAGS += -lm
 
 include $(ROOT)/mk/bin.mk
 
-deps: ytab.c proctab.c
+ytab.h ytab.c: _ytab ;
 
-ytab.c: ytab
-
-ytab: awkgram.y
-       @echo YACC -d awkgram.y
-       @$(YACC) -d awkgram.y
-       mv y.tab.c ytab.c
+_ytab: awkgram.y
+       @echo YACC -d $?
+       @$(YACC) -d $?
        mv y.tab.h ytab.h
+       mv y.tab.c ytab.c
+       touch $@
 
 proctab.c: gen/maketab
        @echo MAKETAB proctab.c
diff --git a/bin/hbase/bc/stali.mk b/bin/hbase/bc/stali.mk
index 1b78e3a..e6b71a5 100644
--- a/bin/hbase/bc/stali.mk
+++ b/bin/hbase/bc/stali.mk
@@ -2,20 +2,17 @@ ROOT=../../..
 
 include $(ROOT)/config.mk
 
-CFLAGS += -I../libcommon -I../libuxre -DUXRE -DDC=\"$(PREFIX)/bin/dc\" 
-DLIBB=\"$(PREFIX)/bin/bc-lib.b\"
-LDFLAGS += -L../libcommon -lcommon -L../libuxre -luxre
+CFLAGS += -DDC=\"$(PREFIX)/bin/dc\" -DLIBB=\"$(PREFIX)/bin/bc-lib.b\"
 BIN = bc
 OBJS = bc.o
-CLEAN_FILES = bc.c y.tab.c y.tab.h
+CLEAN_FILES = bc.c
 
 include $(ROOT)/mk/bin.mk
 
-deps:
-
 bc.c: bc.y
-       @echo YACC -d bc.y
-       @$(YACC) -d bc.y
-       @sed -f yyval.sed <y.tab.c >$@
+       @echo YACC bc.y
+       @$(YACC) bc.y
+       @sed -f yyval.sed y.tab.c >$@
        @rm y.tab.c
 
 postinst:
diff --git a/bin/hbase/dc/stali.mk b/bin/hbase/dc/stali.mk
index 349e380..b82889b 100644
--- a/bin/hbase/dc/stali.mk
+++ b/bin/hbase/dc/stali.mk
@@ -9,5 +9,3 @@ BIN = dc
 OBJS = dc.o
 
 include $(ROOT)/mk/bin.mk
-
-deps:
diff --git a/bin/hbase/diff/stali.mk b/bin/hbase/diff/stali.mk
index 36fdaca..a259604 100644
--- a/bin/hbase/diff/stali.mk
+++ b/bin/hbase/diff/stali.mk
@@ -6,13 +6,12 @@ CPPFLAGS += -DDIFFH=\"$(PREFIX)/bin/diffh\"
 CFLAGS += -I../libcommon
 LDFLAGS += -L../libcommon -lcommon
 BIN = diff
+DEPS = diffh
 OBJS = diff.o diffdir.o diffreg.o diffver.o
-CLEAN_FILES = diffh diff.o
+CLEAN_FILES = diffh diffh.o
 
 include $(ROOT)/mk/bin.mk
 
-deps: diffh
-
 diffh: diffh.o
        @echo LD $@
        @echo $(CC) -o $@ diffh.o $(LDFLAGS)
diff --git a/bin/hbase/fmt/stali.mk b/bin/hbase/fmt/stali.mk
index 658cf94..4eee250 100644
--- a/bin/hbase/fmt/stali.mk
+++ b/bin/hbase/fmt/stali.mk
@@ -8,5 +8,3 @@ BIN = fmt
 OBJS = fmt.o
 
 include $(ROOT)/mk/bin.mk
-
-deps:
diff --git a/bin/hbase/hd/stali.mk b/bin/hbase/hd/stali.mk
index 079130b..62df734 100644
--- a/bin/hbase/hd/stali.mk
+++ b/bin/hbase/hd/stali.mk
@@ -8,5 +8,3 @@ BIN = hd
 OBJS = hd.o
 
 include $(ROOT)/mk/bin.mk
-
-deps:
diff --git a/bin/hbase/lex/stali.mk b/bin/hbase/lex/stali.mk
index de91aef..d93ae56 100644
--- a/bin/hbase/lex/stali.mk
+++ b/bin/hbase/lex/stali.mk
@@ -7,23 +7,22 @@ LDFLAGS += -L. -llex
 BIN = lex
 OBJS = main.o sub1.o sub2.o sub3.o header.o wcio.o parser.o getopt.o lsearch.o
 LOBJS = allprint.o libmain.o reject.o yyless.o yywrap.o allprint_w.o 
reject_w.o yyless_w.o reject_e.o yyless_e.o
-CLEAN_FILES = parser.c $(LOBJS) liblex.a
+DEPS = liblex.a parser.c
+CLEAN_FILES = $(DEPS) $(LOBJS)
 WFLAGS = -DEUC -DJLSLEX -DWOPTION
 EFLAGS = -DEUC -DJLSLEX -DEOPTION
 
 include $(ROOT)/mk/bin.mk
 
-deps: liblex.a parser.c
-
 liblex.a: $(LOBJS)
        @echo AR $@
        @$(AR) cr $@ $(LOBJS)
        @$(RANLIB) $@
 
 parser.c: parser.y
-       @echo YACC -d $<
-       @$(YACC) -d $<
-       mv y.tab.c parser.c
+       @echo YACC $<
+       @$(YACC) $<
+       @mv y.tab.c parser.c
 
 %_w.o: %.c
        @echo CC $@
diff --git a/bin/hbase/libcommon/stali.mk b/bin/hbase/libcommon/stali.mk
index 2f70cb9..95ca8fe 100644
--- a/bin/hbase/libcommon/stali.mk
+++ b/bin/hbase/libcommon/stali.mk
@@ -8,15 +8,16 @@ OBJS = asciitype.o ib_alloc.o ib_close.o ib_free.o 
ib_getlin.o ib_getw.o \
        getdir.o regexpr.o gmatch.o utmpx.o memalign.o pathconf.o \
        sigset.o signal.o sigrelse.o sighold.o sigignore.o sigpause.o \
        getopt.o pfmt.o vpfmt.o setlabel.o setuxlabel.o pfmt_label.o sysv3.o
-CLEAN_FILES = alloca.h malloc.h utmpx.h
+HEADERS = alloca.h malloc.h utmpx.h
+DEPS = CHECK headers
+CLEAN_FILES = $(DEPS) $(HEADERS)
 
 include $(ROOT)/mk/lib.mk
 
-deps: headers
-
 CHECK: CHECK.c
        @echo CC CHECK
-       $(CC) $(CFLAGS) $(CPPFLAGS) -E CHECK.c >CHECK
+       @$(CC) $(CFLAGS) $(CPPFLAGS) -E CHECK.c >CHECK
 
 headers: CHECK
-       @for i in alloca malloc utmpx; do rm -f $$i.h; if grep "$1_h[    ]*=[   
]*[^0][  ]*;" CHECK >/dev/null; then ln -s "_$$i.h" "$$i.h"; fi; done
+       @for f in $(HEADERS); do if grep -q 
"$${f%.h}_h[[:space:]]*=[[:space:]]*[^0][[:space:]]*;" CHECK; then ln -s "_$$f" 
"$$f"; fi; done
+       @touch $@
diff --git a/bin/hbase/libuxre/stali.mk b/bin/hbase/libuxre/stali.mk
index f400675..533d3e3 100644
--- a/bin/hbase/libuxre/stali.mk
+++ b/bin/hbase/libuxre/stali.mk
@@ -8,8 +8,6 @@ CFLAGS += -I.
 
 include $(ROOT)/mk/lib.mk
 
-deps:
-
 _collelem.o: colldata.h re.h regex.h wcharm.h
 _collmult.o: colldata.h re.h regex.h wcharm.h
 bracket.o: colldata.h re.h regex.h wcharm.h
diff --git a/bin/hbase/patch/stali.mk b/bin/hbase/patch/stali.mk
index e01ca80..53eb3b9 100644
--- a/bin/hbase/patch/stali.mk
+++ b/bin/hbase/patch/stali.mk
@@ -8,5 +8,3 @@ BIN = patch
 OBJS = patch.o backupfile.o inp.o mkpath.o pch.o util.o
 
 include $(ROOT)/mk/bin.mk
-
-deps:
diff --git a/bin/hbase/pgrep/stali.mk b/bin/hbase/pgrep/stali.mk
index 30e8267..bd556cc 100644
--- a/bin/hbase/pgrep/stali.mk
+++ b/bin/hbase/pgrep/stali.mk
@@ -9,8 +9,6 @@ OBJS = pgrep.o
 
 include $(ROOT)/mk/bin.mk
 
-deps:
-
 postinst:
        @cd $(DESTDIR)$(PREFIX)/bin && ln -sf $(BIN) pkill
        @cd $(DESTDIR)$(MANPREFIX)/man1 && ln -sf $(BIN).1 pkill.1
@@ -18,4 +16,3 @@ postinst:
 postuninst:
        @rm -f $(DESTDIR)$(PREFIX)/bin/pkill
        @rm -f $(DESTDIR)$(MANPREFIX)/man1/pkill.1
-
diff --git a/bin/hbase/stali.mk b/bin/hbase/stali.mk
index 6223ac9..bec675c 100644
--- a/bin/hbase/stali.mk
+++ b/bin/hbase/stali.mk
@@ -1,8 +1,8 @@
 ROOT=../..
 
+# NOTE: was nothing using libuxre?
 SUBDIRS =\
        libcommon\
-       libuxre\
        yacc\
        _install\
        stty\
@@ -11,9 +11,12 @@ SUBDIRS =\
        hd\
        bc\
        pgrep\
+       diff\
        lex
-#patch\
-#diff\
-#dc\
 
 include $(ROOT)/mk/dir.mk
+
+awk bc lex: yacc
+
+dc diff fmt hd pgrep stty: libcommon
+
diff --git a/bin/hbase/stty/stali.mk b/bin/hbase/stty/stali.mk
index 4f8ac13..8d17d7a 100644
--- a/bin/hbase/stty/stali.mk
+++ b/bin/hbase/stty/stali.mk
@@ -9,5 +9,3 @@ BIN = stty
 OBJS = stty.o
 
 include $(ROOT)/mk/bin.mk
-
-deps:
diff --git a/bin/hbase/yacc/stali.mk b/bin/hbase/yacc/stali.mk
index c6c70ec..46beee9 100644
--- a/bin/hbase/yacc/stali.mk
+++ b/bin/hbase/yacc/stali.mk
@@ -7,7 +7,8 @@ LDFLAGS += -L. -ly
 BIN = yacc
 OBJS = y1.o y2.o y3.o y4.o y5.o getopt.o
 LOBJS = libmai.o libzer.o
-CLEAN_FILES = $(LOBJS) liby.a
+DEPS = liby.a /tmp/yaccpar
+CLEAN_FILES = $(LOBJS) $(DEPS)
 CC = $(HOSTCC)
 AR = $(HOSTAR)
 RANLIB = $(HOSTRANLIB)
@@ -15,24 +16,14 @@ CFLAGS = $(HOSTCFLAGS)
 
 include $(ROOT)/mk/bin.mk
 
-deps: liby.a tmpyaccpar
-
 liby.a: $(LOBJS)
        @echo AR $@
        @$(AR) cr $@ $(LOBJS)
        @$(RANLIB) $@
 
-tmpyaccpar:
+/tmp/yaccpar: yaccpar
        @echo copying yaccpar to /tmp
-       @cp -f yaccpar /tmp
-
-install:
-
-postinst:
-
-postuninst:
-
-uninstall:
+       @cp -f $^ $@
 
 y1.o: dextern
 y2.o: dextern sgs.h
diff --git a/bin/iproute2/ip/stali.mk b/bin/iproute2/ip/stali.mk
index da66942..24594c0 100644
--- a/bin/iproute2/ip/stali.mk
+++ b/bin/iproute2/ip/stali.mk
@@ -16,7 +16,7 @@ OBJS = ip.o ipaddress.o ipaddrlabel.o iproute.o iprule.o 
ipnetns.o \
 CLEAN_FILES =  
 CPPFLAGS += -D_GNU_SOURCE -DHAVE_SETNS -D_LINUX_IN6_H
 CFLAGS += -I../include
-LDFLAGS += ../lib/libiproute2.a
+LIBS = ../lib/libiproute2.a
 
 include $(ROOT)/mk/bin.mk
 
diff --git a/bin/iproute2/stali.mk b/bin/iproute2/stali.mk
index 5bd220f..f0f5b3f 100644
--- a/bin/iproute2/stali.mk
+++ b/bin/iproute2/stali.mk
@@ -4,3 +4,5 @@ SUBDIRS = lib\
        ip
 
 include $(ROOT)/mk/dir.mk
+
+ip: lib
diff --git a/bin/kbd/src/libkeymap/stali.mk b/bin/kbd/src/libkeymap/stali.mk
index a764b0c..ccb4eac 100644
--- a/bin/kbd/src/libkeymap/stali.mk
+++ b/bin/kbd/src/libkeymap/stali.mk
@@ -7,6 +7,7 @@ LOCALEDIR = $(DATADIR)/locale
 CFLAGS += -I. -I.. -g -O2 -Wall -Wextra -Wmissing-noreturn 
-Wdisabled-optimization -Wcast-align -Wshadow -Wmissing-format-attribute 
-Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations
 CPPFLAGS += -DDATADIR=\"$(DATADIR)\" -DLOCALEDIR=\"$(LOCALEDIR)\" 
-D_BSD_SOURCE -U_GNU_SOURCE -D_FORTIFY_SOURCE=2 -funit-at-a-time
 LIB = libkeymap.a
+DEPS = parser.h analyze.h parser.c analyze.c
 OBJS = analyze.o\
        array.o\
        common.o\
@@ -21,14 +22,18 @@ OBJS = analyze.o\
        modifiers.o\
        parser.o\
        summary.o
-CLEAN_FILES = parser.c analyze.c parser.h analyze.h
+CLEAN_FILES = $(DEPS) _parser _analyze
 
 include $(ROOT)/mk/lib.mk
 
-deps: parser.h analyze.h
+parser.h parser.c: _parser ;
 
-parser.h parser.c:
+_parser: parser.y
        @$(SHELL) ../../config/ylwrap parser.y y.tab.c parser.c y.tab.h 
parser.h y.output parser.output -- bison -y
+       @touch $@
 
-analyze.h analyze.c:
+analyze.h analyze.c: _analyze ;
+
+_analyze: analyze.l
        @$(SHELL) ../../config/ylwrap analyze.l lex.yy.c analyze.c -- flex 
--header-file=$(PWD)/analyze.h
+       @touch $@
diff --git a/bin/kbd/src/stali.mk b/bin/kbd/src/stali.mk
index d457d3e..403453b 100644
--- a/bin/kbd/src/stali.mk
+++ b/bin/kbd/src/stali.mk
@@ -44,7 +44,7 @@ SRC = $(BIN:=.c)
 
 all: $(BIN)
 
-$(BIN): $(LIB) $(OBJ)
+$(BIN): $(LIB) $(OBJ) libkeymap/libkeymap.a
        @echo LD $@
        @$(LD) $(LDFLAGS) -o $@ $@.o $(LIB) libkeymap/libkeymap.a
 
diff --git a/bin/kbd/stali.mk b/bin/kbd/stali.mk
index f83c59e..840a3cc 100644
--- a/bin/kbd/stali.mk
+++ b/bin/kbd/stali.mk
@@ -3,3 +3,5 @@ ROOT=../..
 SUBDIRS = src/libkeymap src data
 
 include $(ROOT)/mk/dir.mk
+
+src: src/libkeymap
diff --git a/bin/libarchive/cpio/stali.mk b/bin/libarchive/cpio/stali.mk
index 4781f7f..c966213 100644
--- a/bin/libarchive/cpio/stali.mk
+++ b/bin/libarchive/cpio/stali.mk
@@ -7,7 +7,6 @@ OBJS= cmdline.o cpio.o
 CLEAN_FILES =  
 CPPFLAGS = -DHAVE_CONFIG_H
 CFLAGS = -I. -I.. -I../libarchive -I../libarchive_fe
-LDFLAGS += ../libarchive/libarchive.a $(ROOT)/lib/zlib/libz.a
+LIBS = ../libarchive/libarchive.a $(ROOT)/lib/zlib/libz.a
 
 include $(ROOT)/mk/bin.mk
-
diff --git a/bin/libarchive/stali.mk b/bin/libarchive/stali.mk
index 3269d29..3c2c7db 100644
--- a/bin/libarchive/stali.mk
+++ b/bin/libarchive/stali.mk
@@ -1,7 +1,9 @@
 ROOT=../..
 
 SUBDIRS = libarchive\
-         cpio
-# tar
+         cpio\
+         tar
 
 include $(ROOT)/mk/dir.mk
+
+cpio tar: libarchive
diff --git a/bin/libarchive/tar/stali.mk b/bin/libarchive/tar/stali.mk
index 2da7ce5..c271c2e 100644
--- a/bin/libarchive/tar/stali.mk
+++ b/bin/libarchive/tar/stali.mk
@@ -7,7 +7,6 @@ OBJS= bsdtar.o cmdline.o creation_set.o read.o subst.o util.o 
write.o
 CLEAN_FILES =  
 CPPFLAGS = -DHAVE_CONFIG_H
 CFLAGS = -I. -I.. -I../libarchive -I../libarchive_fe
-LDFLAGS += ../libarchive/libarchive.a $(ROOT)/lib/zlib/libz.a
+LIBS = ../libarchive/libarchive.a $(ROOT)/lib/zlib/libz.a
 
 include $(ROOT)/mk/bin.mk
-
diff --git a/bin/parted/lib/stali.mk b/bin/parted/lib/stali.mk
index 45f8380..ec1fd76 100644
--- a/bin/parted/lib/stali.mk
+++ b/bin/parted/lib/stali.mk
@@ -42,7 +42,7 @@ OBJS = xstrtol.o\
        error.o\
        canonicalize-lgpl.o\
        xalloc-die.o
-GEN = fcntl.h\
+DEPS = fcntl.h\
        inttypes.h\
        ref-add.sed\
        langinfo.h\
@@ -65,12 +65,10 @@ GEN = fcntl.h\
        c++defs.h\
        unistd.h
 LIB = libputil.a
-CLEAN_FILES = $(GEN)
+CLEAN_FILES = $(DEPS)
 
 include $(ROOT)/mk/lib.mk
 
-deps: $(GEN)
-
-$(GEN):
+$(DEPS):
        @echo GEN $@
        @cp $@.stali $@
diff --git a/bin/parted/parted/stali.mk b/bin/parted/parted/stali.mk
index db9e38b..7d16221 100644
--- a/bin/parted/parted/stali.mk
+++ b/bin/parted/parted/stali.mk
@@ -11,7 +11,6 @@ OBJS = parted.o\
        ui.o
 CPPFLAGS += 
 CFLAGS += -I. -I../lib -I../include
-LDFLAGS += ../libparted/libparted.a ../../e2fsprogs/lib/libuuid.a 
../lib/libputil.a 
+LIBS = ../libparted/libparted.a ../../e2fsprogs/lib/libuuid.a 
../lib/libputil.a 
 
 include $(ROOT)/mk/bin.mk
-
diff --git a/bin/parted/stali.mk b/bin/parted/stali.mk
index 48dda80..fbcfda2 100644
--- a/bin/parted/stali.mk
+++ b/bin/parted/stali.mk
@@ -5,3 +5,5 @@ SUBDIRS = lib\
        parted
 
 include $(ROOT)/mk/dir.mk
+
+parted: lib libparted
diff --git a/bin/rc/stali.mk b/bin/rc/stali.mk
index 0610972..ae9be1f 100644
--- a/bin/rc/stali.mk
+++ b/bin/rc/stali.mk
@@ -15,4 +15,3 @@ install: all
 
 uninstall:
        @cd $(DESTDIR)$(PREFIX)/etc && rm -f $(BIN)
-
diff --git a/bin/sbase/stali.mk b/bin/sbase/stali.mk
index eed99a0..2c81018 100644
--- a/bin/sbase/stali.mk
+++ b/bin/sbase/stali.mk
@@ -210,8 +210,11 @@ $(LIBUTIL): $(LIBUTILOBJ)
 
 getconf.c: confstr_l.h limits_l.h sysconf_l.h pathconf_l.h
 
-confstr_l.h limits_l.h sysconf_l.h pathconf_l.h: getconf.sh
+confstr_l.h limits_l.h sysconf_l.h pathconf_l.h: _getconf ;
+       
+_getconf: getconf.sh
        ./getconf.sh
+       touch $@
 
 install: all
        mkdir -p $(DESTDIR)$(PREFIX)/bin
@@ -229,7 +232,7 @@ uninstall:
 
 clean:
        rm -f $(BIN) $(OBJ) $(LIB) sbase-box sbase-$(VERSION).tar.gz
-       rm -f confstr_l.h limits_l.h sysconf_l.h pathconf_l.h
+       rm -f confstr_l.h limits_l.h sysconf_l.h pathconf_l.h _getconf
 
 .PHONY:
        all install uninstall clean
diff --git a/bin/sinit/stali.mk b/bin/sinit/stali.mk
index 8d3c1f0..ba74652 100644
--- a/bin/sinit/stali.mk
+++ b/bin/sinit/stali.mk
@@ -4,12 +4,10 @@ include $(ROOT)/config.mk
 
 OBJS = sinit.o
 BIN = init
+DEPS = config.h
 
 include $(ROOT)/mk/bin.mk
 
-deps: config.h
-
 config.h:
        @echo creating $@ from config.def.h
        @cp config.def.h $@
-
diff --git a/bin/smdev/stali.mk b/bin/smdev/stali.mk
index 0380eb7..29f8462 100644
--- a/bin/smdev/stali.mk
+++ b/bin/smdev/stali.mk
@@ -3,6 +3,7 @@ ROOT=../..
 include $(ROOT)/config.mk
 
 CFLAGS += -D_BSD_SOURCE -D_GNU_SOURCE
+DEPS = config.h
 OBJS = \
        smdev.o             \
        util/agetcwd.o      \
@@ -18,8 +19,6 @@ BIN = smdev
 
 include $(ROOT)/mk/bin.mk
 
-deps: config.h
-
 config.h:
        @echo creating $@ from config.def.h
        @cp config.def.h $@
diff --git a/bin/ssh/stali.mk b/bin/ssh/stali.mk
index afa6a24..0ce0fc6 100644
--- a/bin/ssh/stali.mk
+++ b/bin/ssh/stali.mk
@@ -484,7 +484,9 @@ BIN = ssh-key ssh
 OBJ = $(LIBTOMMATHOBJ) $(LIBTOMCRYPTOBJ) $(COMMONOBJS) $(KEYOBJS) $(CLIOBJS) 
$(CLISVROBJS) 
 MAN = ssh.1 ssh-key.1
 
-all: $(LIB) $(BIN)
+all: $(BIN)
+
+$(BIN): $(LIB)
 
 libtomcrypt/src/ciphers/aes/aes_enc.o: libtomcrypt/src/ciphers/aes/aes.c 
libtomcrypt/src/ciphers/aes/aes_tab.c
        $(CC) $(CFLAGS) -DENCRYPT_ONLY -c $< -o 
libtomcrypt/src/ciphers/aes/aes_enc.o
@@ -497,13 +499,13 @@ $(LIBTOMCRYPT): $(LIBTOMCRYPTOBJ)
        $(AR) rc $@ $?
        $(RANLIB) $@
 
-ssh-key: $(COMMONOBJS) $(KEYOBJS)
+ssh-key: $(COMMONOBJS) $(KEYOBJS) $(LIB)
        @echo LD $@
-       @$(LD) $(LDFLAGS) -o $@ $(COMMONOBJS) $(KEYOBJS) $(LIB)
+       @$(LD) $(LDFLAGS) -o $@ $^
 
-ssh: $(COMMONOBJS) $(CLISVROBJS) $(CLIOBJS)
+ssh: $(COMMONOBJS) $(CLISVROBJS) $(CLIOBJS) $(LIB)
        @echo LD $@
-       @$(LD) -o $@ $(COMMONOBJS) $(CLISVROBJS) $(CLIOBJS) $(LIB) $(LDFLAGS)
+       @$(LD) -o $@ $^ $(LDFLAGS)
 
 .c.o:
        @echo CC $<
diff --git a/bin/stali.mk b/bin/stali.mk
index 72035e3..4ce0c5c 100644
--- a/bin/stali.mk
+++ b/bin/stali.mk
@@ -23,3 +23,5 @@ SUBDIRS = hbase\
        parted
 
 include $(ROOT)/mk/dir.mk
+
+parted: e2fsprogs
diff --git a/bin/vis/stali.mk b/bin/vis/stali.mk
index 2694d31..39b2cc6 100644
--- a/bin/vis/stali.mk
+++ b/bin/vis/stali.mk
@@ -7,7 +7,8 @@ CFLAGS += -std=c99 -I$(ROOT)/lib/ncurses/include 
-I$(ROOT)/lib/libtermkey
 CPPFLAGS +=  -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 -DNDEBUG 
-DVERSION=\"$(VERSION)\"
 BIN = vis
 CLEAN_FILES = config.h
-LDFLAGS += $(ROOT)/lib/ncurses/libncurses.a $(ROOT)/lib/libtermkey/libtermkey.a
+LIBS = $(ROOT)/lib/ncurses/libncurses.a $(ROOT)/lib/libtermkey/libtermkey.a
+DEPS = config.h
 OBJS = array.o\
        buffer.o\
        libutf.o\
@@ -33,8 +34,6 @@ OBJS = array.o\
 
 include $(ROOT)/mk/bin.mk
 
-deps: config.h
-
 config.h:
        cp config.def.h config.h
 
@@ -45,9 +44,5 @@ postinst:
        @chmod 755 $(DESTDIR)$(PREFIX)/bin/vis-clipboard
 
 postuninst:
-       @cd $(DESTDIR)$(PREFIX)/bin && rm vis-open
-       @cd $(DESTDIR)$(PREFIX)/bin && rm vis-clipboard
-
-
-
-
+       @cd $(DESTDIR)$(PREFIX)/bin && rm -f vis-open
+       @cd $(DESTDIR)$(PREFIX)/bin && rm -f vis-clipboard
diff --git a/config.mk b/config.mk
index fb2cba1..201041b 100644
--- a/config.mk
+++ b/config.mk
@@ -2,36 +2,38 @@
 VERSION = 0.0
 
 # define target and target rootfs
-HOST_ARCH=x86_64-linux-musl
-TARGET_ARCH=arm-linux-musleabi
-#TARGET_ARCH=$(HOST_ARCH)
-#TARGET_LONG=8
-TARGET_LONG=4
-SYS=sys.pi
-#SYS=sys.x86_64
-DESTDIR=$(HOME)/rootfs-pi
-#DESTDIR=$(HOME)/rootfs-x86_64
+HOST_ARCH = x86_64-linux-musl
+
+TARGET_ARCH = $(HOST_ARCH)
+TARGET_LONG = 8
+SYS         = sys.x86_64
+DESTDIR     = $(HOME)/rootfs-x86_64
+
+#TARGET_ARCH = arm-linux-musleabi
+#TARGET_LONG = 4
+#SYS         = sys.pi
+#DESTDIR     = $(HOME)/rootfs-pi
+
 PREFIX = /
 MANPREFIX = $(PREFIX)/share/man
 
-M4 = m4
+M4     = m4
 HOSTCC = $(ROOT)/../toolchain/bin/$(HOST_ARCH)-gcc
-CC = $(ROOT)/../toolchain/bin/$(TARGET_ARCH)-gcc
-CXX = $(ROOT)/../toolchain/bin/$(TARGET_ARCH)-g++
-AS = $(ROOT)/../toolchain/bin/$(TARGET_ARCH)-as
-LD = $(CC)
+CC     = $(ROOT)/../toolchain/bin/$(TARGET_ARCH)-gcc
+CXX    = $(ROOT)/../toolchain/bin/$(TARGET_ARCH)-g++
+AS     = $(ROOT)/../toolchain/bin/$(TARGET_ARCH)-as
+LD     = $(CC)
 
-YACC = $(ROOT)/bin/hbase/yacc/yacc
-HOSTAR = $(ROOT)/../toolchain/bin/$(HOST_ARCH)-ar
-AR = $(ROOT)/../toolchain/bin/$(TARGET_ARCH)-ar
+YACC       = $(ROOT)/bin/hbase/yacc/yacc
+HOSTAR     = $(ROOT)/../toolchain/bin/$(HOST_ARCH)-ar
+AR         = $(ROOT)/../toolchain/bin/$(TARGET_ARCH)-ar
 HOSTRANLIB = $(ROOT)/../toolchain/bin/$(HOST_ARCH)-ranlib
-RANLIB = $(ROOT)/../toolchain/bin/$(TARGET_ARCH)-ranlib
+RANLIB     = $(ROOT)/../toolchain/bin/$(TARGET_ARCH)-ranlib
 
 HOSTCPPFLAGS = -D_POSIX_SOURCE -D__stali__ -DTARGET_LONG=$(TARGET_LONG)
-CPPFLAGS = $(HOSTCPPFLAGS)
+CPPFLAGS     = $(HOSTCPPFLAGS)
 HOSTCFLAGS   = -I$(ROOT)/../toolchain/$(HOST_ARCH)/include
-CFLAGS   = -I$(ROOT)/../toolchain/$(TARGET_ARCH)/include
-CXXFLAGS   = -I$(ROOT)/../toolchain/$(TARGET_ARCH)/include
-#-std=c99 -Wall -pedantic
-#LDFLAGS  = -s -static
-LDFLAGS  = -static
+CFLAGS       = -I$(ROOT)/../toolchain/$(TARGET_ARCH)/include
+CXXFLAGS     = -I$(ROOT)/../toolchain/$(TARGET_ARCH)/include
+HOSTLDFLAGS  = -static
+LDFLAGS      = $(HOSTLDFLAGS)
diff --git a/etc/stali.mk b/etc/stali.mk
index 156abcd..001f61f 100644
--- a/etc/stali.mk
+++ b/etc/stali.mk
@@ -13,4 +13,3 @@ ETC = fstab.def\
 include $(ROOT)/mk/etc.mk
 
 clean:
-
diff --git a/lib/ncurses/ncurses/stali.mk b/lib/ncurses/ncurses/stali.mk
index 11a78b5..978a3e4 100644
--- a/lib/ncurses/ncurses/stali.mk
+++ b/lib/ncurses/ncurses/stali.mk
@@ -161,47 +161,15 @@ OBJS = tty/hardscroll.o \
        base/version.o
 
 LIB = ../libncurses.a
-CLEAN_FILES = *.c init_keytry.h ../include/ncurses_def.h ../include/curses.h 
../include/term.h ../include/hashsize.h
+DEPS = init_keytry.h ../include/ncurses_def.h ../include/curses.h 
../include/term.h ../include/hashsize.h
+CLEAN_FILES = *.c $(DEPS)
 
 include $(ROOT)/mk/lib.mk
 
-deps: init_keytry.h ../include/ncurses_def.h ../include/curses.h 
../include/term.h ../include/hashsize.h
+.SUFFIXES: .stali .h
 
-init_keytry.h:
-       @cp init_keytry.stali init_keytry.h
+.stali.c:
+       @cp $< $@
 
-../include/ncurses_def.h:
-       @cp ../include/ncurses_def.stali ../include/ncurses_def.h
-
-../include/curses.h:
-       @cp ../include/curses.stali ../include/curses.h
-
-../include/term.h:
-       @cp ../include/term.stali ../include/term.h
-
-../include/hashsize.h:
-       @cp ../include/hashsize.stali ../include/hashsize.h
-
-lib_gen.c:
-       @cp lib_gen.stali lib_gen.c
-
-expanded.c:
-       @cp expanded.stali expanded.c
-
-codes.c:
-       @cp codes.stali codes.c
-
-comp_captab.c:
-       @cp comp_captab.stali comp_captab.c
-
-fallback.c:
-       @cp fallback.stali fallback.c
-
-lib_keyname.c:
-       @cp lib_keyname.stali lib_keyname.c
-
-names.c:
-       @cp names.stali names.c
-
-unctrl.c:
-       @cp unctrl.stali unctrl.c
+.stali.h:
+       @cp $< $@
diff --git a/lib/stali.mk b/lib/stali.mk
index 6b002c6..4cbb9d3 100644
--- a/lib/stali.mk
+++ b/lib/stali.mk
@@ -7,3 +7,5 @@ SUBDIRS = zlib\
        expat
 
 include $(ROOT)/mk/dir.mk
+
+libtermkey: ncurses
diff --git a/mk/bin.mk b/mk/bin.mk
index 733bfa1..4b558fa 100644
--- a/mk/bin.mk
+++ b/mk/bin.mk
@@ -1,4 +1,8 @@
-all: options deps $(BINS) $(BIN)
+.SUFFIXES:
+
+.SUFFIXES: .o .c .cc
+
+all: options $(BIN)
 
 options:
        @echo $(BIN) build options:
@@ -15,17 +19,20 @@ options:
        @echo CXX $< 
        @$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $< -o $@
 
-$(BIN): $(OBJS)
+$(OBJS): $(DEPS)
+
+$(BIN): $(OBJS) $(LIBS)
        @echo LD $@
-       @$(CC) -o $@ $(OBJS) $(LDFLAGS)
+       @$(CC) -o $@ $^ $(LDFLAGS)
 
 clean:
        @echo cleaning
-       @rm -f $(BINS) $(BIN) $(OBJS) $(CLEAN_FILES)
+       @rm -f $(BIN) $(OBJS) $(CLEAN_FILES)
 
-install: all preinst postinst
+install: postinst
+postinst: preinst
 
-preinst:
+preinst: all
        @echo installing executable file to $(DESTDIR)$(PREFIX)/bin
        @mkdir -p $(DESTDIR)$(PREFIX)/bin
        @cp -f $(BIN) $(DESTDIR)$(PREFIX)/bin
@@ -43,7 +50,8 @@ preinst:
                chmod 644 $(DESTDIR)$(MANPREFIX)/man8/$(BIN).8;\
        fi
 
-uninstall: preuninst postuninst
+uninstall: postuninst
+postuninst: preuninst
 
 preuninst:
        @echo removing executable file from $(DESTDIR)$(PREFIX)/bin
@@ -57,4 +65,4 @@ preuninst:
                rm -f $(DESTDIR)$(MANPREFIX)/man8/$(BIN).8;\
        fi
 
-.PHONY: deps options clean install preinst postinst uninstall preuninst 
postuninst
+.PHONY: options clean install preinst postinst uninstall preuninst postuninst
diff --git a/mk/dir.mk b/mk/dir.mk
index 717edf6..5451f3b 100644
--- a/mk/dir.mk
+++ b/mk/dir.mk
@@ -1,21 +1,7 @@
-PWD = $(shell pwd)
+all clean install uninstall:
+       $(MAKE) -f stali.mk $(SUBDIRS) TARGET=$@
 
-all:
-       @for i in $(SUBDIRS); do cd $$i; $(MAKE) -f stali.mk || exit; cd 
$(PWD); done;
-       @echo done
-
-clean:
-       @for i in $(SUBDIRS); do cd $$i; $(MAKE) -f stali.mk clean || exit; cd 
$(PWD); done
-       @echo cleaned 
-
-install: all
-       @for i in $(SUBDIRS); do cd $$i; $(MAKE) -f stali.mk install || exit; 
cd $(PWD); done
-       @echo installed 
-
-uninstall:
-       @for i in $(SUBDIRS); do cd $$i; $(MAKE) -f stali.mk uninstall || exit; 
cd $(PWD); done
-       @echo uninstalled 
-
-.PHONY:
-       info all install uninstall clean
+$(SUBDIRS):
+       cd $@ && $(MAKE) -f stali.mk $(TARGET)
 
+.PHONY: all install uninstall clean $(SUBDIRS)
diff --git a/mk/etc.mk b/mk/etc.mk
index 28c1037..55c6d25 100644
--- a/mk/etc.mk
+++ b/mk/etc.mk
@@ -1,14 +1,16 @@
 all: $(ETC)
 
-install: all preinst postinst
+install: postinst
+postinst: preinst
 
-preinst:
+preinst: all
        @echo installing etc files to $(DESTDIR)/etc
        @mkdir -p $(DESTDIR)/etc
        @cp -f $(ETC) $(DESTDIR)/etc
        @cd $(DESTDIR)/etc && chmod 644 $(ETC)
 
-uninstall: preuninst postuninst
+uninstall: postuninst
+postuninst: preuninst
 
 preuninst:
        @echo removing etc files from $(DESTDIR)/etc
diff --git a/mk/lib.mk b/mk/lib.mk
index accf1d0..d9516d6 100644
--- a/mk/lib.mk
+++ b/mk/lib.mk
@@ -1,4 +1,8 @@
-all: options deps $(LIBS) $(LIB)
+.SUFFIXES:
+
+.SUFFIXES: .o .c .cc
+
+all: options $(LIB)
 
 options:
        @echo $(LIB) build options:
@@ -14,6 +18,8 @@ options:
        @echo CXX $< 
        @$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $< -o $@
 
+$(OBJS): $(DEPS)
+
 $(LIB): $(OBJS)
        @echo AR $@
        @$(AR) cr $@ $(OBJS)
@@ -23,9 +29,10 @@ clean:
        @echo cleaning
        @rm -f $(LIB) $(OBJS) $(CLEAN_FILES)
 
-install: all preinst postinst
+install: postinst
+postinst: preinst
 
-preinst:
+preinst: all
 #      @if test "$(LIB_INST)" != ""; then\
 #              echo installing library file to $(DESTDIR)$(PREFIX)/lib ;\
 #              mkdir -p $(DESTDIR)$(PREFIX)/lib ;\
@@ -33,7 +40,8 @@ preinst:
 #      fi
 
 
-uninstall: preuninst postuninst
+uninstall: postuninst
+postuninst: preuninst
 
 preuninst:
 #      @if test "$(LIB_INST)" != ""; then\
@@ -41,4 +49,4 @@ preuninst:
 #              rm -f $(DESTDIR)$(PREFIX)/lib/$(LIB_INST); \
 #      fi
 
-.PHONY: deps options clean install preinst postinst uninstall preuninst 
postuninst
+.PHONY: options clean install preinst postinst uninstall preuninst postuninst
diff --git a/stali.mk b/stali.mk
index f2ee6bb..7a3cc6d 100644
--- a/stali.mk
+++ b/stali.mk
@@ -9,6 +9,6 @@ SUBDIRS = etc\
        bin\
        $(SYS)
 
-world: all
-
 include $(ROOT)/mk/dir.mk
+
+bin: lib
-- 
2.9.3

Reply via email to