go-hep.org/x/hep@v0.38.1/ci/install-cxx-root.go (about) 1 // Copyright ©2019 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 //go:build ignore 6 7 // Command to install a given (binary) ROOT version. 8 package main 9 10 import ( 11 "flag" 12 "fmt" 13 "io" 14 "log" 15 "net/http" 16 "os" 17 "os/exec" 18 "path/filepath" 19 ) 20 21 func main() { 22 log.SetPrefix("") 23 log.SetFlags(0) 24 25 var ( 26 rvers = flag.String("root-version", "6.34.04", "ROOT version to install") 27 odir = flag.String("o", "", "install directory for ROOT") 28 ) 29 30 flag.Parse() 31 32 if *odir == "" { 33 *odir = fmt.Sprintf("root-%s", *rvers) 34 } 35 36 dst, err := filepath.Abs(*odir) 37 if err != nil { 38 log.Fatalf("could not get absolute path to %q: %+v", *odir, err) 39 } 40 switch _, err := os.Stat(filepath.Join(dst, "root-"+*rvers, "bin", "root.exe")); err { 41 case nil: 42 log.Printf("ROOT version %s already installed", *rvers) 43 return 44 default: 45 err = os.MkdirAll(dst, 0755) 46 if err != nil { 47 log.Fatalf("could not create directory %q: %+v", dst, err) 48 } 49 } 50 51 install(*rvers, dst) 52 } 53 54 func install(rvers, odir string) { 55 log.Printf("installing ROOT %s to: %q...", rvers, odir) 56 tmp, err := os.MkdirTemp("", "go-hep-build-") 57 if err != nil { 58 log.Fatalf("could not create top-level tmp dir: %+v", err) 59 } 60 defer os.RemoveAll(tmp) 61 62 oname := filepath.Join(tmp, "root.tar.gz") 63 targz, err := os.Create(oname) 64 if err != nil { 65 log.Fatalf("could not create ROOT archive destination file %q: %+v", oname, err) 66 } 67 defer targz.Close() 68 69 binURL := fmt.Sprintf("https://cern.ch/binet/go-hep/cern-root/root-%s-linux_amd64.tar.gz", rvers) 70 log.Printf("downloading %q...", binURL) 71 resp, err := http.Get(binURL) 72 if err != nil { 73 log.Fatalf("could not get ROOT %s from %v: %+v", rvers, binURL, err) 74 } 75 defer resp.Body.Close() 76 77 if resp.StatusCode != http.StatusOK { 78 log.Fatalf("could not get ROOT %s from %v: %v", rvers, binURL, resp.Status) 79 } 80 81 _, err = io.Copy(targz, resp.Body) 82 if err != nil { 83 log.Fatalf("could not download ROOT archive from %q: %+v", binURL, err) 84 } 85 86 err = targz.Close() 87 if err != nil { 88 log.Fatalf("could not close ROOT binary archive %q: %+v", oname, err) 89 } 90 91 log.Printf("decompressing...") 92 cmd := exec.Command("tar", "xf", oname) 93 cmd.Dir = odir 94 cmd.Stdout = os.Stdout 95 cmd.Stderr = os.Stderr 96 97 err = cmd.Run() 98 if err != nil { 99 log.Fatalf("could not untar ROOT binary archive: %+v", err) 100 } 101 }