SubDir OBOS_TOP src apps bin bash builtins ;

SubDirCcFlags -DHAVE_CONFIG_H -DSHELL ;

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

BinCommand mkbuiltins : mkbuiltins.c ;

MakeLocate mkbuiltins : $(LOCATE_TARGET) ;

rule UserObject
{
	switch $(2)
	{
	case *.S    : assemble $(1) : $(2) ;
	case *.o    : return ;
	case *.def 	: {
			Depends $(<) : builtext.h ;
			Cc $(<) : $(<:S=.c) ;
			MkBuiltinsComp $(<:S=.c) : $(>) ;
			}
	case *      : ECHO "unknown suffix on" $(2) ;
	}
}

rule MkBuiltinsComp
{
	MakeLocate $(<) : $(LOCATE_SOURCE) ;

	Depends $(<) : $(>) mkbuiltins ;
	MkBuiltinsComp1 $(<) : mkbuiltins $(>) ;
	LocalClean clean : $(<) ;
}

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

rule MkBuiltinsExt
{
	MakeLocate $(<) : $(LOCATE_SOURCE) ;
	SEARCH on $(>) = $(SEARCH_SOURCE) ;
	
	Depends $(<) : $(>) mkbuiltins ;
	MkBuiltinsExt1 $(<) : mkbuiltins $(>) ;
	LocalClean clean : $(<) ;
}

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

MkBuiltinsExt builtext.h <src!apps!bin!bash!builtins>builtins.c : 
	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
;

StaticLibrary builtins :
	alias.def bind.def 
	break.def builtin.def cd.def colon.def command.def
	common.c declare.def echo.def enable.def eval.def evalfile.c
	evalstring.c 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 getopt.c bashgetopt.c complete.def
	builtins.c
;

