1
0
mirror of https://github.com/golang/go synced 2024-11-22 09:04:42 -07:00

misc/cgo/testso: enable test on windows

Depends on CL 8715043 and CL 8676050.
Fixes #5273.

R=alex.brainman, r
CC=gobot, golang-dev
https://golang.org/cl/8764043
This commit is contained in:
Shenghou Ma 2013-04-23 04:42:04 +08:00
parent c285789059
commit 8c72b81132
5 changed files with 57 additions and 1 deletions

14
misc/cgo/testso/cgoso.c Normal file
View File

@ -0,0 +1,14 @@
// Copyright 2013 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.
#include "_cgo_export.h"
#ifdef WIN32
extern void setCallback(void *);
void init() {
setCallback(goCallback);
}
#else
void init() {}
#endif

View File

@ -6,11 +6,13 @@ package cgosotest
/*
#cgo LDFLAGS: -L. -lcgosotest
void init(void);
void sofunc(void);
*/
import "C"
func Test() {
C.init()
C.sofunc()
}

View File

@ -4,8 +4,22 @@
// +build ignore
#ifdef WIN32
// A Windows DLL is unable to call an arbitrary function in
// the main executable. Work around that by making the main
// executable pass the callback function pointer to us.
void (*goCallback)(void);
__declspec(dllexport) void setCallback(void *f)
{
goCallback = (void (*)())f;
}
__declspec(dllexport) void sofunc(void);
#else
extern void goCallback(void);
void setCallback(void *f) { (void)f; }
#endif
void sofunc(void)
{
extern void goCallback(void);
goCallback();
}

18
misc/cgo/testso/test.bat Normal file
View File

@ -0,0 +1,18 @@
:: Copyright 2013 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.
@echo off
gcc -c cgoso_c.c
gcc -shared -o libcgosotest.dll cgoso_c.o
if not exist libcgosotest.dll goto fail
go build main.go
if not exist main.exe goto fail
main.exe
goto :end
:fail
set FAIL=1
:end
del /F cgoso_c.o libcgosotest.dll main.exe 2>NUL

View File

@ -87,6 +87,14 @@ echo # ..\misc\cgo\test
go test ..\misc\cgo\test
if errorlevel 1 goto fail
echo.
echo # ..\misc\cgo\testso
cd ..\misc\cgo\testso
set FAIL=0
call test.bat
cd ..\..\..\src
if %FAIL%==1 goto fail
echo.
:nocgo
echo # ..\doc\progs