go-hep.org/x/hep@v0.38.1/fwk/cmd/fwk-app/cmd_build.go (about)

     1  // Copyright ©2017 The go-hep Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package main
     6  
     7  import (
     8  	"flag"
     9  	"fmt"
    10  
    11  	"codeberg.org/gonuts/commander"
    12  	"go-hep.org/x/hep/fwk/utils/builder"
    13  )
    14  
    15  func fwk_make_cmd_build() *commander.Command {
    16  	cmd := &commander.Command{
    17  		Run:       fwk_run_cmd_build,
    18  		UsageLine: "build [options] <config.go> [<config2.go> [...]]",
    19  		Short:     "build a fwk job",
    20  		Long: `
    21  build builds a fwk-based job and produces a binary.
    22  
    23  ex:
    24   $ fwk-app build config.go
    25   $ fwk-app build config1.go config2.go
    26   $ fwk-app build ./some-dir
    27   $ fwk-app build -o=my-binary config.go
    28  `,
    29  		Flag: *flag.NewFlagSet("fwk-app-build", flag.ExitOnError),
    30  	}
    31  	cmd.Flag.String("o", "", "name of the resulting binary (default=name of parent directory)")
    32  	return cmd
    33  }
    34  
    35  func fwk_run_cmd_build(cmd *commander.Command, args []string) error {
    36  	var err error
    37  	n := "fwk-app-" + cmd.Name()
    38  
    39  	fnames := make([]string, 0, len(args))
    40  	for _, arg := range args {
    41  		if arg == "" {
    42  			continue
    43  		}
    44  		if arg[0] == '-' {
    45  			continue
    46  		}
    47  		fnames = append(fnames, arg)
    48  	}
    49  
    50  	if len(fnames) <= 0 {
    51  		return fmt.Errorf("%s: you need to give a list of files or a directory", n)
    52  	}
    53  
    54  	bldr, err := builder.NewBuilder(fnames...)
    55  	if err != nil {
    56  		return err
    57  	}
    58  
    59  	if o := cmd.Lookup("o").(string); o != "" {
    60  		bldr.Name = o
    61  	}
    62  
    63  	err = bldr.Build()
    64  	if err != nil {
    65  		return err
    66  	}
    67  
    68  	return err
    69  }