diff options
author | William S Fulton <wsf@fultondesigns.co.uk> | 2016-01-28 20:03:54 +0000 |
---|---|---|
committer | William S Fulton <wsf@fultondesigns.co.uk> | 2016-01-28 20:03:54 +0000 |
commit | 2817e02e35d45501f3f7f87028f6b35c3e6f0491 (patch) | |
tree | 8466ad1476fecf48e892b8bc5f0a11c9d5f21cb3 | |
parent | 15b75a74c5c11e4bbdf75f7b525e16c7cfc792f5 (diff) | |
parent | 3a9f26045e136d0289d7e2ca28ee5c3fc7e543c3 (diff) | |
download | swig-2817e02e35d45501f3f7f87028f6b35c3e6f0491.tar.gz |
Merge branch 'ahnolds-clean_osx_go'
* ahnolds-clean_osx_go:
Go test-suite should now work on OSX
Don't write empty swigargs structs
Fail if nocgo version fails
Handle weak linking on OSX
Conflicts:
CHANGES.current
-rw-r--r-- | .travis.yml | 3 | ||||
-rw-r--r-- | CHANGES.current | 9 | ||||
-rw-r--r-- | Examples/test-suite/go/Makefile.in | 14 | ||||
-rw-r--r-- | Source/Modules/go.cxx | 9 |
4 files changed, 26 insertions, 9 deletions
diff --git a/.travis.yml b/.travis.yml index 97cfc2df1..2d174676f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -162,9 +162,6 @@ matrix: - compiler: gcc os: linux env: SWIGLANG=python SWIG_FEATURES=-O - - compiler: clang - os: osx - env: SWIGLANG=go before_install: - date -u - uname -a diff --git a/CHANGES.current b/CHANGES.current index 90297e917..2a0017822 100644 --- a/CHANGES.current +++ b/CHANGES.current @@ -8,6 +8,15 @@ Version 3.0.9 (in progress) 2016-01-27: steeve [Go] Ensure structs are properly packed between gc and GCC/clang. +2016-01-23: ahnolds + [Go] Enable support for the Go test-suite on OSX: + * The linker on OSX requires that all symbols (even weak symbols) + are defined at link time. Because the function _cgo_topofstack is + only defined starting in Go version 1.4, we explicitly mark it as + undefined for older versions of Go on OSX. + * Avoid writing empty swigargs structs, since empty structs are not + allowed in extern "C" blocks. + 2016-01-12: olly [Javascript] Look for "nodejs" as well as "node", as it's packaged as the former on Debian. diff --git a/Examples/test-suite/go/Makefile.in b/Examples/test-suite/go/Makefile.in index 7fb97eb02..01989b0d3 100644 --- a/Examples/test-suite/go/Makefile.in +++ b/Examples/test-suite/go/Makefile.in @@ -11,6 +11,8 @@ GO12 = @GO12@ GO13 = @GO13@ GO15 = @GO15@ GOC = @GOC@ +GOVERSIONOPTION = @GOVERSIONOPTION@ +host = @host@ SCRIPTSUFFIX = _runme.go GOCOMPILEARG = `if $(GO15); then echo tool compile; elif $(GO1); then echo tool $(GOC:c=g); fi` @@ -20,6 +22,8 @@ GOPACK = `if $(GO1) ; then echo go tool pack; else echo gopack; fi` GOOBJEXT = `if $(GO15); then echo o; else echo $(GOC:c=); fi` +OSXOLDGOLINKFLAGS = `if [ -n "\`$(GO) $(GOVERSIONOPTION) | grep -E 'go1($|.0|.1|.2|.3)'\`" ] && [ -n "\`echo $(host) | grep darwin\`" ]; then echo "-Wl,-U,__cgo_topofstack"; fi` + SO = @SO@ srcdir = @srcdir@ @@ -50,7 +54,7 @@ INCLUDES = -I$(abs_top_srcdir)/$(EXAMPLES)/$(TEST_SUITE) SWIG_LIB_DIR='$(SWIG_LIB_DIR)' SWIGEXE='$(SWIGEXE)' \ INCLUDES='$(INCLUDES)' SWIGOPT='$(SWIGOPT)' NOLINK=true \ TARGET='$(TARGETPREFIX)$*$(TARGETSUFFIX)' INTERFACEDIR='$(INTERFACEDIR)' INTERFACE='$*.i' \ - $(LANGUAGE)$(VARIANT)_cpp_nocgo; \ + $(LANGUAGE)$(VARIANT)_cpp_nocgo && \ $(run_testcase_cpp); \ fi @@ -63,7 +67,7 @@ INCLUDES = -I$(abs_top_srcdir)/$(EXAMPLES)/$(TEST_SUITE) SWIG_LIB_DIR='$(SWIG_LIB_DIR)' SWIGEXE='$(SWIGEXE)' \ INCLUDES='$(INCLUDES)' SWIGOPT='$(SWIGOPT)' NOLINK=true \ TARGET='$(TARGETPREFIX)$*$(TARGETSUFFIX)' INTERFACEDIR='$(INTERFACEDIR)' INTERFACE='$*.i' \ - $(LANGUAGE)$(VARIANT)_nocgo; \ + $(LANGUAGE)$(VARIANT)_nocgo && \ $(run_testcase); \ fi @@ -121,7 +125,7 @@ run_testcase = \ $(COMPILETOOL) $(GCCGO) -o $*_runme $(SCRIPTPREFIX)$*_runme.@OBJEXT@ $*.a; \ elif $(GO12) || $(GO13) || $(GO15); then \ $(COMPILETOOL) $(GO) $(GOCOMPILEARG) -I . $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) && \ - $(COMPILETOOL) $(GOTOOL) $(GOLD) -linkmode external -extld $(CC) -extldflags "$(CFLAGS)" -o $*_runme $(SCRIPTPREFIX)$*_runme.$(GOOBJEXT); \ + $(COMPILETOOL) $(GOTOOL) $(GOLD) -linkmode external -extld $(CC) -extldflags "$(CFLAGS) $(OSXOLDGOLINKFLAGS)" -o $*_runme $(SCRIPTPREFIX)$*_runme.$(GOOBJEXT); \ else \ $(COMPILETOOL) $(GO) $(GOCOMPILEARG) -I . $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) && \ $(COMPILETOOL) $(GOTOOL) $(GOLD) -L . -r $${GOROOT:-`go env GOROOT`}/pkg/$${GOOS:-`go env GOOS`}_$${GOARCH:-`go env GOARCH`}:. -o $*_runme $(SCRIPTPREFIX)$*_runme.$(GOOBJEXT); \ @@ -136,7 +140,7 @@ run_testcase_cpp = \ $(COMPILETOOL) $(GCCGO) -o $*_runme $(SCRIPTPREFIX)$*_runme.@OBJEXT@ $*.a -lstdc++; \ elif $(GO12) || $(GO13) || $(GO15); then \ $(COMPILETOOL) $(GO) $(GOCOMPILEARG) -I . $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) && \ - $(COMPILETOOL) $(GOTOOL) $(GOLD) -linkmode external -extld $(CXX) -extldflags "$(CXXFLAGS)" -o $*_runme $(SCRIPTPREFIX)$*_runme.$(GOOBJEXT); \ + $(COMPILETOOL) $(GOTOOL) $(GOLD) -linkmode external -extld $(CXX) -extldflags "$(CXXFLAGS) $(OSXOLDGOLINKFLAGS)" -o $*_runme $(SCRIPTPREFIX)$*_runme.$(GOOBJEXT); \ else \ $(COMPILETOOL) $(GO) $(GOCOMPILEARG) -I . $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) && \ $(COMPILETOOL) $(GOTOOL) $(GOLD) -L . -r $${GOROOT:-`go env GOROOT`}/pkg/$${GOOS:-`go env GOOS`}_$${GOARCH:-`go env GOARCH`}:. -o $*_runme $(SCRIPTPREFIX)$*_runme.$(GOOBJEXT); \ @@ -152,7 +156,7 @@ run_multi_testcase = \ $(COMPILETOOL) $(GCCGO) -o $*_runme $(SCRIPTPREFIX)$*_runme.@OBJEXT@ `for f in $$files; do echo $$f.a; done` -lstdc++; \ elif $(GO12) || $(GO13) || $(GO15); then \ $(COMPILETOOL) $(GO) $(GOCOMPILEARG) -I . $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) && \ - $(COMPILETOOL) $(GOTOOL) $(GOLD) -L . -linkmode external -extld $(CXX) -extldflags "$(CXXFLAGS)" -o $*_runme $(SCRIPTPREFIX)$*_runme.$(GOOBJEXT); \ + $(COMPILETOOL) $(GOTOOL) $(GOLD) -L . -linkmode external -extld $(CXX) -extldflags "$(CXXFLAGS) $(OSXOLDGOLINKFLAGS)" -o $*_runme $(SCRIPTPREFIX)$*_runme.$(GOOBJEXT); \ else \ $(COMPILETOOL) $(GO) $(GOCOMPILEARG) -I . $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) && \ $(COMPILETOOL) $(GOTOOL) $(GOLD) -L . -r $${GOROOT:-`go env GOROOT`}/pkg/$${GOOS:-`go env GOOS`}_$${GOARCH:-`go env GOARCH`}:. -o $*_runme $(SCRIPTPREFIX)$*_runme.$(GOOBJEXT); \ diff --git a/Source/Modules/go.cxx b/Source/Modules/go.cxx index a4445a95d..002247fe5 100644 --- a/Source/Modules/go.cxx +++ b/Source/Modules/go.cxx @@ -2112,6 +2112,7 @@ private: emit_attach_parmmaps(parms, f); int parm_count = emit_num_arguments(parms); int required_count = emit_num_required(parms); + bool needs_swigargs = false; emit_return_variable(n, result, f); @@ -2125,6 +2126,7 @@ private: String *swigargs = NewString("\tstruct swigargs {\n"); if (parm_count > required_count) { + needs_swigargs = true; Printv(swigargs, "\t\tintgo _swig_optargc;\n", NULL); } @@ -2136,6 +2138,7 @@ private: SwigType *pt = Getattr(p, "type"); String *ct = gcCTypeForGoValue(p, pt, ln); Printv(swigargs, "\t\t\t", ct, ";\n", NULL); + needs_swigargs = true; Delete(ct); String *gn = NewStringf("_swig_go_%d", i); @@ -2152,6 +2155,7 @@ private: String *ct = gcCTypeForGoValue(n, result, ln); Delete(ln); Printv(swigargs, "\t\t", ct, ";\n", NULL); + needs_swigargs = true; Delete(ct); ln = NewString("_swig_go_result"); @@ -2208,7 +2212,10 @@ private: cleanupFunction(n, f, parms); - Printv(f->locals, swigargs, NULL); + if (needs_swigargs) + { + Printv(f->locals, swigargs, NULL); + } Printv(f->code, "}\n", NULL); |