Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion cl/internal/convert/convert.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package convert

import (
"fmt"
"log"
"strings"

"github.com/goplus/llcppg/ast"
cfg "github.com/goplus/llcppg/cmd/gogensig/config"
llconfig "github.com/goplus/llcppg/config"
"github.com/goplus/mod/gopmod"
)

type dbgFlags = int
Expand Down Expand Up @@ -72,18 +74,22 @@ type Converter struct {
}

func NewConverter(config *Config) (*Converter, error) {
mod, err := gopmod.Load(config.OutputDir)
if err != nil {
return nil, fmt.Errorf("failed to load mod: %w", err)
}
pkg, err := NewPackage(&PackageConfig{
PkgBase: PkgBase{
PkgPath: config.PkgPath,
Deps: config.Deps,
Pubs: config.TypeMap,
},
Name: config.PkgName,
OutputDir: config.OutputDir,
ConvSym: config.ConvSym,
LibCommand: config.Libs,
TrimPrefixes: config.TrimPrefixes,
KeepUnderScore: config.KeepUnderScore,
Mod: mod,
})
if err != nil {
return nil, err
Expand Down
1 change: 0 additions & 1 deletion cl/internal/convert/convert_builtin_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ func basicConverter() *Converter {

func TestPkgFail(t *testing.T) {
converter := basicConverter()
defer os.RemoveAll(converter.GenPkg.conf.OutputDir)
t.Run("ProcessFail", func(t *testing.T) {
defer func() {
checkPanic(t, recover(), "File \"noexist.h\" not found in FileMap")
Expand Down
10 changes: 9 additions & 1 deletion cl/internal/convert/convert_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -309,7 +309,6 @@ func testFrom(t *testing.T, dir string, gen bool, validateFunc func(t *testing.T
}

func TestNewConvert(t *testing.T) {
// todo: remove this,convert will not read llcppg.cfg directly
cfg := &llcppg.Config{
Libs: "${pkg-config --libs xxx}",
}
Expand All @@ -330,6 +329,15 @@ func TestNewConvert(t *testing.T) {
}
}

func TestNewConverterFail(t *testing.T) {
_, err := convert.NewConverter(&convert.Config{
OutputDir: "/invalid/path",
})
if err == nil {
t.Fatal("Expected error, but got nil")
}
}

func TestModInitFail(t *testing.T) {
tempDir, err := os.MkdirTemp("", "gogensig-test")
if err != nil {
Expand Down
11 changes: 3 additions & 8 deletions cl/internal/convert/package.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ type Package struct {
type PackageConfig struct {
PkgBase
Name string // current package name
OutputDir string
Mod *gopmod.Module
ConvSym func(name *ast.Object, mangleName string) (goName string, err error)
GenConf *gogen.Config
TrimPrefixes []string
Expand Down Expand Up @@ -87,15 +87,10 @@ func NewPackage(config *PackageConfig) (*Package, error) {
config.Deps = append([]string{"c"}, config.Deps...)
}

mod, err := gopmod.Load(config.OutputDir)
if err != nil {
return nil, fmt.Errorf("failed to load mod: %w", err)
}

p.PkgInfo = NewPkgInfo(config.PkgPath, config.Deps, config.Pubs)

pkgManager := NewPkgDepLoader(mod, p.p)
err = pkgManager.InitDeps(p.PkgInfo)
pkgManager := NewPkgDepLoader(config.Mod, p.p)
err := pkgManager.InitDeps(p.PkgInfo)
if err != nil {
return nil, fmt.Errorf("failed to init deps: %w", err)
}
Expand Down
13 changes: 11 additions & 2 deletions cl/internal/convert/package_bulitin_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,22 @@ import (
"github.com/goplus/llcppg/cl/internal/cltest"
llcppg "github.com/goplus/llcppg/config"
ctoken "github.com/goplus/llcppg/token"
"github.com/goplus/mod/gopmod"
)

func emptyPkg() *Package {
mod, err := gopmod.Load(".")
if err != nil {
panic(err)
}
pkg, err := NewPackage(&PackageConfig{
PkgBase: PkgBase{
PkgPath: ".",
Pubs: make(map[string]string),
},
Name: "testpkg",
Mod: mod,
GenConf: &gogen.Config{},
OutputDir: "",
ConvSym: cltest.NewConvSym(),
LibCommand: "${pkg-config --libs xxx}",
})
Expand Down Expand Up @@ -156,17 +161,21 @@ func TestGetNameType(t *testing.T) {
}

func TestTrimPrefixes(t *testing.T) {
mod, err := gopmod.Load(".")
if err != nil {
panic(err)
}
pkg, err := NewPackage(&PackageConfig{
PkgBase: PkgBase{
PkgPath: ".",
Pubs: make(map[string]string),
},
Name: "testpkg",
GenConf: &gogen.Config{},
OutputDir: "",
ConvSym: cltest.NewConvSym(),
TrimPrefixes: []string{"prefix1", "prefix2"},
LibCommand: "${pkg-config --libs xxx}",
Mod: mod,
})
if err != nil {
t.Fatal("NewPackage failed:", err)
Expand Down
28 changes: 16 additions & 12 deletions cl/internal/convert/package_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package convert_test

import (
"bytes"
"fmt"
"os"
"strings"
"testing"
Expand Down Expand Up @@ -108,7 +109,6 @@ type U struct {

func TestToType(t *testing.T) {
pkg, err := createTestPkg(&convert.PackageConfig{
OutputDir: "",
LibCommand: "${pkg-config --libs libcjson}",
})
if err != nil {
Expand Down Expand Up @@ -151,9 +151,7 @@ func TestToType(t *testing.T) {
}

func TestToTypeFail(t *testing.T) {
pkg, err := createTestPkg(&convert.PackageConfig{
OutputDir: "",
})
pkg, err := createTestPkg(&convert.PackageConfig{})
if err != nil {
t.Fatal("NewPackage failed:", err)
}
Expand Down Expand Up @@ -1081,7 +1079,6 @@ type Foo func(a c.Int, b c.Int) c.Int
// Test Redefine error
func TestRedef(t *testing.T) {
pkg, err := createTestPkg(&convert.PackageConfig{
OutputDir: "",
ConvSym: cltest.NewConvSym(
cltest.SymbolEntry{
CppName: "Bar", MangleName: "Bar", GoName: "Bar",
Expand Down Expand Up @@ -1710,7 +1707,6 @@ type Foo struct {

func TestForwardDecl(t *testing.T) {
pkg, err := createTestPkg(&convert.PackageConfig{
OutputDir: "",
ConvSym: cltest.NewConvSym(
cltest.SymbolEntry{
CppName: "Bar", MangleName: "Bar", GoName: "Bar",
Expand Down Expand Up @@ -1857,6 +1853,13 @@ func createTestPkg(cfg *convert.PackageConfig) (*convert.Package, error) {
if cfg.LibCommand == "" {
cfg.LibCommand = "${pkg-config --libs xxx}"
}
if cfg.Mod == nil {
mod, err := gopmod.Load(".")
if err != nil {
return nil, fmt.Errorf("failed to load mod: %w", err)
}
cfg.Mod = mod
}
return convert.NewPackage(&convert.PackageConfig{
PkgBase: convert.PkgBase{
PkgPath: ".",
Expand All @@ -1865,11 +1868,11 @@ func createTestPkg(cfg *convert.PackageConfig) (*convert.Package, error) {
},
Name: "testpkg",
GenConf: &gogen.Config{},
OutputDir: cfg.OutputDir,
ConvSym: cfg.ConvSym,
LibCommand: cfg.LibCommand,
TrimPrefixes: cfg.TrimPrefixes,
KeepUnderScore: cfg.KeepUnderScore,
Mod: cfg.Mod,
})
}

Expand All @@ -1893,7 +1896,6 @@ func comparePackageOutput(t *testing.T, pkg *convert.Package, expect string) {

func TestTypeClean(t *testing.T) {
pkg, err := createTestPkg(&convert.PackageConfig{
OutputDir: "",
ConvSym: cltest.NewConvSym(
cltest.SymbolEntry{CppName: "Func1", MangleName: "Func1", GoName: "Func1"},
cltest.SymbolEntry{CppName: "Func2", MangleName: "Func2", GoName: "Func2"},
Expand Down Expand Up @@ -2036,7 +2038,6 @@ func TestImport(t *testing.T) {
})
t.Run("invalid pub file", func(t *testing.T) {
_, err := createTestPkg(&convert.PackageConfig{
OutputDir: ".",
PkgBase: convert.PkgBase{
Deps: []string{
"github.com/goplus/llcppg/cl/internal/convert/testdata/invalidpub",
Expand All @@ -2049,7 +2050,6 @@ func TestImport(t *testing.T) {
})
t.Run("invalid dep", func(t *testing.T) {
_, err := createTestPkg(&convert.PackageConfig{
OutputDir: ".",
PkgBase: convert.PkgBase{
Deps: []string{
"github.com/goplus/llcppg/cl/internal/convert/testdata/invaliddep",
Expand All @@ -2062,7 +2062,6 @@ func TestImport(t *testing.T) {
})
t.Run("same type register", func(t *testing.T) {
_, err := createTestPkg(&convert.PackageConfig{
OutputDir: ".",
PkgBase: convert.PkgBase{
Deps: []string{
"github.com/goplus/llcppg/cl/internal/convert/testdata/cjson",
Expand All @@ -2086,11 +2085,16 @@ func TestUnkownHfile(t *testing.T) {
}

func TestNewPackageLinkFail(t *testing.T) {
_, err := convert.NewPackage(&convert.PackageConfig{
mod, err := gopmod.Load(".")
if err != nil {
t.Fatal(err)
}
_, err = convert.NewPackage(&convert.PackageConfig{
PkgBase: convert.PkgBase{
PkgPath: ".",
},
Name: "testpkg",
Mod: mod,
GenConf: &gogen.Config{},
})
if err == nil {
Expand Down
7 changes: 6 additions & 1 deletion cl/internal/convert/type_builtin_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"github.com/goplus/gogen"
"github.com/goplus/llcppg/ast"
"github.com/goplus/llcppg/cl/internal/cltest"
"github.com/goplus/mod/gopmod"
)

func TestIdentRef(t *testing.T) {
Expand All @@ -19,15 +20,19 @@ func TestIdentRef(t *testing.T) {
}

func TestSubstObj(t *testing.T) {
mod, err := gopmod.Load(".")
if err != nil {
panic(err)
}
pkg, err := NewPackage(&PackageConfig{
PkgBase: PkgBase{
PkgPath: ".",
},
Name: "testpkg",
GenConf: &gogen.Config{},
OutputDir: "",
ConvSym: cltest.NewConvSym(),
LibCommand: "${pkg-config --libs xxx}",
Mod: mod,
})
if err != nil {
t.Fatal("NewPackage failed")
Expand Down
Loading