From f22068984ce9fd6af47243ed6249d640a42f8f92 Mon Sep 17 00:00:00 2001 From: John Ellson Date: Wed, 20 Nov 2013 15:58:40 -0500 Subject: [PATCH] experimental go bits --- tclpkg/gv/go/README | 5 +++++ tclpkg/gv/go/setup | 2 ++ tclpkg/gv/go/src/example/example.c | 20 ++++++++++++++++++++ tclpkg/gv/go/src/example/example.go | 1 + tclpkg/gv/go/src/example/example.swig | 13 +++++++++++++ tclpkg/gv/go/src/makefile | 20 ++++++++++++++++++++ tclpkg/gv/go/src/test.go | 11 +++++++++++ 7 files changed, 72 insertions(+) create mode 100644 tclpkg/gv/go/README create mode 100755 tclpkg/gv/go/setup create mode 100644 tclpkg/gv/go/src/example/example.c create mode 100644 tclpkg/gv/go/src/example/example.go create mode 100644 tclpkg/gv/go/src/example/example.swig create mode 100644 tclpkg/gv/go/src/makefile create mode 100644 tclpkg/gv/go/src/test.go diff --git a/tclpkg/gv/go/README b/tclpkg/gv/go/README new file mode 100644 index 000000000..6a0a62058 --- /dev/null +++ b/tclpkg/gv/go/README @@ -0,0 +1,5 @@ +This directory is hopefully temporary, containing various experimantal code towards a GO language extension. + +Currently requires a very recent GO installed in /usr/local/go + +(Later than the 1.1.2 available in fc20 or rawhide at this time.) diff --git a/tclpkg/gv/go/setup b/tclpkg/gv/go/setup new file mode 100755 index 000000000..fe58680d7 --- /dev/null +++ b/tclpkg/gv/go/setup @@ -0,0 +1,2 @@ +export GOROOT=/usr/local/go +export GOPATH=`pwd` diff --git a/tclpkg/gv/go/src/example/example.c b/tclpkg/gv/go/src/example/example.c new file mode 100644 index 000000000..65b76aed8 --- /dev/null +++ b/tclpkg/gv/go/src/example/example.c @@ -0,0 +1,20 @@ +#include + +double My_variable = 3.0; + +int fact(int n) { + if (n <= 1) + return 1; + else + return n*fact(n-1); +} + +int my_mod(int x, int y) { + return (x%y); +} + +char *get_time() { + time_t ltime; + time(<ime); + return ctime(<ime); +} diff --git a/tclpkg/gv/go/src/example/example.go b/tclpkg/gv/go/src/example/example.go new file mode 100644 index 000000000..f7ec3726a --- /dev/null +++ b/tclpkg/gv/go/src/example/example.go @@ -0,0 +1 @@ +package example diff --git a/tclpkg/gv/go/src/example/example.swig b/tclpkg/gv/go/src/example/example.swig new file mode 100644 index 000000000..aaf1862a8 --- /dev/null +++ b/tclpkg/gv/go/src/example/example.swig @@ -0,0 +1,13 @@ +%module example +%{ +/* Put header files here or function declarations like below */ +extern double My_variable; +extern int fact(int n); +extern int my_mod(int x, int y); +extern char *get_time(); +%} +extern double My_variable; +extern int fact(int n); +extern int my_mod(int x, int y); +extern char *get_time(); + diff --git a/tclpkg/gv/go/src/makefile b/tclpkg/gv/go/src/makefile new file mode 100644 index 000000000..4e3e31c94 --- /dev/null +++ b/tclpkg/gv/go/src/makefile @@ -0,0 +1,20 @@ +GO=$(GOROOT)/bin/go +LDFLAGS="-r `pwd`/gv -r `pwd`/example" + +test: test.go prep + $(GO) build -x -ldflags=$(LDFLAGS) test.go + +.PHONY: prep +prep: + mkdir -p gv +# swig -c++ -go -intgosize 32 -o gv/gv_go.cpp ../../gv.i +# sed -e 's/#include "gvc.h"/#include /' <../../gv.cpp >gv/gv.cpp +# sed -e 's/#include "gvc.h"/#include /' gv/gv_go.cpp2 +# mv gv/gv_go.cpp2 gv/gv_go.cpp + sed -e 's/#include "gvc.h"/#include /' <../../gv.i >gv/gv.swig + sed -e 's/#include "gvc.h"/#include /' \ + -e 's/DEMAND_LOADING/1/' <../../gv.cpp >gv/gv.cpp + echo "package gv" >gv/gv.go + +clean: + rm -rf test gv */*.so diff --git a/tclpkg/gv/go/src/test.go b/tclpkg/gv/go/src/test.go new file mode 100644 index 000000000..bfc288e1a --- /dev/null +++ b/tclpkg/gv/go/src/test.go @@ -0,0 +1,11 @@ +package main +import ( + "fmt" + "example" + "gv" +) + +func main() { + fmt.Printf("Hello, world. fact(2) = %v\n", example.Fact(2)) + G = gv.Digraph() +} -- 2.40.0