Commit 6428a8b4 authored by Alex Brainman's avatar Alex Brainman

cmd/dist: add new misc/cgo/testsovar test

This change reintroduces CL 8523. CL 8523 was reverted because
it broke darwin and netbsd builds. Now that this test is part
of "go tool dist test" command we could skip OSes that fail.

Updates #10360

Change-Id: Iaaeb5b800126492f36415a439c333a218fe4ab67
Reviewed-on: https://go-review.googlesource.com/11119Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
parent 8e723109
// Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package cgosotest
// This test verifies that Go can access C variables
// in shared object file via cgo.
/*
// intentionally write the same LDFLAGS differently
// to test correct handling of LDFLAGS.
#cgo windows CFLAGS: -DIMPORT_DLL
#cgo linux LDFLAGS: -L. -lcgosotest
#cgo dragonfly LDFLAGS: -L. -l cgosotest
#cgo freebsd LDFLAGS: -L. -l cgosotest
#cgo openbsd LDFLAGS: -L. -l cgosotest
#cgo solaris LDFLAGS: -L. -lcgosotest
#cgo netbsd LDFLAGS: -L. libcgosotest.so
#cgo darwin LDFLAGS: -L. libcgosotest.dylib
#cgo windows LDFLAGS: -L. libcgosotest.dll
#include "cgoso_c.h"
const char* getVar() {
return exported_var;
}
*/
import "C"
import "fmt"
func Test() {
const want = "Hello world"
got := C.GoString(C.getVar())
if got != want {
panic(fmt.Sprintf("testExportedVar: got %q, but want %q", got, want))
}
got = C.GoString(C.exported_var)
if got != want {
panic(fmt.Sprintf("testExportedVar: got %q, but want %q", got, want))
}
}
// Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build ignore
const char *exported_var = "Hello world";
// Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build ignore
#ifdef WIN32
#if defined(EXPORT_DLL)
# define VAR __declspec(dllexport)
#elif defined(IMPORT_DLL)
# define VAR __declspec(dllimport)
#endif
#else
# define VAR
#endif
VAR const char *exported_var;
// Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build ignore
package main
import "."
func main() {
cgosotest.Test()
}
...@@ -414,8 +414,21 @@ func (t *tester) registerTests() { ...@@ -414,8 +414,21 @@ func (t *tester) registerTests() {
t.tests = append(t.tests, distTest{ t.tests = append(t.tests, distTest{
name: "testso", name: "testso",
heading: "../misc/cgo/testso", heading: "../misc/cgo/testso",
fn: t.cgoTestSO, fn: func() error {
return t.cgoTestSO("misc/cgo/testso")
},
}) })
if t.goos == "darwin" {
fmt.Println("Skipping misc/cgo/testsovar test. See issue 10360 for details.")
} else {
t.tests = append(t.tests, distTest{
name: "testsovar",
heading: "../misc/cgo/testsovar",
fn: func() error {
return t.cgoTestSO("misc/cgo/testsovar")
},
})
}
} }
if t.supportedBuildmode("c-archive") { if t.supportedBuildmode("c-archive") {
t.registerTest("testcarchive", "../misc/cgo/testcarchive", "./test.bash") t.registerTest("testcarchive", "../misc/cgo/testcarchive", "./test.bash")
...@@ -724,8 +737,8 @@ func (t *tester) cgoTestSOSupported() bool { ...@@ -724,8 +737,8 @@ func (t *tester) cgoTestSOSupported() bool {
return true return true
} }
func (t *tester) cgoTestSO() error { func (t *tester) cgoTestSO(testpath string) error {
dir := filepath.Join(t.goroot, "misc/cgo/testso") dir := filepath.Join(t.goroot, testpath)
// build shared object // build shared object
output, err := exec.Command("go", "env", "CC").Output() output, err := exec.Command("go", "env", "CC").Output()
...@@ -750,6 +763,7 @@ func (t *tester) cgoTestSO() error { ...@@ -750,6 +763,7 @@ func (t *tester) cgoTestSO() error {
args = append(args, "-undefined", "suppress", "-flat_namespace") args = append(args, "-undefined", "suppress", "-flat_namespace")
case "windows": case "windows":
ext = "dll" ext = "dll"
args = append(args, "-DEXPORT_DLL")
} }
sofname := "libcgosotest." + ext sofname := "libcgosotest." + ext
args = append(args, "-o", sofname, "cgoso_c.c") args = append(args, "-o", sofname, "cgoso_c.c")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment