package main import ( "io/ioutil" "os" "path/filepath" "strings" ) func main() { cwd, err := os.Getwd() if err != nil { panic(err) } out, _ := os.Create("licenses.go") out.Write([]byte("package main \n\n//THIS FILE IS AUTOMATICALLY GENERATED BY `go generate` DO NOT EDIT!\n\nvar licenseString=`")) out.WriteString("LICENSES\n") out.WriteString("========\n") defer out.Close() filepath.Walk(cwd, func(path string, info os.FileInfo, err error) error { if err != nil { panic(err) } if strings.HasPrefix("LICENSE", info.Name()) { rel, err := filepath.Rel(cwd, path) if err != nil { panic(err) } dir := filepath.Dir(rel) out.WriteString("FILES: " + dir + "\n") c, err := ioutil.ReadFile(path) str := string(c) str = strings.ReplaceAll(str, "`", "`"+" + \"`\" + `") // escape backticks in license text for go src if err != nil { panic(err) } out.WriteString(str) out.WriteString("\n\n") } return nil }) out.Write([]byte("`\n")) }