build: allow builds without cgo

R=bradfitz, dsymonds, fshahriar
CC=golang-dev
https://golang.org/cl/4859043
This commit is contained in:
Russ Cox 2011-08-10 21:36:48 -04:00
parent 39fa2a5bf2
commit c02423902d
8 changed files with 53 additions and 41 deletions

View File

@ -121,6 +121,21 @@ HOST_CFLAGS=-I"$(GOROOT)/include" $(HOST_EXTRA_CFLAGS)
HOST_LDFLAGS=$(HOST_EXTRA_LDFLAGS)
PWD=$(shell pwd)
# Decide whether use of cgo is okay.
ifeq ($(CGO_ENABLED),)
# Default on...
CGO_ENABLED:=1
ifeq ($(GOARCH),arm) # ... but not on ARM
CGO_ENABLED:=0
endif
ifeq ($(GOOS),plan9) # ... and not on Plan 9
CGO_ENABLED:=0
endif
ifeq ($(GOOS),openbsd) # ... and not on OpenBSD
CGO_ENABLED:=0
endif
endif
# Make environment more standard.
LANG:=
LC_ALL:=C
@ -130,11 +145,12 @@ GREP_COLORS:=
export LANG LC_ALL LC_CTYPE GREP_OPTIONS GREP_COLORS
go-env:
@echo export GOARCH=$(GOARCH)
@echo export GOOS=$(GOOS)
@echo export GOHOSTARCH=$(GOHOSTARCH)
@echo export GOHOSTOS=$(GOHOSTOS)
@echo export O=$O
@echo export GOARCH="$(GOARCH)"
@echo export GOOS="$(GOOS)"
@echo export GOHOSTARCH="$(GOHOSTARCH)"
@echo export GOHOSTOS="$(GOHOSTOS)"
@echo export CGO_ENABLED="$(CGO_ENABLED)"
@echo export O="$O"
@echo export AS="$(AS)"
@echo export CC="$(CC)"
@echo export GC="$(GC)"

View File

@ -36,9 +36,13 @@ GOFILES_freebsd=\
sendfile_stub.go\
sock_bsd.go\
ifeq ($(CGO_ENABLED),1)
CGOFILES_freebsd=\
cgo_bsd.go\
cgo_unix.go\
cgo_unix.go
else
GOFILES_freebsd+=cgo_stub.go
endif
GOFILES_darwin=\
dnsclient_unix.go\
@ -53,9 +57,13 @@ GOFILES_darwin=\
sendfile_stub.go\
sock_bsd.go\
ifeq ($(CGO_ENABLED),1)
CGOFILES_darwin=\
cgo_bsd.go\
cgo_unix.go\
cgo_unix.go
else
GOFILES_darwin+=cgo_stub.go
endif
GOFILES_linux=\
dnsclient_unix.go\
@ -69,6 +77,14 @@ GOFILES_linux=\
sendfile_linux.go\
sock_linux.go\
ifeq ($(CGO_ENABLED),1)
CGOFILES_linux=\
cgo_linux.go\
cgo_unix.go
else
GOFILES_linux+=cgo_stub.go
endif
GOFILES_openbsd=\
dnsclient.go\
dnsconfig.go\
@ -86,15 +102,6 @@ GOFILES_plan9=\
lookup_unix.go\
sendfile_stub.go\
ifeq ($(GOARCH),arm)
# ARM has no cgo, so use the stubs.
GOFILES_linux+=cgo_stub.go
else
CGOFILES_linux=\
cgo_linux.go\
cgo_unix.go
endif
GOFILES_windows=\
file_windows.go\
interface_windows.go\

View File

@ -8,7 +8,7 @@ TARG=os/user
GOFILES=\
user.go\
ifneq ($(GOARCH),arm)
ifeq ($(CGO_ENABLED),1)
CGOFILES_linux=\
lookup_unix.go
CGOFILES_freebsd=\

View File

@ -25,6 +25,10 @@ static int mygetpwuid_r(int uid, struct passwd *pwd,
*/
import "C"
func init() {
implemented = true
}
// Lookup looks up a user by username. If the user cannot be found,
// the returned error is of type UnknownUserError.
func Lookup(username string) (*User, os.Error) {

View File

@ -9,6 +9,8 @@ import (
"strconv"
)
var implemented = false // set to true by lookup_unix.go's init
// User represents a user account.
type User struct {
Uid int // user id

View File

@ -13,8 +13,8 @@ import (
)
func skip(t *testing.T) bool {
if runtime.GOARCH == "arm" {
t.Logf("user: cgo not implemented on arm; skipping tests")
if !implemented {
t.Logf("user: not implemented; skipping tests")
return true
}

View File

@ -4,29 +4,12 @@
include ../../../Make.inc
ENABLED:=1
ifeq ($(GOARCH),arm)
ENABLED:=0
endif
ifeq ($(GOOS),plan9)
ENABLED:=0
endif
ifeq ($(GOOS),openbsd)
ENABLED:=0
endif
ifeq ($(DISABLE_CGO),1)
ENABLED:=0
endif
TARG=runtime/cgo
GOFILES=\
cgo.go\
ifeq ($(ENABLED),1)
ifeq ($(CGO_ENABLED),1)
# Unwarranted chumminess with Make.pkg's cgo rules.
# Do not try this at home.
@ -59,7 +42,7 @@ endif
include ../../../Make.pkg
ifeq ($(ENABLED),1)
ifeq ($(CGO_ENABLED),1)
_cgo_defun.c:
echo >$@

View File

@ -49,20 +49,20 @@ GOMAXPROCS=10 gomake testshort
time gomake test
) || exit $?
[ "$GOARCH" == arm ] ||
[ "$CGO_ENABLED" != 1 ] ||
[ "$GOHOSTOS" == windows ] ||
(xcd ../misc/cgo/stdio
gomake clean
./test.bash
) || exit $?
[ "$GOARCH" == arm ] ||
[ "$CGO_ENABLED" != 1 ] ||
(xcd ../misc/cgo/life
gomake clean
./test.bash
) || exit $?
[ "$GOARCH" == arm ] ||
[ "$CGO_ENABLED" != 1 ] ||
[ "$GOHOSTOS" == windows ] ||
(xcd ../misc/cgo/test
gomake clean