From 1881006b0f0a31290a6d11aeb4228e1d6e2da1c0 Mon Sep 17 00:00:00 2001 From: Derek Parker Date: Thu, 1 Nov 2018 13:37:02 -0700 Subject: [PATCH] Initial spec file --- delve.spec | 94 +++++++++++++++++ eval-symlink-in-test.patch | 29 ++++++ test-fixture-vendor-to-internal.patch | 142 ++++++++++++++++++++++++++ 3 files changed, 265 insertions(+) create mode 100644 delve.spec create mode 100644 eval-symlink-in-test.patch create mode 100644 test-fixture-vendor-to-internal.patch diff --git a/delve.spec b/delve.spec new file mode 100644 index 0000000..bddcced --- /dev/null +++ b/delve.spec @@ -0,0 +1,94 @@ +# Run tests in check section +%bcond_without check + +# https://github.com/derekparker/delve +%global goipath github.com/derekparker/delve +Version: 1.1.0 + +%global common_description %{expand: +Delve is a debugger for the Go programming language. The goal of the project +is to provide a simple, full featured debugging tool for Go. Delve should be +easy to invoke and easy to use. Chances are if you're using a debugger, things +aren't going your way. With that in mind, Delve should stay out of your way as +much as possible.} + +%gometa + +Name: delve +Release: 1%{?dist} +Summary: A debugger for the Go programming language +# Detected licences +# - Expat License at 'LICENSE' +License: MIT +URL: %{gourl} +Source0: %{gosource} + +Patch1: ./eval-symlink-in-test.patch +Patch2: ./test-fixture-vendor-to-internal.patch + +BuildRequires: golang(github.com/cosiner/argv) +BuildRequires: golang(github.com/mattn/go-isatty) +BuildRequires: golang(github.com/peterh/liner) +BuildRequires: golang(github.com/pkg/profile) +BuildRequires: golang(github.com/sirupsen/logrus) +BuildRequires: golang(github.com/spf13/cobra) +BuildRequires: golang(golang.org/x/arch/x86/x86asm) +BuildRequires: golang(golang.org/x/sys/unix) +BuildRequires: golang(golang.org/x/sys/windows) +BuildRequires: golang(gopkg.in/yaml.v2) + +%description +%{common_description} + + +%package -n %{goname}-devel +Summary: %{summary} +BuildArch: noarch + +%description -n %{goname}-devel +%{common_description} + +This package contains library source intended for +building other packages which use import path with +%{goipath} prefix. + + +%prep +%forgesetup + +%patch1 -p1 +%patch2 -p1 + +rm -rf vendor/ + + +%build +%gobuildroot +%gobuild -o _bin/dlv %{goipath}/cmd/dlv + + +%install +%goinstall +install -Dpm 0755 _bin/dlv %{buildroot}%{_bindir}/dlv + + +%if %{with check} +%check +%gochecks +%endif + + +%files +%license LICENSE +%doc CONTRIBUTING.md CHANGELOG.md +%doc Documentation/* +%{_bindir}/dlv + + +%files -n %{goname}-devel -f devel.file-list +%license LICENSE + + +%changelog +* Fri Nov 2 2018 Derek Parker - 1.1.0-1 +- First package for Fedora diff --git a/eval-symlink-in-test.patch b/eval-symlink-in-test.patch new file mode 100644 index 0000000..58aa079 --- /dev/null +++ b/eval-symlink-in-test.patch @@ -0,0 +1,29 @@ +From de6682d29149cc8f2131d295d68a5e3d65102590 Mon Sep 17 00:00:00 2001 +From: Derek Parker +Date: Fri, 4 Jan 2019 02:03:16 -0800 +Subject: [PATCH] pkg/proc/test: Eval symlinks for test source (#1452) + +Some build environments (such as when building RPMs) enjoy symlinking +things. This unfortunately causes our tests to fail as we record the +path of fixtures and use that when looking up file:line information. +However, the debug info in the binary records the original file +location, not the location of the symlink. +--- + pkg/proc/test/support.go | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/pkg/proc/test/support.go b/pkg/proc/test/support.go +index 733bad85..5f4a4127 100644 +--- a/pkg/proc/test/support.go ++++ b/pkg/proc/test/support.go +@@ -150,6 +150,10 @@ func BuildFixture(name string, flags BuildFlags) Fixture { + + source, _ := filepath.Abs(path) + source = filepath.ToSlash(source) ++ sympath, err := filepath.EvalSymlinks(source) ++ if err == nil { ++ source = strings.Replace(sympath, "\\", "/", -1) ++ } + + fixture := Fixture{Name: name, Path: tmpfile, Source: source} + diff --git a/test-fixture-vendor-to-internal.patch b/test-fixture-vendor-to-internal.patch new file mode 100644 index 0000000..774de87 --- /dev/null +++ b/test-fixture-vendor-to-internal.patch @@ -0,0 +1,142 @@ +From 73d636f7d7adf159e26f35f37aba514f647492ce Mon Sep 17 00:00:00 2001 +From: aarzilli +Date: Tue, 6 Nov 2018 12:11:51 +0100 +Subject: [PATCH] tests: rename _fixtures/vendor to _fixtures/internal + +Some tests used a fake vendor directory placed inside _fixtures to +import some support packages. +In go.mod mode vendor directory are only supported on the root of the +project, which breaks some of our tests. +Since vendor directories outside the root of the project are so rare +anyway it's possible that a future version of go will stop supporting +it even in GOPATH mode. +Also it was weird and unnecessary in the first place anyawy. +--- + _fixtures/consts.go | 2 +- + _fixtures/dotpackagesiface.go | 4 ++-- + _fixtures/{vendor => internal}/dir.io/dir.go | 0 + .../{vendor => internal}/dir.io/io.io/io.go | 0 + .../{vendor => internal}/dir0/pkg/main.go | 0 + .../dir0/renamedpackage/main.go | 0 + .../{vendor => internal}/dir1/pkg/main.go | 0 + _fixtures/pkgrenames.go | 6 ++--- + service/test/variables_test.go | 24 +++++++++---------- + 9 files changed, 18 insertions(+), 18 deletions(-) + rename _fixtures/{vendor => internal}/dir.io/dir.go (100%) + rename _fixtures/{vendor => internal}/dir.io/io.io/io.go (100%) + rename _fixtures/{vendor => internal}/dir0/pkg/main.go (100%) + rename _fixtures/{vendor => internal}/dir0/renamedpackage/main.go (100%) + rename _fixtures/{vendor => internal}/dir1/pkg/main.go (100%) + +diff --git a/_fixtures/consts.go b/_fixtures/consts.go +index 531a27db..54bfa8b2 100644 +--- a/_fixtures/consts.go ++++ b/_fixtures/consts.go +@@ -1,8 +1,8 @@ + package main + + import ( +- "dir0/pkg" + "fmt" ++ "github.com/derekparker/delve/_fixtures/internal/dir0/pkg" + "runtime" + ) + +diff --git a/_fixtures/dotpackagesiface.go b/_fixtures/dotpackagesiface.go +index 5ad147c2..5952ebeb 100644 +--- a/_fixtures/dotpackagesiface.go ++++ b/_fixtures/dotpackagesiface.go +@@ -1,9 +1,9 @@ + package main + + import ( +- "dir.io" +- "dir.io/io.io" + "fmt" ++ "github.com/derekparker/delve/_fixtures/internal/dir.io" ++ "github.com/derekparker/delve/_fixtures/internal/dir.io/io.io" + "runtime" + ) + +diff --git a/_fixtures/vendor/dir.io/dir.go b/_fixtures/internal/dir.io/dir.go +similarity index 100% +rename from _fixtures/vendor/dir.io/dir.go +rename to _fixtures/internal/dir.io/dir.go +diff --git a/_fixtures/vendor/dir.io/io.io/io.go b/_fixtures/internal/dir.io/io.io/io.go +similarity index 100% +rename from _fixtures/vendor/dir.io/io.io/io.go +rename to _fixtures/internal/dir.io/io.io/io.go +diff --git a/_fixtures/vendor/dir0/pkg/main.go b/_fixtures/internal/dir0/pkg/main.go +similarity index 100% +rename from _fixtures/vendor/dir0/pkg/main.go +rename to _fixtures/internal/dir0/pkg/main.go +diff --git a/_fixtures/vendor/dir0/renamedpackage/main.go b/_fixtures/internal/dir0/renamedpackage/main.go +similarity index 100% +rename from _fixtures/vendor/dir0/renamedpackage/main.go +rename to _fixtures/internal/dir0/renamedpackage/main.go +diff --git a/_fixtures/vendor/dir1/pkg/main.go b/_fixtures/internal/dir1/pkg/main.go +similarity index 100% +rename from _fixtures/vendor/dir1/pkg/main.go +rename to _fixtures/internal/dir1/pkg/main.go +diff --git a/_fixtures/pkgrenames.go b/_fixtures/pkgrenames.go +index d315e6b7..6e0882dc 100644 +--- a/_fixtures/pkgrenames.go ++++ b/_fixtures/pkgrenames.go +@@ -8,9 +8,9 @@ import ( + pkg1 "go/ast" + pkg2 "net/http" + +- "dir0/pkg" +- "dir0/renamedpackage" +- dir1pkg "dir1/pkg" ++ "github.com/derekparker/delve/_fixtures/internal/dir0/pkg" ++ "github.com/derekparker/delve/_fixtures/internal/dir0/renamedpackage" ++ dir1pkg "github.com/derekparker/delve/_fixtures/internal/dir1/pkg" + ) + + func main() { +diff --git a/service/test/variables_test.go b/service/test/variables_test.go +index 83fb6e7a..0e29202a 100644 +--- a/service/test/variables_test.go ++++ b/service/test/variables_test.go +@@ -978,20 +978,20 @@ func TestPackageRenames(t *testing.T) { + {"amap", true, "interface {}(map[go/ast.BadExpr]net/http.Request) [{From: 2, To: 3}: *{Method: \"othermethod\", …", "", "interface {}", nil}, + + // Package name that doesn't match import path +- {"iface3", true, `interface {}(*github.com/derekparker/delve/_fixtures/vendor/dir0/renamedpackage.SomeType) *{A: true}`, "", "interface {}", nil}, ++ {"iface3", true, `interface {}(*github.com/derekparker/delve/_fixtures/internal/dir0/renamedpackage.SomeType) *{A: true}`, "", "interface {}", nil}, + + // Interfaces to anonymous types + {"amap2", true, "interface {}(*map[go/ast.BadExpr]net/http.Request) *[{From: 2, To: 3}: *{Method: \"othermethod\", …", "", "interface {}", nil}, +- {"dir0someType", true, "interface {}(*github.com/derekparker/delve/_fixtures/vendor/dir0/pkg.SomeType) *{X: 3}", "", "interface {}", nil}, +- {"dir1someType", true, "interface {}(github.com/derekparker/delve/_fixtures/vendor/dir1/pkg.SomeType) {X: 1, Y: 2}", "", "interface {}", nil}, +- {"amap3", true, "interface {}(map[github.com/derekparker/delve/_fixtures/vendor/dir0/pkg.SomeType]github.com/derekparker/delve/_fixtures/vendor/dir1/pkg.SomeType) [{X: 4}: {X: 5, Y: 6}, ]", "", "interface {}", nil}, +- {"anarray", true, `interface {}([2]github.com/derekparker/delve/_fixtures/vendor/dir0/pkg.SomeType) [{X: 1},{X: 2}]`, "", "interface {}", nil}, +- {"achan", true, `interface {}(chan github.com/derekparker/delve/_fixtures/vendor/dir0/pkg.SomeType) chan github.com/derekparker/delve/_fixtures/vendor/dir0/pkg.SomeType 0/0`, "", "interface {}", nil}, +- {"aslice", true, `interface {}([]github.com/derekparker/delve/_fixtures/vendor/dir0/pkg.SomeType) [{X: 3},{X: 4}]`, "", "interface {}", nil}, +- {"afunc", true, `interface {}(func(github.com/derekparker/delve/_fixtures/vendor/dir0/pkg.SomeType, github.com/derekparker/delve/_fixtures/vendor/dir1/pkg.SomeType)) main.main.func1`, "", "interface {}", nil}, +- {"astruct", true, `interface {}(*struct { A github.com/derekparker/delve/_fixtures/vendor/dir1/pkg.SomeType; B github.com/derekparker/delve/_fixtures/vendor/dir0/pkg.SomeType }) *{A: github.com/derekparker/delve/_fixtures/vendor/dir1/pkg.SomeType {X: 1, Y: 2}, B: github.com/derekparker/delve/_fixtures/vendor/dir0/pkg.SomeType {X: 3}}`, "", "interface {}", nil}, +- {"astruct2", true, `interface {}(*struct { github.com/derekparker/delve/_fixtures/vendor/dir1/pkg.SomeType; X int }) *{SomeType: github.com/derekparker/delve/_fixtures/vendor/dir1/pkg.SomeType {X: 1, Y: 2}, X: 10}`, "", "interface {}", nil}, +- {"iface2iface", true, `interface {}(*interface { AMethod(int) int; AnotherMethod(int) int }) **github.com/derekparker/delve/_fixtures/vendor/dir0/pkg.SomeType {X: 4}`, "", "interface {}", nil}, ++ {"dir0someType", true, "interface {}(*github.com/derekparker/delve/_fixtures/internal/dir0/pkg.SomeType) *{X: 3}", "", "interface {}", nil}, ++ {"dir1someType", true, "interface {}(github.com/derekparker/delve/_fixtures/internal/dir1/pkg.SomeType) {X: 1, Y: 2}", "", "interface {}", nil}, ++ {"amap3", true, "interface {}(map[github.com/derekparker/delve/_fixtures/internal/dir0/pkg.SomeType]github.com/derekparker/delve/_fixtures/internal/dir1/pkg.SomeType) [{X: 4}: {X: 5, Y: 6}, ]", "", "interface {}", nil}, ++ {"anarray", true, `interface {}([2]github.com/derekparker/delve/_fixtures/internal/dir0/pkg.SomeType) [{X: 1},{X: 2}]`, "", "interface {}", nil}, ++ {"achan", true, `interface {}(chan github.com/derekparker/delve/_fixtures/internal/dir0/pkg.SomeType) chan github.com/derekparker/delve/_fixtures/internal/dir0/pkg.SomeType 0/0`, "", "interface {}", nil}, ++ {"aslice", true, `interface {}([]github.com/derekparker/delve/_fixtures/internal/dir0/pkg.SomeType) [{X: 3},{X: 4}]`, "", "interface {}", nil}, ++ {"afunc", true, `interface {}(func(github.com/derekparker/delve/_fixtures/internal/dir0/pkg.SomeType, github.com/derekparker/delve/_fixtures/internal/dir1/pkg.SomeType)) main.main.func1`, "", "interface {}", nil}, ++ {"astruct", true, `interface {}(*struct { A github.com/derekparker/delve/_fixtures/internal/dir1/pkg.SomeType; B github.com/derekparker/delve/_fixtures/internal/dir0/pkg.SomeType }) *{A: github.com/derekparker/delve/_fixtures/internal/dir1/pkg.SomeType {X: 1, Y: 2}, B: github.com/derekparker/delve/_fixtures/internal/dir0/pkg.SomeType {X: 3}}`, "", "interface {}", nil}, ++ {"astruct2", true, `interface {}(*struct { github.com/derekparker/delve/_fixtures/internal/dir1/pkg.SomeType; X int }) *{SomeType: github.com/derekparker/delve/_fixtures/internal/dir1/pkg.SomeType {X: 1, Y: 2}, X: 10}`, "", "interface {}", nil}, ++ {"iface2iface", true, `interface {}(*interface { AMethod(int) int; AnotherMethod(int) int }) **github.com/derekparker/delve/_fixtures/internal/dir0/pkg.SomeType {X: 4}`, "", "interface {}", nil}, + + {`"dir0/pkg".A`, false, "0", "", "int", nil}, + {`"dir1/pkg".A`, false, "1", "", "int", nil}, +@@ -1010,7 +1010,7 @@ func TestPackageRenames(t *testing.T) { + if ver.Major > 0 && !ver.AfterOrEqual(goversion.GoVersion{1, 9, -1, 0, 0, ""}) { + // before 1.9 embedded struct field have fieldname == type + if tc.name == "astruct2" { +- tc.value = `interface {}(*struct { github.com/derekparker/delve/_fixtures/vendor/dir1/pkg.SomeType; X int }) *{github.com/derekparker/delve/_fixtures/vendor/dir1/pkg.SomeType: github.com/derekparker/delve/_fixtures/vendor/dir1/pkg.SomeType {X: 1, Y: 2}, X: 10}` ++ tc.value = `interface {}(*struct { github.com/derekparker/delve/_fixtures/internal/dir1/pkg.SomeType; X int }) *{github.com/derekparker/delve/_fixtures/internal/dir1/pkg.SomeType: github.com/derekparker/delve/_fixtures/internal/dir1/pkg.SomeType {X: 1, Y: 2}, X: 10}` + } + } + variable, err := evalVariable(p, tc.name, pnormalLoadConfig)