// Copyright 2017 syzkaller project authors. All rights reserved. // Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. // +build package main import ( "bytes" "fmt" "io/ioutil" "os" "regexp" ) func main() { out, err := os.Create("generated.go") if err != nil { failf("%v", err) } defer out.Close() data, err := ioutil.ReadFile("../../executor/common.h") if err != nil { failf("%v", err) } for _, include := range []string{ "common_linux.h", "common_akaros.h", "common_bsd.h", "common_fuchsia.h", "common_windows.h", "common_test.h", "common_kvm_amd64.h", "common_kvm_arm64.h", "kvm.h", "kvm.S.h", } { contents, err := ioutil.ReadFile("../../executor/" + include) if err != nil { failf("%v", err) } replace := []byte("#include \"" + include + "\"") if bytes.Index(data, replace) == -1 { failf("can't fine %v include", include) } data = bytes.Replace(data, replace, contents, -1) } for _, remove := range []string{ "(\n|^)\\s*//.*", "\\s*//.*", } { data = regexp.MustCompile(remove).ReplaceAll(data, nil) } fmt.Fprintf(out, "// AUTOGENERATED FROM executor/common.h\n\n") fmt.Fprintf(out, "package csource\n\nvar commonHeader = `\n") out.Write(data) fmt.Fprintf(out, "`\n") } func failf(msg string, args ...interface{}) { fmt.Fprintf(os.Stderr, msg+"\n", args...) os.Exit(1) }