82 lines
1.7 KiB
Go
82 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
"errors"
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
)
|
|
|
|
func Init() {
|
|
flag.Parse()
|
|
|
|
var err error
|
|
|
|
ModulePath, err = filepath.Abs(flag.Arg(0))
|
|
if err != nil {
|
|
if !*Silent {
|
|
ColorError.Fprintln(os.Stderr, "determining module path failed")
|
|
}
|
|
os.Exit(1)
|
|
}
|
|
|
|
*OutputDir, err = filepath.Abs(*OutputDir)
|
|
if err != nil {
|
|
if !*Silent {
|
|
ColorError.Fprintln(os.Stderr, "determining output path failed")
|
|
}
|
|
os.Exit(1)
|
|
}
|
|
|
|
if _, err := exec.LookPath("go"); err != nil {
|
|
if !*Silent {
|
|
ColorError.Fprintln(os.Stderr, "go not found in PATH. compilation not possible")
|
|
}
|
|
os.Exit(1)
|
|
}
|
|
|
|
if err := FillCompileConfigs(); err != nil {
|
|
if !*Silent {
|
|
ColorError.Fprintln(os.Stderr, fmt.Errorf("target architectures could not be determined: %w", err))
|
|
}
|
|
os.Exit(1)
|
|
}
|
|
|
|
if _, err := os.Stat(filepath.Join(ModulePath, "go.mod")); errors.Is(err, os.ErrNotExist) {
|
|
if !*Silent {
|
|
ColorError.Fprintf(os.Stderr, "no Go module found at '%s'\n", ModulePath)
|
|
}
|
|
os.Exit(1)
|
|
}
|
|
|
|
if err := DetermineProjectName(); err != nil {
|
|
if !*Silent {
|
|
ColorError.Fprintln(os.Stderr, fmt.Errorf("project name could not be determined: %w", err))
|
|
}
|
|
os.Exit(1)
|
|
}
|
|
|
|
if err := os.MkdirAll(*OutputDir, 0744); err != nil {
|
|
if !*Silent {
|
|
ColorError.Fprintln(os.Stderr, fmt.Errorf("output folder '%s' could not be made: %w", *OutputDir, err))
|
|
}
|
|
os.Exit(1)
|
|
}
|
|
|
|
if err := CheckDirWritable(*OutputDir); err != nil {
|
|
if !*Silent {
|
|
ColorError.Fprintf(os.Stderr, "output folder '%s' has insufficient permissions\n", *OutputDir)
|
|
}
|
|
os.Exit(1)
|
|
}
|
|
|
|
if !*NoCompress {
|
|
if _, err := exec.LookPath("upx"); err != nil {
|
|
ColorWarn.Fprintln(os.Stderr, "upx not found in PATH. file compression not possible")
|
|
*NoCompress = true
|
|
}
|
|
}
|
|
}
|