#
# Kbuild file for dash
#

config-cppflags := -DBSD=1 -DSMALL -DJOBS=0 -DHAVE_CONFIG_H -DSHELL
config-cppflags += -DGLOB_BROKEN -DIFS_BROKEN

EXTRA_KLIBCCFLAGS := -I$(srctree)/$(src) -I$(objtree)/$(obj)
EXTRA_KLIBCCFLAGS += -include $(srctree)/$(src)/config.h
EXTRA_KLIBCCFLAGS += $(config-cppflags)

HOST_EXTRACFLAGS  := $(config-cppflags)

init-o-files := alias.o arith_yacc.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 var.o

gen-o-files := builtins.o init.o nodes.o syntax.o

sh-y := $(init-o-files) $(gen-o-files)

hostprogs-y := mkinit mksyntax mknodes mksignames
gen-h-files := builtins.h nodes.h syntax.h token.h

static-y := sh

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

# For cleaning
targets := sh sh.g sh.shared sh.shared.g $(gen-o-files)

# explicit dependency for all generated files
$(addprefix $(obj)/, $(sh-y)): $(addprefix $(obj)/, $(gen-h-files))

# Generate token.h
targets += token.h
quiet_cmd_mktokens = GEN     $@
      cmd_mktokens = sh $< > $@
$(obj)/token.h: $(src)/mktokens
	$(call if_changed,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 if_changed,mkbuiltins_def)

# Generate builtins{.c + .h}
targets += builtins.c builtins.h
quiet_cmd_mkbuiltins = GEN     $@
      cmd_mkbuiltins = mkdir -p $(obj)/bltin && cd $(obj) && \
                       sh $(srctree)/$(src)/mkbuiltins builtins.def
$(obj)/builtins.c: $(src)/mkbuiltins $(obj)/builtins.def
	$(call cmd,mkbuiltins)

# side effect..
$(obj)/builtins.h: $(obj)/builtins.c
	$(Q):

# Generate init.c
targets += init.c
init-c-files := $(addprefix $(srctree)/$(src)/, $(init-o-files:.o=.c))
quiet_cmd_mkinit = GEN     $@
      cmd_mkinit = cd $(obj) && ./mkinit $(init-c-files)
$(obj)/init.c: $(obj)/mkinit $(init-c-files)
	$(call cmd,mkinit)

# Generate nodes{.c + .h}
targets += nodes.c nodes.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)

# side effect..
$(obj)/nodes.h: $(obj)/nodes.c
	$(Q):

# Generate syntax{.c + .h}
targets += syntax.c syntax.h
quiet_cmd_mksyntax = GEN     $@
      cmd_mksyntax = cd $(obj) && ./mksyntax
$(obj)/syntax.c: $(obj)/mksyntax
	$(call cmd,mksyntax)

# side effect..
$(obj)/syntax.h: $(obj)/syntax.c
	$(Q):

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