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

# Generate token.h
quiet_cmd_mktokens = GEN     $@
      cmd_mktokens = sh $< > $@
$(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 = mkdir -p $(obj)/bltin && 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 = DUMMY   $@
      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)/mksyntax
	$(call cmd,mksyntax)

quiet_cmd_mksyntax_h = DUMMY   $@
      cmd_mksyntax_h = :
$(obj)/syntax.h: $(obj)/syntax.c
	$(call cmd,mksyntax_h)

BISON := bison

quiet_cmd_bison	= BISON   $@
      cmd_bison = $(BISON) -d -o $@ $<

$(obj)/%.c %(obj)/%.h: $(src)/%.y
	$(call cmd,bison)

$(obj)/arith.c $(obj)/arith.h: $(src)/arith.y

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