summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakob Borg <jakob@nym.se>2014-03-17 22:56:07 +0100
committerJakob Borg <jakob@nym.se>2014-03-17 22:56:07 +0100
commit222272b75cd3936a4d984eb07f504a359377df98 (patch)
treef399d06a985b989c09d364288a14ef258eceb0f6
parentef8cf3bc300acb5caddc6db6e44d7a73b54d4e64 (diff)
Faster and more portable assets generator
-rwxr-xr-xassets.sh27
-rwxr-xr-xbuild.sh2
-rw-r--r--cmd/assets/assets.go86
3 files changed, 87 insertions, 28 deletions
diff --git a/assets.sh b/assets.sh
deleted file mode 100755
index 76cfea21e3..0000000000
--- a/assets.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/env bash
-
-cat <<EOT
-package auto
-
-import "compress/gzip"
-import "bytes"
-import "io/ioutil"
-
-var Assets = make(map[string][]byte)
-
-func init() {
- var data []byte
- var gr *gzip.Reader
-EOT
-
-cd gui
-for f in $(find . -type f) ; do
- f="${f#./}"
- echo "gr, _ = gzip.NewReader(bytes.NewBuffer([]byte{"
- gzip -n -c $f | od -vt x1 | sed 's/^[0-9a-f]*//' | sed 's/\([0-9a-f][0-9a-f]\)/0x\1,/g'
- echo "}))"
- echo "data, _ = ioutil.ReadAll(gr)"
- echo "Assets[\"$f\"] = data"
-done
-echo "}"
-
diff --git a/build.sh b/build.sh
index 0f5dcd7611..e4fb9cf6ca 100755
--- a/build.sh
+++ b/build.sh
@@ -10,7 +10,7 @@ build() {
}
prepare() {
- ./assets.sh | gofmt > auto/gui.files.go
+ go run cmd/assets/assets.go gui > auto/gui.files.go
go get -d
}
diff --git a/cmd/assets/assets.go b/cmd/assets/assets.go
new file mode 100644
index 0000000000..081a112164
--- /dev/null
+++ b/cmd/assets/assets.go
@@ -0,0 +1,86 @@
+package main
+
+import (
+ "bytes"
+ "compress/gzip"
+ "flag"
+ "fmt"
+ "go/format"
+ "io"
+ "os"
+ "path/filepath"
+ "text/template"
+)
+
+var tpl = template.Must(template.New("assets").Parse(`package auto
+
+import (
+ "bytes"
+ "compress/gzip"
+ "encoding/hex"
+ "io/ioutil"
+)
+
+var Assets = make(map[string][]byte)
+
+func init() {
+ var bs []byte
+ var gr *gzip.Reader
+{{range $asset := .assets}}
+ bs, _ = hex.DecodeString("{{$asset.HexData}}")
+ gr, _ = gzip.NewReader(bytes.NewBuffer(bs))
+ bs, _ = ioutil.ReadAll(gr)
+ Assets["{{$asset.Name}}"] = bs
+{{end}}
+}
+`))
+
+type asset struct {
+ Name string
+ HexData string
+}
+
+var assets []asset
+
+func walkerFor(basePath string) filepath.WalkFunc {
+ return func(name string, info os.FileInfo, err error) error {
+ if err != nil {
+ return err
+ }
+
+ if info.Mode().IsRegular() {
+ fd, err := os.Open(name)
+ if err != nil {
+ return err
+ }
+
+ var buf bytes.Buffer
+ gw := gzip.NewWriter(&buf)
+ io.Copy(gw, fd)
+ fd.Close()
+ gw.Flush()
+ gw.Close()
+
+ name, _ = filepath.Rel(basePath, name)
+ assets = append(assets, asset{
+ Name: name,
+ HexData: fmt.Sprintf("%x", buf.Bytes()),
+ })
+ }
+
+ return nil
+ }
+}
+
+func main() {
+ flag.Parse()
+
+ filepath.Walk(flag.Arg(0), walkerFor(flag.Arg(0)))
+ var buf bytes.Buffer
+ tpl.Execute(&buf, map[string][]asset{"assets": assets})
+ bs, err := format.Source(buf.Bytes())
+ if err != nil {
+ panic(err)
+ }
+ os.Stdout.Write(bs)
+}