# The *_SRC variables are used to define segments; see the "%.a" recipe. # shell/hush.c is divided into segments as specified within the file itself. MAIN_SRC = shell/hush.c SHELL_OTHER_SRC = \ shell/match.c \ shell/math.c \ shell/random.c \ shell/shell.common.c \ shell/glob.c \ shell/fnmatch.c COREUTILS_SRC = \ coreutils/echo.c \ coreutils/test.c \ coreutils/test.ptr.hack.c LIBBB_A_SRC = \ libbb/lineedit.c LIBBB_B_SRC = \ libbb/appletlib.c \ libbb/getopt32.c \ libbb/error.retval.c \ libbb/endofname.c \ libbb/bb.strtonum.c \ libbb/full.write.c \ libbb/bb.qsort.c \ libbb/copyfd.c \ libbb/get.line.c \ libbb/conc.pathfile.c \ libbb/last.char.is.c \ libbb/cmp.str.array.c \ libbb/llist.c \ libbb/escape.seq.c \ libbb/messages.c \ libbb/bb.basename.c \ libbb/mempcpy.c \ libbb/get.exec.path.c LIBBB_C_SRC = \ libbb/perror.msg.c \ libbb/signal.names.c \ libbb/safe.strncpy.c \ libbb/platform.c \ libbb/signals.c \ libbb/printable.str.c \ libbb/read.key.c \ libbb/safe.write.c \ libbb/read.c \ libbb/s.gethostname.c \ libbb/safe.poll.c \ libbb/parse.mode.c \ libbb/poll.c LIBBB_D_SRC = \ libbb/xfuncs.printf.c \ libbb/xfuncs.c \ libbb/xgetcwd.c \ libbb/xatonum.c \ libbb/xfunc.die.c \ libbb/skip.whitespc.c \ libbb/wfopen.c \ libbb/verror.msg.c \ libbb/time.c \ libbb/xrealloc.vec.c \ libbb/unicode.c \ libbb/vfork.and.run.c \ libbb/waitpid.emul.c SRCS = $(MAIN_SRC) $(SHELL_OTHER_SRC) $(COREUTILS_SRC) $(LIBBB_A_SRC) \ $(LIBBB_B_SRC) $(LIBBB_C_SRC) $(LIBBB_D_SRC) OBJS = $(SRCS:.c=.a) ROOT = $(MAIN_SRC:.c=.root) SHELL_OTHER_SEG = -SSHELLOTHER COREUTILS_SEG = -SCOREUTILS_ LIBBB_A_SEG = -SLIBBB_A___ LIBBB_C_SEG = -SLIBBB_C___ # We need more separate segments in debug mode because the code is bigger. .IF $(DEBUG) LIBBB_B_SEG = -SLIBBB_B___ LIBBB_D_SEG = -SLIBBB_D___ .ELSE LIBBB_B_SEG = -SLIBBB_A___ LIBBB_D_SEG = -SLIBBB_C___ .END INCLUDES = -I include -I shell -I libbb DEFINES = -Dhush_main=main -DNDEBUG # This should be the ltermcap from GNO 2.0.4. The one from 2.0.6 is broken # (links to unimplemented functions), so don't use it. # The 2.0.4 version is in the "lib.shk" file within # ftp://ftp.gno.org/pub/apple2/gs.specific/gno/base/v204/gnodisk1.sdk LIBS = -l/usr/lib/libtermcap.204 # Hack to effectively disable close_on_exec_on method for now. # This will cause us to leak file descriptors. TODO: Fix. DEFINES += -DF_SETFD=-1 -DFD_CLOEXEC=-1 # For correct handling of varargs methods and fork, we need # optimize bit 3 set (no stack repair code). # Optimize bit 6 breaks some standard-compliant varargs code, # and bits 0, 4, and 5 have known bugs. Disable for now. CFLAGS = -i -w -a0 -O8 STACKSIZE = 8192 .IF $(DEBUG) CFLAGS += -g -DDEBUG .END PROG = hush $(PROG): $(OBJS) $(CC) $(LIBS) $(OBJS) -o $@ %.a: %.c $(CC) $(INCLUDES) $(DEFINES) $(CFLAGS) -c $< -o $@ \ $(eq,$<,$(MAIN_SRC) -s$(STACKSIZE) -r) \ $(!eq,$(SHELL_OTHER_SRC:s/$