Skip to content

Commit 284c481

Browse files
committed
implement genpkg sub command
1 parent 2cad0a2 commit 284c481

File tree

9 files changed

+93
-28
lines changed

9 files changed

+93
-28
lines changed

cmd/internal/base/base.go

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -100,30 +100,14 @@ func (c *Command) Runnable() bool {
100100
return c.Run != nil
101101
}
102102

103-
// Usage is the usage-reporting function, filled in by package main
104-
// but here for reference by other packages.
105-
//
106-
// flag.Usage func()
107-
108-
// CmdName - "build", "install", "list", "mod tidy", etc.
109-
var CmdName string
110-
111-
// Main runs a command.
112-
func Main(c *Command, app string, args []string) {
113-
name := c.UsageLine
114-
if i := strings.Index(name, " ["); i >= 0 {
115-
c.UsageLine = app + name[i:]
116-
}
117-
c.Run(c, args)
118-
}
119-
120-
func RunCmdWithName(cmd *Command, args []string, name string) {
103+
func RunCmdWithName(cmd *Command, args []string, name string, out *io.PipeWriter) {
121104
err := cmd.Flag.Parse(args)
122-
check(err)
105+
Check(err)
123106

124107
cfgFile := config.LLCPPG_CFG
108+
125109
bytesOfConf, err := config.MarshalConfigFile(cfgFile)
126-
check(err)
110+
Check(err)
127111

128112
if cmd.Flag.NArg() == 0 {
129113
args = append(args, "-")
@@ -132,12 +116,32 @@ func RunCmdWithName(cmd *Command, args []string, name string) {
132116
nameCmd := exec.Command(name, args...)
133117
nameCmd.Stdin = bytes.NewReader(bytesOfConf)
134118
nameCmd.Stdout = os.Stdout
119+
if out != nil {
120+
nameCmd.Stdout = out
121+
}
135122
nameCmd.Stderr = os.Stderr
136123
nameCmd.Run()
137124
}
138125

139-
func check(err error) {
126+
func Check(err error) {
140127
if err != nil {
141128
panic(err)
142129
}
143130
}
131+
132+
// Usage is the usage-reporting function, filled in by package main
133+
// but here for reference by other packages.
134+
//
135+
// flag.Usage func()
136+
137+
// CmdName - "build", "install", "list", "mod tidy", etc.
138+
var CmdName string
139+
140+
// Main runs a command.
141+
func Main(c *Command, app string, args []string) {
142+
name := c.UsageLine
143+
if i := strings.Index(name, " ["); i >= 0 {
144+
c.UsageLine = app + name[i:]
145+
}
146+
c.Run(c, args)
147+
}

cmd/internal/genpkg/flags.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package genpkg
2+
3+
import "flag"
4+
5+
var modulePath string
6+
var cfgPath string
7+
var verbose bool
8+
9+
func addFlags(fs *flag.FlagSet) {
10+
fs.BoolVar(&verbose, "v", false, "enable verbose output")
11+
fs.StringVar(&modulePath, "mod", "", "the module path of the generated code,if not set,will not init a new module")
12+
fs.StringVar(&cfgPath, "cfg", "", "the llcppg config file")
13+
}

cmd/internal/genpkg/genpkg.go

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
package genpkg
22

33
import (
4-
"fmt"
4+
"bytes"
5+
"io"
6+
"os"
7+
"os/exec"
58

69
"github.com/goplus/llcppg/cmd/internal/base"
10+
"github.com/goplus/llcppg/config"
711
)
812

913
var Cmd = &base.Command{
@@ -13,8 +17,43 @@ var Cmd = &base.Command{
1317

1418
func init() {
1519
Cmd.Run = runCmd
20+
addFlags(&Cmd.Flag)
1621
}
1722

1823
func runCmd(cmd *base.Command, args []string) {
19-
fmt.Println("todo genpkg")
24+
err := cmd.Flag.Parse(args)
25+
if err != nil {
26+
panic(err)
27+
}
28+
29+
cfgFile := config.LLCPPG_CFG
30+
31+
config.HandleMarshalConfigFile(cfgFile, func(b []byte, err error) {
32+
33+
base.Check(err)
34+
35+
r, w := io.Pipe()
36+
37+
go func() {
38+
defer w.Close()
39+
llcppsigfetchCmdArgs := make([]string, len(args))
40+
copy(llcppsigfetchCmdArgs, args)
41+
if cmd.Flag.NArg() == 0 {
42+
llcppsigfetchCmdArgs = append(llcppsigfetchCmdArgs, "-")
43+
}
44+
llcppsigfetchCmd := exec.Command("llcppsigfetch", llcppsigfetchCmdArgs...)
45+
llcppsigfetchCmd.Stdin = bytes.NewReader(b)
46+
llcppsigfetchCmd.Stdout = w
47+
llcppsigfetchCmd.Stderr = os.Stderr
48+
err = llcppsigfetchCmd.Run()
49+
base.Check(err)
50+
}()
51+
52+
gogensigCmd := exec.Command("gogensig", args...)
53+
gogensigCmd.Stdin = r
54+
gogensigCmd.Stdout = os.Stdout
55+
gogensigCmd.Stderr = os.Stderr
56+
err = gogensigCmd.Run()
57+
base.Check(err)
58+
})
2059
}

cmd/internal/gensig/gensig.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,5 @@ func init() {
1515
}
1616

1717
func runCmd(cmd *base.Command, args []string) {
18-
base.RunCmdWithName(cmd, args, "llcppsigfetch")
18+
base.RunCmdWithName(cmd, args, "llcppsigfetch", nil)
1919
}

cmd/internal/gensym/gensym.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,5 @@ func init() {
1515
}
1616

1717
func runCmd(cmd *base.Command, args []string) {
18-
base.RunCmdWithName(cmd, args, "llcppsymg")
18+
base.RunCmdWithName(cmd, args, "llcppsymg", nil)
1919
}

cmd/llcppg/genpkg_cmd.gox

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ use "genpkg"
66

77
short "generate a go package by signature information of symbols"
88

9+
flagOff
10+
911
run args => {
1012
self.Cmd.Run self.Cmd, args
1113
}

config/parse.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,10 @@ func MarshalConfigFile(cfgFile string) ([]byte, error) {
6060
}
6161
return json.MarshalIndent(&conf, "", " ")
6262
}
63+
64+
func HandleMarshalConfigFile(cfgFile string, handle func(b []byte, err error)) {
65+
b, err := MarshalConfigFile(cfgFile)
66+
if handle != nil {
67+
handle(b, err)
68+
}
69+
}

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ go 1.23.0
55
require (
66
github.com/goplus/cobra v1.9.12 //gop:class
77
github.com/goplus/gogen v1.19.5
8-
github.com/goplus/lib v0.3.0
8+
github.com/goplus/lib v0.2.0
99
github.com/goplus/llgo v0.11.6-0.20250824004317-e4218f90d792
1010
github.com/goplus/mod v0.17.1
1111
github.com/qiniu/x v1.15.1

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ github.com/goplus/cobra v1.9.12 h1:0F9EdEbeGyITGz+mqoHoJ5KpUw97p1CkxV74IexHw5s=
22
github.com/goplus/cobra v1.9.12/go.mod h1:p4LhfNJDKEpiGjGiNn0crUXL5dUPA5DX2ztYpEJR34E=
33
github.com/goplus/gogen v1.19.5 h1:YWPwpRA1PusPhptv9jKg/XiN+AQGiAD9r6I86mJ3lR4=
44
github.com/goplus/gogen v1.19.5/go.mod h1:owX2e1EyU5WD+Nm6oH2m/GXjLdlBYcwkLO4wN8HHXZI=
5-
github.com/goplus/lib v0.3.0 h1:y0ZGb5Q/RikW1oMMB4Di7XIZIpuzh/7mlrR8HNbxXCA=
6-
github.com/goplus/lib v0.3.0/go.mod h1:SgJv3oPqLLHCu0gcL46ejOP3x7/2ry2Jtxu7ta32kp0=
5+
github.com/goplus/lib v0.2.0 h1:AjqkN1XK5H23wZMMlpaUYAMCDAdSBQ2NMFrLtSh7W4g=
6+
github.com/goplus/lib v0.2.0/go.mod h1:SgJv3oPqLLHCu0gcL46ejOP3x7/2ry2Jtxu7ta32kp0=
77
github.com/goplus/llgo v0.11.6-0.20250824004317-e4218f90d792 h1:EbF48QxuTaklX5MPwSuskZhu+dI9CHDIPW9S05uyhsM=
88
github.com/goplus/llgo v0.11.6-0.20250824004317-e4218f90d792/go.mod h1:GeJLuuvv1yU+XBX+45SITayPgj7tsHVntEY+LEFPx+I=
99
github.com/goplus/mod v0.17.1 h1:ITovxDcc5zbURV/Wrp3/SBsYLgC1KrxY6pq1zMM2V94=

0 commit comments

Comments
 (0)