Skip to content

Instantly share code, notes, and snippets.

@freeeve
Last active August 29, 2015 14:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save freeeve/58190e5a09e70c8bca08 to your computer and use it in GitHub Desktop.
Save freeeve/58190e5a09e70c8bca08 to your computer and use it in GitHub Desktop.
package main
import (
"bytes"
"io/ioutil"
"log"
"os"
"os/exec"
)
func main() {
custom, err := ioutil.ReadFile("_gen.go")
if err != nil {
log.Println(err)
}
err = os.Mkdir("._gen", 0777)
if err != nil {
log.Println(err)
}
err = ioutil.WriteFile("._gen/gen_custom.go", custom, 0644)
if err != nil {
log.Fatal(err)
}
err = ioutil.WriteFile("._gen/gen.go", []byte(gentemplate), 0644)
if err != nil {
log.Fatal(err)
}
cmd := exec.Command("go", "build", "-o", "._gen/gen", "._gen/gen.go", "._gen/gen_custom.go")
var out bytes.Buffer
cmd.Stderr = &out
err = cmd.Run()
if err != nil {
log.Println(out.String())
log.Fatal(err)
}
cmd = exec.Command("._gen/gen", os.Args...)
cmd.Stderr = &out
err = cmd.Run()
if err != nil {
log.Println(out.String())
log.Fatal(err)
}
err = os.RemoveAll("._gen")
if err != nil {
log.Println(err)
}
}
const gentemplate = `package main
import (
"github.com/clipperhouse/typewriter"
_ "github.com/clipperhouse/typewriters/genwriter"
_ "github.com/clipperhouse/typewriters/container"
)
func main() {
app, err := typewriter.NewApp("+gen")
if err != nil {
panic(err)
}
app.WriteAll()
}
`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment