github.com/adwpc/xmobile@v0.0.0-20231212131043-3f9720cf0e99/gen.go (about)

     1  // gen.go
     2  package main
     3  
     4  import (
     5  	"io/ioutil"
     6  	"math/rand"
     7  	"os"
     8  	"regexp"
     9  	"strings"
    10  	"time"
    11  )
    12  
    13  func replace(srcFile, dstFile, prefix string, keyMap []string) {
    14  	content, err := ioutil.ReadFile(srcFile)
    15  	if err != nil {
    16  		panic(err)
    17  	}
    18  	s := string(content)
    19  	for _, key := range keyMap {
    20  		dstStr := regexpReplace(key, prefix)
    21  		s = strings.ReplaceAll(s, key, dstStr)
    22  	}
    23  
    24  	f, err := os.Create(dstFile)
    25  	if err != nil {
    26  		panic(err)
    27  	}
    28  	defer f.Close()
    29  	_, err = f.WriteString(s)
    30  	if err != nil {
    31  		panic(err)
    32  	}
    33  }
    34  
    35  func regexpReplace(str, prefix string) string {
    36  	re, err := regexp.Compile("go")
    37  	if err != nil {
    38  		panic(err)
    39  	}
    40  	return re.ReplaceAllString(str, prefix+"_go")
    41  }
    42  
    43  func random(length int) string {
    44  	rand.Seed(time.Now().UnixNano())
    45  	chars := []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
    46  
    47  	var b strings.Builder
    48  	for i := 0; i < length; i++ {
    49  		b.WriteRune(chars[rand.Intn(len(chars))])
    50  	}
    51  	return b.String()
    52  }
    53  
    54  func replaceAll() {
    55  	prefix := random(6)
    56  
    57  	replace("bind/java/context_android.c", "bind/java/context_android.c", prefix, []string{"Java_go_Seq_setContext"})
    58  	replace("bind/java/Seq.java", "bind/java/Seq.java", prefix, []string{"package go;", "import go.Universe;", "System.loadLibrary(\"gojni\");"})
    59  	replace("bind/java/seq_android.c.support", "bind/java/seq_android.c.support", prefix, []string{"Java_go_Seq", "go/Seq"})
    60  	replace("bind/java/SeqBench.java", "bind/java/SeqBench.java", prefix, []string{"package go;"})
    61  	replace("bind/genjava.go", "bind/genjava.go", prefix, []string{"return \"go\""})
    62  	replace("cmd/gobind/gen.go", "cmd/gobind/gen.go", prefix, []string{"\"java\", \"go\""})
    63  	replace("cmd/gomobile/bind_androidapp.go", "cmd/gomobile/bind_androidapp.go", prefix, []string{"\"go.\"", "go.**", "\"libgojni.so\""})
    64  }
    65  
    66  func main() {
    67  	// for java symbol conflix
    68  	replaceAll()
    69  }
    70  
    71  //go:generate go run gen.go