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

     1  package engine
     2  
     3  import (
     4  	"log"
     5  	"os"
     6  
     7  	"github.com/metux/go-metabuild/engine/autoconf"
     8  	"github.com/metux/go-metabuild/engine/builder"
     9  	"github.com/metux/go-metabuild/engine/packager"
    10  	"github.com/metux/go-metabuild/spec/global"
    11  	"github.com/metux/go-metabuild/util"
    12  )
    13  
    14  var (
    15  	ErrNoStage = util.Error("no such stage")
    16  )
    17  
    18  type Engine struct {
    19  	Global global.Global
    20  }
    21  
    22  func (e *Engine) Load(fn string, dflt string) error {
    23  	if gs, err := global.LoadGlobal(fn, dflt); err == nil {
    24  		e.Global = gs
    25  	} else {
    26  		return err
    27  	}
    28  	return nil
    29  }
    30  
    31  func (e Engine) StageInit() error {
    32  	log.Printf("Stage: init: %s ver %s\n",
    33  		e.Global.EntryStr(global.KeyPackage),
    34  		e.Global.EntryStr(global.KeyVersion))
    35  	if srcdir := e.Global.EntryStr(global.KeySrcDir); srcdir != "" {
    36  		if err := os.Chdir(srcdir); err != nil {
    37  			return err
    38  		}
    39  		// prevent accidential double chdir
    40  		e.Global.EntryDelete(global.KeySrcDir)
    41  	}
    42  	return nil
    43  }
    44  
    45  func (e Engine) StageConfigure() error {
    46  	if err := e.StageInit(); err != nil {
    47  		return err
    48  	}
    49  	log.Println("Stage: configure")
    50  	return autoconf.RunConfigure(e.Global)
    51  }
    52  
    53  func (e Engine) StageAutogen() error {
    54  	if err := e.StageConfigure(); err != nil {
    55  		return err
    56  	}
    57  	log.Println("Stage: autogen")
    58  	return autoconf.RunGenerates(e.Global)
    59  }
    60  
    61  func (e Engine) StageBuild() error {
    62  	if err := e.StageAutogen(); err != nil {
    63  		return err
    64  	}
    65  	log.Println("Stage: build")
    66  	return builder.RunBuild(e.Global)
    67  }
    68  
    69  func (e Engine) StagePackage() error {
    70  	if err := e.StageBuild(); err != nil {
    71  		return err
    72  	}
    73  	log.Println("Stage: package")
    74  	return packager.RunPackaging(e.Global)
    75  }
    76  
    77  func (e Engine) RunStage(s Stage) error {
    78  	switch s {
    79  	case StageInit:
    80  		return e.StageInit()
    81  	case StageConfigure:
    82  		return e.StageConfigure()
    83  	case StageAutogen:
    84  		return e.StageAutogen()
    85  	case StageBuild:
    86  		return e.StageBuild()
    87  	case StagePackage:
    88  		return e.StagePackage()
    89  	}
    90  	return ErrNoStage
    91  }
    92  
    93  func Load(fn string, defaults string) (Engine, error) {
    94  	e := Engine{}
    95  	err := e.Load(fn, defaults)
    96  	return e, err
    97  }