Skip to content

Commit 1173b10

Browse files
committed
implement genpkg sub command
1 parent 2cad0a2 commit 1173b10

File tree

11 files changed

+103
-58
lines changed

11 files changed

+103
-58
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 (
4+
"flag"
5+
)
6+
7+
var modulePath string
8+
var verbose bool
9+
10+
func addFlags(fs *flag.FlagSet) {
11+
fs.BoolVar(&verbose, "v", false, "enable verbose output")
12+
fs.StringVar(&modulePath, "mod", "", "the module path of the generated code,if not set,will not init a new module")
13+
}

cmd/internal/genpkg/genpkg.go

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
package genpkg
22

33
import (
4+
"bytes"
45
"fmt"
6+
"io"
7+
"os"
8+
"os/exec"
59

610
"github.com/goplus/llcppg/cmd/internal/base"
11+
"github.com/goplus/llcppg/config"
712
)
813

914
var Cmd = &base.Command{
@@ -13,8 +18,53 @@ var Cmd = &base.Command{
1318

1419
func init() {
1520
Cmd.Run = runCmd
21+
addFlags(&Cmd.Flag)
1622
}
1723

1824
func runCmd(cmd *base.Command, args []string) {
19-
fmt.Println("todo genpkg")
25+
err := cmd.Flag.Parse(args)
26+
if err != nil {
27+
panic(err)
28+
}
29+
30+
cfgFile := config.LLCPPG_CFG
31+
32+
config.HandleMarshalConfigFile(cfgFile, func(b []byte, err error) {
33+
34+
base.Check(err)
35+
36+
r, w := io.Pipe()
37+
38+
go func() {
39+
defer w.Close()
40+
llcppsigfetchCmdArgs := make([]string, 0)
41+
if verbose {
42+
llcppsigfetchCmdArgs = append(llcppsigfetchCmdArgs, "-v")
43+
}
44+
if cmd.Flag.NArg() == 0 {
45+
llcppsigfetchCmdArgs = append(llcppsigfetchCmdArgs, "-")
46+
}
47+
fmt.Println(llcppsigfetchCmdArgs)
48+
llcppsigfetchCmd := exec.Command("llcppsigfetch", llcppsigfetchCmdArgs...)
49+
llcppsigfetchCmd.Stdin = bytes.NewReader(b)
50+
llcppsigfetchCmd.Stdout = w
51+
llcppsigfetchCmd.Stderr = os.Stderr
52+
err = llcppsigfetchCmd.Run()
53+
base.Check(err)
54+
}()
55+
56+
gogensigCmdArgs := make([]string, 0)
57+
if len(modulePath) > 0 {
58+
gogensigCmdArgs = append(gogensigCmdArgs, fmt.Sprintf("-mod=%s", modulePath))
59+
}
60+
if verbose {
61+
gogensigCmdArgs = append(gogensigCmdArgs, "-v")
62+
}
63+
gogensigCmd := exec.Command("gogensig", gogensigCmdArgs...)
64+
gogensigCmd.Stdin = r
65+
gogensigCmd.Stdout = os.Stdout
66+
gogensigCmd.Stderr = os.Stderr
67+
err = gogensigCmd.Run()
68+
base.Check(err)
69+
})
2070
}

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/internal/runtest/runtest.go

Lines changed: 0 additions & 20 deletions
This file was deleted.

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
}

cmd/llcppg/runtest_cmd.gox

Lines changed: 0 additions & 11 deletions
This file was deleted.

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

0 commit comments

Comments
 (0)