SubDir TOP src scripting ;

if $(MINISWIG)
{
    ##  MiniSwigRule outputcppfile : inputfile : modulename : flags
    rule MiniSwigRule
    {
        local sources = [ SearchSource $(>) ] ;
        local cppfile = [ LocateTarget $(<) : $(SUBDIR) ] ;
        local headerfile = [ LocateTarget $(<:S=.hpp) : $(SUBDIR) ] ;	
        SEARCH on $(headerfile) = $(SOURCH_SOURCE) ;

        MiniSwig $(cppfile) : $(sources) ;

        CPPFLAGS on $(cppfile) = $(CPPFLAGS) -DSCRIPTING_API ;
        headerfile on $(cppfile) = $(headerfile) ;
        modulename on $(cppfile) = $(3) ;
        FLAGS on $(cppfile) = $(4) ;

        local h = $(headerfile:G=) ;
        h = $(h:D=) ;
        Includes $(h) : $(headerfile) ;
        Includes $(headerfile) : $(cppfile) ;

        local object = [ CompileObject $(cppfile) ] ;

        return $(object) ;
    }

    rule MiniSwig
    {
        Depends $(<) : $(>) $(MINISWIG) ;
    }

    actions MiniSwig bind headerfile
    {
        $(CPP) -x c -CC $(CPPFLAGS) $(>) -o $(LOCATE_OBJECTS)/miniswig.tmp
        ./miniswig --output-cpp $(<) --input $(LOCATE_OBJECTS)/miniswig.tmp --output-hpp $(headerfile) --module $(modulename) $(FLAGS)
#       rm -f $(LOCATE_OBJECTS)/miniswig.tmp
    }
}

wrapper_sources = [ Filter [ Wildcard *.cpp *.hpp ] : wrapper.cpp wrapper.hpp ] ;
if ! $(MINISWIG)
{
    wrapper_sources += [ SearchSource wrapper.cpp ] ;
}
wrapper_objects = [ CompileObjects $(wrapper_sources) ] ;
if $(MINISWIG)
{
    wrapper_objects += 
        [ MiniSwigRule wrapper.cpp : wrapper.interface.hpp : supertux : --select-namespace Scripting ] ;
}

