diff options
Diffstat (limited to 'misc/cgo/fortran')
-rw-r--r-- | misc/cgo/fortran/answer.f90 | 9 | ||||
-rw-r--r-- | misc/cgo/fortran/fortran.go | 12 | ||||
-rw-r--r-- | misc/cgo/fortran/fortran_test.go | 13 | ||||
-rw-r--r-- | misc/cgo/fortran/helloworld/helloworld.f90 | 3 | ||||
-rwxr-xr-x | misc/cgo/fortran/test.bash | 44 |
5 files changed, 81 insertions, 0 deletions
diff --git a/misc/cgo/fortran/answer.f90 b/misc/cgo/fortran/answer.f90 new file mode 100644 index 0000000..b3717ee --- /dev/null +++ b/misc/cgo/fortran/answer.f90 @@ -0,0 +1,9 @@ +! Copyright 2016 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. + +function the_answer() result(j) bind(C) + use iso_c_binding, only: c_int + integer(c_int) :: j ! output + j = 42 +end function the_answer diff --git a/misc/cgo/fortran/fortran.go b/misc/cgo/fortran/fortran.go new file mode 100644 index 0000000..0079b53 --- /dev/null +++ b/misc/cgo/fortran/fortran.go @@ -0,0 +1,12 @@ +// Copyright 2016 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 fortran + +// int the_answer(); +import "C" + +func TheAnswer() int { + return int(C.the_answer()) +} diff --git a/misc/cgo/fortran/fortran_test.go b/misc/cgo/fortran/fortran_test.go new file mode 100644 index 0000000..d0cb9f2 --- /dev/null +++ b/misc/cgo/fortran/fortran_test.go @@ -0,0 +1,13 @@ +// Copyright 2016 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 fortran + +import "testing" + +func TestFortran(t *testing.T) { + if a := TheAnswer(); a != 42 { + t.Errorf("Unexpected result for The Answer. Got: %d Want: 42", a) + } +} diff --git a/misc/cgo/fortran/helloworld/helloworld.f90 b/misc/cgo/fortran/helloworld/helloworld.f90 new file mode 100644 index 0000000..cbc34c1 --- /dev/null +++ b/misc/cgo/fortran/helloworld/helloworld.f90 @@ -0,0 +1,3 @@ + program HelloWorldF90 + write(*,*) "Hello World!" + end program HelloWorldF90 diff --git a/misc/cgo/fortran/test.bash b/misc/cgo/fortran/test.bash new file mode 100755 index 0000000..2b61730 --- /dev/null +++ b/misc/cgo/fortran/test.bash @@ -0,0 +1,44 @@ +#!/usr/bin/env bash +# Copyright 2016 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. + +# This directory is intended to test the use of Fortran with cgo. + +set -e + +FC=$1 + +goos=$(go env GOOS) + +libext="so" +if [ "$goos" = "darwin" ]; then + libext="dylib" +elif [ "$goos" = "aix" ]; then + libtext="a" +fi + +case "$FC" in +*gfortran*) + libpath=$(dirname $($FC -print-file-name=libgfortran.$libext)) + if [ "$goos" != "aix" ]; then + RPATH_FLAG="-Wl,-rpath,$libpath" + fi + export CGO_LDFLAGS="$CGO_LDFLAGS $RPATH_FLAG -L $libpath" + ;; +esac + +if ! $FC helloworld/helloworld.f90 -o /dev/null >& /dev/null; then + echo "skipping Fortran test: could not build helloworld.f90 with $FC" + exit 0 +fi +rm -f main.exe + +status=0 + +if ! go test; then + echo "FAIL: go test" + status=1 +fi + +exit $status |