#
# 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
