github.com/metux/go-metabuild@v0.0.0-20240118143255-d9ed5ab697f9/engine/builder/factory.go (about)

     1  package builder
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/metux/go-metabuild/engine/builder/c"
     7  	"github.com/metux/go-metabuild/engine/builder/composite"
     8  	"github.com/metux/go-metabuild/engine/builder/data"
     9  	"github.com/metux/go-metabuild/engine/builder/doc"
    10  	"github.com/metux/go-metabuild/engine/builder/exec"
    11  	"github.com/metux/go-metabuild/engine/builder/gen"
    12  	"github.com/metux/go-metabuild/engine/builder/i18n"
    13  	"github.com/metux/go-metabuild/spec"
    14  	"github.com/metux/go-metabuild/spec/target"
    15  	"github.com/metux/go-metabuild/util/jobs"
    16  )
    17  
    18  func CreateBuilder(o target.TargetObject) (jobs.Job, error) {
    19  	id := o.MyId()
    20  
    21  	switch t := spec.Key(o.RequiredEntryStr(target.KeyBuilderDriver)); t {
    22  
    23  	/* plain C or C++ */
    24  	case target.TypeCExecutable:
    25  		return c.MakeBuilderCExecutable(o, id), nil
    26  	case target.TypeCLibrary:
    27  		return c.MakeCLibrary(o, id), nil
    28  
    29  	/* data files */
    30  	case target.TypeDataMisc:
    31  		return data.MakeDataMisc(o, id), nil
    32  	case target.TypeDataDesktop:
    33  		return data.MakeDataDesktop(o, id), nil
    34  	case target.TypeDataPixmap:
    35  		return data.MakeDataMisc(o, id), nil
    36  
    37  	/* locales */
    38  	case target.TypeI18nPo:
    39  		return i18n.MakeI18nPo(o, id), nil
    40  	case target.TypeI18nMsgfmt:
    41  		return i18n.MakeI18nMsgfmt(o, id), nil
    42  
    43  	/* documentation */
    44  	case target.TypeDocMan:
    45  		return doc.MakeManPages(o, id), nil
    46  	case target.TypeDocMisc:
    47  		return doc.MakeDocMisc(o, id), nil
    48  	case target.TypeDocYelp:
    49  		return doc.MakeYelp(o, id), nil
    50  
    51  	/* generators */
    52  	case target.TypeGenGlibResource:
    53  		return gen.MakeGlibResource(o, id), nil
    54  	case target.TypeGenGlibMarshal:
    55  		return gen.MakeGlibMarshal(o, id), nil
    56  	case target.TypeXdtCSource:
    57  		return gen.MakeXdtCSource(o, id), nil
    58  	case target.TypeXxdCSource:
    59  		return gen.MakeXxdCSource(o, id), nil
    60  
    61  	/* composite */
    62  	case target.TypeCGlibMarshal:
    63  		return composite.MakeGlibMarshal(o, id), nil
    64  	case target.TypeCGlibResource:
    65  		return composite.MakeGlibResource(o, id), nil
    66  
    67  	/* exec */
    68  	case target.TypeExecBasic:
    69  		return exec.MakeExecBasic(o, id), nil
    70  
    71  	default:
    72  		return nil, fmt.Errorf("unsupported builder driver: %s", t)
    73  	}
    74  }