#
# Kbuild file for dash
#

COMMON_CFLAGS :=
COMMON_CPPFLAGS := \
	-DBSD=1 -DSMALL -DSHELL \
	-DGLOB_BROKEN -DFNMATCH_BROKEN -DIFS_BROKEN \
	-DJOBS=0

CFLAGS := $(COMMON_CFLAGS)
CPPFLAGS := $(COMMON_CPPFLAGS)
CFLAGS_FOR_BUILD := $(COMMON_CFLAGS) 
CPPFLAGS_FOR_BUILD := $(COMMON_CPPFLAGS)

DEFS := -DHAVE_CONFIG_H
DEFAULT_INCLUDES := \
	-I$(srctree)/$(src) -I$(objtree)/$(obj) \
	-include $(srctree)/$(src)/config.h

EXTRA_KLIBCCFLAGS := $(DEFS) $(DEFAULT_INCLUDES) $(CPPFLAGS) $(CFLAGS)
HOST_EXTRACFLAGS := $(CPPFLAGS_FOR_BUILD) $(CFLAGS_FOR_BUILD) 

SRCS :=	alias.c arith_yylex.c cd.c error.c eval.c exec.c expand.c \
	histedit.c input.c jobs.c mail.c main.c memalloc.c miscbltin.c \
	mystring.c options.c parser.c redir.c show.c trap.c output.c \
	bltin/printf.c system.c bltin/test.c bltin/times.c var.c

OBJ1 :=	builtins.o init.o nodes.o syntax.o
OBJ2 :=	alias.o arith.o arith_yylex.o cd.o \
	error.o eval.o exec.o expand.o \
	histedit.o input.o jobs.o \
	mail.o main.o memalloc.o \
	miscbltin.o mystring.o options.o \
	parser.o redir.o show.o trap.o \
	output.o bltin/printf.o system.o \
	bltin/test.o bltin/times.o var.o

OBJS :=	$(OBJ1) $(OBJ2)

HELPERS := mkinit mksyntax mknodes mksignames
BUILT_SOURCES := arith.h builtins.h nodes.h syntax.h token.h
CLEANFILES := \
	$(BUILT_SOURCES) $(patsubst %.o,%.c,$(OBJ1)) \
	arith.c $(HELPERS) builtins.def

static-y := sh

sh-y := $(OBJS)

# The shared binary
shared-y    := sh.shared
sh.shared-y := $(sh-y)

hostprogs-y := $(HELPERS)

# For cleaning
targets := sh sh.g sh.shared sh.shared.g $(CLEANFILES)

$(addprefix $(obj)/, $(OBJS)): $(addprefix $(obj)/, $(BUILT_SOURCES) check)

quiet_cmd_check = CHECK   $(obj)
      cmd_check = mkdir -p $(obj)/bltin; touch $(obj)/check
$(obj)/check:
	$(call cmd,check)

# Generate token.h
quiet_cmd_mktokens = GEN     $@
      cmd_mktokens = cd $(obj); sh $(srctree)/$<
$(obj)/token.h: $(src)/mktokens
	$(call cmd,mktokens)

# Generate builtins.def
targets += builtins.def
quiet_cmd_mkbuiltins_def = GEN     $@
      cmd_mkbuiltins_def = $(HOSTCC) $(hostc_flags) -x c -E -o $@ $<
$(obj)/builtins.def: $(src)/builtins.def.in $(src)/config.h
	$(call cmd,mkbuiltins_def)

# Generate builtins{.c + .h}
quiet_cmd_mkbuiltins = GEN     $@
      cmd_mkbuiltins = cd $(obj); sh $(srctree)/$(src)/mkbuiltins builtins.def
$(obj)/builtins.h $(obj)/builtins.c: $(src)/mkbuiltins $(obj)/builtins.def
	$(call cmd,mkbuiltins)

# Generate init.c
quiet_cmd_mkinit = GEN     $@
      cmd_mkinit = cd $(obj); ./mkinit $(addprefix $(srctree)/$(src)/, $(SRCS))
$(obj)/init.c: $(obj)/mkinit $(addprefix $(src)/, $(SRCS))
	$(call cmd,mkinit)

# Generate nodes{.c + .h}
quiet_cmd_mknodes = GEN     $@
      cmd_mknodes = cd $(obj); ./mknodes $(srctree)/$(src)/nodetypes \
			       $(srctree)/$(src)/nodes.c.pat
$(obj)/nodes.c: $(obj)/mknodes $(src)/nodetypes $(src)/nodes.c.pat
	$(call cmd,mknodes)

quiet_cmd_mknodes_h = GEN     $@
      cmd_mknodes_h = :
$(obj)/nodes.h: $(obj)/nodes.c
	$(call cmd,mknodes_h)

quiet_cmd_mksyntax = GEN     $@
      cmd_mksyntax = cd $(obj); ./mksyntax
$(obj)/syntax.c $(obj)/syntax.h: $(obj)/mksyntax
	$(call cmd,mksyntax)

quiet_cmd_mksignames = GEN     $@
      cmd_mksignames = cd $(obj); ./mksignames
$(obj)/signames.c: $(obj)/mksignames
	$(call cmd,mksignames)


$(obj)/arith.c: $(src)/arith.y
	bison -o $@ $<

$(obj)/arith.h: $(src)/arith.y
	bison --defines=$@ -o /dev/null $<


# Targets to install
install-y := sh.shared
