SubDir HAIKU_TOP src bin bash builtins ;

SetSubDirSupportedPlatformsBeOSCompatible ;

# filter warnings we don't want here
TARGET_WARNING_CCFLAGS = [ FFilter $(TARGET_WARNING_CCFLAGS)
	: -Wall -Wmissing-prototypes -Wsign-compare ] ;

SubDirCcFlags -DHAVE_CONFIG_H -DSHELL ;

SubDirSysHdrs [ FDirName $(SUBDIR) $(DOTDOT) ] ;
SubDirSysHdrs [ FDirName $(SUBDIR) $(DOTDOT) include ] ;
SubDirSysHdrs [ FDirName $(SUBDIR) $(DOTDOT) lib ] ;

BuildPlatformMain mkbuiltins : mkbuiltins.c ;

rule MkBuiltinsComp
{
	local source = $(1) ;
	local defFile = $(2) ;

	SEARCH on $(defFile) = $(SEARCH_SOURCE) ;
	MakeLocateArch $(source) ;

	Depends $(source) : $(defFile) mkbuiltins ;
	MkBuiltinsComp1 $(source) : mkbuiltins $(defFile) ;
	LocalClean clean : $(source) ;
}

actions MkBuiltinsComp1
{
	$(2[1]) -d $(<:P) $(2[2-]) ;
}

rule MkBuiltinsExt
{
	local sources = $(1) ;
	local defFiles = [ FGristFiles $(2) ] ;

	MakeLocateArch $(sources) ;
	SEARCH on $(defFiles) = $(SEARCH_SOURCE) ;

	Depends $(sources) : $(defFiles) mkbuiltins ;
	MkBuiltinsExt1 $(sources) : mkbuiltins $(defFiles) ;
	LocalClean clean : $(sources) ;
}

actions MkBuiltinsExt1
{
	$(2[1]) -externfile $(1[1]) -structfile $(1[2]) -noproduction $(2[2-]) ;
}

local bashDefFiles =
	alias.def bind.def break.def builtin.def cd.def colon.def command.def
	declare.def echo.def enable.def eval.def exec.def exit.def fc.def fg_bg.def
	hash.def help.def history.def jobs.def kill.def let.def pushd.def read.def
	return.def set.def setattr.def shift.def source.def suspend.def test.def
	times.def trap.def type.def ulimit.def umask.def wait.def getopts.def
	shopt.def printf.def complete.def
;

# generate the source files for the .def files
local bashDefFile ;
for bashDefFile in [ FGristFiles $(bashDefFiles) ] {
	local source = $(bashDefFile:S=.c) ;
	Includes $(source) : <bash>builtext.h ;
	MkBuiltinsComp $(source) : $(bashDefFile) ;
}

# generate builtext.h and builtins.c
MkBuiltinsExt <bash>builtext.h [ FGristFiles builtins.c ] : $(bashDefFiles) ;

# generate the builtins library
StaticLibrary libbuiltins.a
	: common.c evalfile.c evalstring.c getopt.c bashgetopt.c builtins.c
	  [ FGristFiles $(bashDefFiles:S=.c) ]
;

# common.c includes builtext.h
Includes [ FGristFiles common.c ] : <bash>builtext.h ;
