github.com/metux/go-metabuild@v0.0.0-20240118143255-d9ed5ab697f9/util/CSource.go (about) 1 package util 2 3 import ( 4 "os" 5 "strings" 6 ) 7 8 type CSource struct { 9 Includes []string 10 MainBody strings.Builder 11 Text strings.Builder 12 } 13 14 func (cs *CSource) AddInclude(i string) { 15 cs.Includes = append(cs.Includes, i) 16 } 17 18 func (cs *CSource) AddIncludes(i []string) { 19 for _, x := range i { 20 cs.AddInclude(x) 21 } 22 } 23 24 func (cs *CSource) Write(fn string) error { 25 f, err := os.Create(fn) 26 if err != nil { 27 return err 28 } 29 defer f.Close() 30 31 // write includes 32 for _, hdr := range cs.Includes { 33 f.WriteString("#include <") 34 f.WriteString(hdr) 35 f.WriteString(">\n") 36 } 37 38 f.WriteString(cs.Text.String()) 39 40 // write main function 41 f.WriteString("int main() {\n") 42 f.WriteString(cs.MainBody.String()) 43 f.WriteString("\n}\n") 44 45 return nil 46 }