SHELL =		/bin/sh

#######
include $(BUILDHOME)/buildprefs/make.pre
#######

TARGET	= $(OBJ_DIR)/sh

# The name of this program and some version information.
Version =	2.03
PatchLevel =	0
RELSTATUS =	release

APP_VERSION     = -app 2 0 3 f 0 -short $(Version) -long "$(Version) "`echo -n -e '\302\251'`" 1999 The Free Software Foundation"


OS =		beos
ifeq ($(CPU),ppc)
VENDOR =	be
else
VENDOR =	pc
endif
MACHTYPE =	$(CPU)-$(VENDOR)-$(OS)

DEFS =		-DHAVE_CONFIG_H -DSHELL
SYSTEM_FLAGS = -DPROGRAM='"bash"' -DCONF_HOSTTYPE='"$(CPU)"' -DCONF_OSTYPE='"$(OS)"' -DCONF_MACHTYPE='"$(MACHTYPE)"' -DCONF_VENDOR='"$(VENDOR)"'
INCLUDES +=	-I. -I./lib
CFLAGS +=	$(SYSTEM_FLAGS) $(DEFS)
LDFLAGS +=	-lnet
ifeq ($(COMPILER), metrowerks)
LDFLAGS +=	-nodup
endif

LIBS =		-lbuiltins \
		-lreadline \
		-lhistory \
		-ltermcap \
		-lglob \
		-ltilde \
		-lmalloc \
		-lsh

LIBPATHS =	-L./builtins/$(OBJ_DIR) \
		-L./lib/readline/$(OBJ_DIR) \
		-L./lib/glob/$(OBJ_DIR) \
		-L./lib/tilde/$(OBJ_DIR) \
		-L./lib/malloc/$(OBJ_DIR) \
		-L./lib/sh/$(OBJ_DIR)


SRCS	 =	\
		alias.c \
		array.c \
		bashhist.c \
		bashline.c \
		bracecomp.c \
		braces.c \
		copy_cmd.c \
		dispose_cmd.c \
		error.c \
		eval.c \
		execute_cmd.c \
		expr.c \
		findcmd.c \
		flags.c \
		general.c \
		hashcmd.c \
		hashlib.c \
		input.c \
		list.c \
		locale.c \
		mailcheck.c \
		make_cmd.c \
		nojobs.c \
		pathexp.c \
		print_cmd.c \
		redir.c \
		shell.c \
		sig.c \
		siglist.c \
		stringlib.c \
		subst.c \
		test.c \
		trap.c \
		unwind_prot.c \
		variables.c \
		version.c \
		xmalloc.c \
		y.tab.c

OBJS =		$(SRCS_LIST_TO_OBJS)

$(TARGET):		subdirs $(OBJ_DIR) $(OBJS)
		$(LD) $(LIBPATHS) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
		$(SETVERSION) $@ $(SYSTEM_VERSION) $(APP_VERSION)

subdirs :		
		cd lib/readline && $(MAKE)
		cd lib/glob && $(MAKE) $(PARALLELMFLAGS)
		cd lib/tilde && $(MAKE) $(PARALLELMFLAGS)
		cd lib/malloc && $(MAKE) $(PARALLELMFLAGS)
		cd lib/sh && $(MAKE) $(PARALLELMFLAGS)
		cd builtins && $(MAKE)

install::
		rm -f $(INSTALL_ETC)/profile $(INSTALL_DIR)/.profile
		cp profile $(INSTALL_ETC)

version.h:	config.h Makefile 
		$(SHELL) support/mkversion.sh -b -s $(RELSTATUS) -d $(Version) -p $(PatchLevel) -o newversion.h \
		  && mv newversion.h version.h

# old rules
GRAM_H =	parser-built
y.tab.o:	y.tab.c ${GRAM_H} command.h stdc.h input.h
${GRAM_H}:	y.tab.h
		@-if test -f y.tab.h ; then \
			cmp -s $@ y.tab.h 2>/dev/null || cp -p y.tab.h $@; \
		fi
y.tab.c y.tab.h: parse.y
		$(YACC) -d parse.y

$(OBJ_DIR)/mksignames.o:	support/mksignames.c
ifeq ($(COMPILER), metrowerks)
	$(CC) -I- -I. -I.. $(INCLUDES) -c $<
	$(LD) -o $@ $@.o
else
	$(CC) $(CFLAGS) $(INCLUDES) -lnet -c -o $@ $<
endif

mksignames:	support/mksignames.c
ifeq ($(COMPILER), metrowerks)
	$(CC) -I- -I. -I.. $(INCLUDES) -c $<
	$(LD) -o $@ $@.o
else
	$(CC) -I. $(INCLUDES) -o $@ $<
endif


# make a list of signals for the local system -- this is done when we're
# *not* cross-compiling
lsignames.h:	mksignames
		rm -f $@
		./mksignames $@

# copy the correct signames header file to signames.h
signames.h: lsignames.h
		-if cmp -s lsignames.h $@ ; then :; else rm -f $@ ; cp lsignames.h $@ ; fi

force:

.PHONY: clean

clean ::
	cd lib/readline && $(MAKE) $(PARALLELMFLAGS) $@
	cd lib/glob && $(MAKE) $(PARALLELMFLAGS) $@
	cd lib/tilde && $(MAKE) $(PARALLELMFLAGS) $@
	cd lib/malloc && $(MAKE) $(PARALLELMFLAGS) $@
	cd lib/sh && $(MAKE) $(PARALLELMFLAGS) $@
	cd builtins && $(MAKE) $(PARALLELMFLAGS) $@
	rm -f lsignames.h mksignames signames.h version.h mksignames.o
	rm -f lsignames.h signames.h version.h .build

$(OBJ_DIR)/trap.o:	signames.h
$(OBJ_DIR)/version.o:	version.h

#######
include $(BUILDHOME)/buildprefs/make.post
#######
