SubDir HAIKU_TOP src bin bash ;

SetSubDirSupportedPlatformsBeOSCompatible ;

# split the canonical target string
local cpuName = [ Match "([^-]*)-.*" : $(HAIKU_GCC_MACHINE) ] ;
local vendorName = [ Match "[^-]*-([^-]*)" : $(HAIKU_GCC_MACHINE) ] ;
local osName = [ Match "[^-]*-[^-]*-([^-]*)" : $(HAIKU_GCC_MACHINE) ] ;

SubDirCcFlags -DHAVE_CONFIG_H -DPROGRAM='\"bash\"' -DSHELL -DLOCALEDIR='\"/boot/common/share/locale\"' -DPACKAGE='\"bash\"' ;
SubDirCcFlags -DCONF_MACHTYPE='\"$(HAIKU_GCC_MACHINE)\"' ;
SubDirCcFlags -DCONF_HOSTTYPE='\"$(cpuName)\"' ;
SubDirCcFlags -DCONF_VENDOR='\"$(vendorName)\"' ;
#SubDirCcFlags -DCONF_OSTYPE='\"$(osName)\"' ;
SubDirCcFlags -DCONF_OSTYPE='\"beos\"' ;

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

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

BuildPlatformMain mksyntax :
	mksyntax.c ;

BuildPlatformMain mksignames :
	mksignames.c signames.c ;

SEARCH on [ FGristFiles mksignames.c signames.c ] = [ FDirName $(SUBDIR) support ] ;

rule MkSyntaxExt
{
	MakeLocateArch $(<) ;
	Depends $(<) : mksyntax ;
	MkSyntaxExt1 $(<) : mksyntax ;
	LocalClean clean : $(<) ;
}

actions MkSyntaxExt1
{
	$(2) -o $(1) ;
}

MkSyntaxExt [ FGristFiles syntax.c ] ;

rule MkSignamesExt
{
	MakeLocateArch $(<) ;
	Depends $(<) : mksignames ;
	MkSignamesExt1 $(<) : mksignames ;
	LocalClean clean : $(<) ;
}

actions MkSignamesExt1
{
	$(2) $(1) ;
}

local signamesHeader = <bash>signames.h ;
if $(TARGET_PLATFORM) = haiku {
	MakeLocateArch $(signamesHeader) ;
	File $(signamesHeader) : [ FGristFiles signames_haiku.h ] ;
} else {
	MkSignamesExt $(signamesHeader) ;
}

# Haiku supports job control, BeOS doesn't.
local jobControlSources ;
if $(TARGET_PLATFORM_HAIKU_COMPATIBLE) {
	jobControlSources = jobs.c ;
} else {
	jobControlSources = nojobs.c ;
}

BinCommand bash :
	assoc.c
	parse.y shell.c eval.c general.c make_cmd.c print_cmd.c
	dispose_cmd.c execute_cmd.c variables.c version.c
	expr.c copy_cmd.c flags.c subst.c hashcmd.c hashlib.c mailcheck.c
	trap.c alias.c braces.c
	input.c bashhist.c array.c arrayfunc.c pathexp.c
	unwind_prot.c bashline.c bracecomp.c error.c
	list.c stringlib.c locale.c findcmd.c redir.c
	pcomplete.c pcomplib.c syntax.c xmalloc.c test.c sig.c

	$(jobControlSources)

	: libreadline.a <bash>libglob.a libbuiltins.a libtilde.a libsh.a
	  libtermcap.a $(TARGET_SELECT_UNAME_ETC_LIB)
	: bash.rdef ;

# trap.c includes signames.h
Includes [ FGristFiles trap.c ] : <bash>signames.h ;

# some sources include the generated builtext.h
Includes [ FGristFiles execute_cmd.c nojobs.c jobs.c parse.c subst.c trap.c
		parse.y ]
	: <bash>builtext.h ;

# y.tab.h includes parse.h
Includes [ FGristFiles y.tab.h ] : [ FGristFiles parse.h ] ;

SubInclude HAIKU_TOP src bin bash lib ;
SubInclude HAIKU_TOP src bin bash builtins ;
