You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2017/02/23 22:51:43 UTC
[36/38] qpid-proton git commit: NO-JIRA: go wrappers re-generated to
be compatible with proton-c 0.10
NO-JIRA: go wrappers re-generated to be compatible with proton-c 0.10
Some new definitions had creeped into the wrappers_gen.go that would fail to
build with older versions of proton-c.
Updated genwrap.go:
- -include option generates from installed headers instead of git source
- explicitly include the intended minimum C version
- fail attempts to generate from newer headers
Added test-versions.sh, takes a list of install prefixes where proton is
installed and runs go test on the git go sources against each one.
Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/c94301d5
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/c94301d5
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/c94301d5
Branch: refs/heads/go1
Commit: c94301d59ce0a9a8863d3bd71919c1acfebce533
Parents: c87b23e
Author: Alan Conway <ac...@redhat.com>
Authored: Thu Feb 23 16:39:14 2017 -0500
Committer: Alan Conway <ac...@redhat.com>
Committed: Thu Feb 23 17:10:22 2017 -0500
----------------------------------------------------------------------
proton-c/bindings/go/genwrap.go | 77 ++++++++++++++++----
.../go/src/qpid.apache.org/amqp/version.go | 8 +-
.../src/qpid.apache.org/proton/wrappers_gen.go | 39 +---------
proton-c/bindings/go/test-versions.sh | 50 +++++++++++++
4 files changed, 125 insertions(+), 49 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/c94301d5/proton-c/bindings/go/genwrap.go
----------------------------------------------------------------------
diff --git a/proton-c/bindings/go/genwrap.go b/proton-c/bindings/go/genwrap.go
index 6885b74..0bf13fa 100644
--- a/proton-c/bindings/go/genwrap.go
+++ b/proton-c/bindings/go/genwrap.go
@@ -22,6 +22,12 @@ under the License.
// Not run automatically, generated sources are checked in. To update the
// generated sources run `go run genwrap.go` in this directory.
//
+// WARNING: generating code from the wrong proton header file versions
+// will break compatibility guarantees. This program will attempt to detect
+// such errors. If you are deliberately changing the compatibility requirements
+// update the variable minVersion below.
+//
+
package main
import (
@@ -37,12 +43,61 @@ import (
"text/template"
)
-var includeProton = "../../include/proton"
-var outpath = "src/qpid.apache.org/proton/wrappers_gen.go"
+var minVersion = "0.10" // The minimum version of proton-c that the Go binding can use
+var include = flag.String("include", "../../include", "Directory containing proton/*.h include files")
+
+var versionH = regexp.MustCompile("(?s:PN_VERSION_MAJOR ([0-9]+).*PN_VERSION_MINOR ([0-9]+))")
+var versionTxt = regexp.MustCompile("^[0-9]+\\.[0-9]+")
func main() {
flag.Parse()
- out, err := os.Create(outpath)
+ genVersion()
+ genWrappers()
+}
+
+func getVersion() string {
+ _, err := ioutil.ReadFile(path.Join(*include, "proton/version.h.in"))
+ if err == nil {
+ // We are using the headers in git sources, get the version.txt
+ vt, err := ioutil.ReadFile(path.Join(*include, "../../version.txt"))
+ panicIf(err)
+ return versionTxt.FindString(string(vt))
+ }
+ vh, err := ioutil.ReadFile(path.Join(*include, "proton/version.h"))
+ if err == nil {
+ // We are using installed headers
+ return strings.Join(versionH.FindStringSubmatch(string(vh))[1:], ".")
+ }
+ panic(err)
+}
+
+func genVersion() {
+ version := getVersion()
+ if minVersion != version {
+ panic(fmt.Errorf("Generating from wrong version %v, expected %v", version, minVersion))
+ }
+ out, err := os.Create("src/qpid.apache.org/amqp/version.go")
+ panicIf(err)
+ defer out.Close()
+ splitVersion := strings.Split(minVersion, ".")
+ fmt.Fprintf(out, copyright+`
+
+package amqp
+
+// Version check for proton library.
+// Done here because this is the lowest-level dependency for all the proton Go packages.
+
+// #include <proton/version.h>
+// #if PN_VERSION_MAJOR == %s && PN_VERSION_MINOR < %s
+// #error packages qpid.apache.org/... require Proton-C library version 0.10 or greater
+// #endif
+import "C"
+`, splitVersion[0], splitVersion[1])
+}
+
+func genWrappers() {
+ outPath := "src/qpid.apache.org/proton/wrappers_gen.go"
+ out, err := os.Create(outPath)
panicIf(err)
defer out.Close()
@@ -56,11 +111,13 @@ import (
"unsafe"
)
-// #include <proton/types.h>
-// #include <proton/error.h>
// #include <proton/condition.h>
+// #include <proton/error.h>
// #include <proton/event.h>
+// #include <proton/types.h>
// #include <stdlib.h>
+import "C"
+
`)
for _, api := range apis {
fmt.Fprintf(out, "// #include <proton/%s.h>\n", api)
@@ -79,13 +136,7 @@ import (
apiWrapFns(api, header, out)
}
out.Close()
-
- // Run gofmt.
- cmd := exec.Command("gofmt", "-w", outpath)
- cmd.Stdout = os.Stdout
- cmd.Stderr = os.Stderr
- err = cmd.Run()
- if err != nil {
+ if err := exec.Command("gofmt", "-w", outPath).Run(); err != nil {
fmt.Fprintf(os.Stderr, "gofmt: %s", err)
os.Exit(1)
}
@@ -161,7 +212,7 @@ func panicIf(err error) {
}
func readHeader(name string) string {
- s, err := ioutil.ReadFile(path.Join(includeProton, name+".h"))
+ s, err := ioutil.ReadFile(path.Join(*include, "proton", name+".h"))
panicIf(err)
return string(s)
}
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/c94301d5/proton-c/bindings/go/src/qpid.apache.org/amqp/version.go
----------------------------------------------------------------------
diff --git a/proton-c/bindings/go/src/qpid.apache.org/amqp/version.go b/proton-c/bindings/go/src/qpid.apache.org/amqp/version.go
index cefa904..bf33d2b 100644
--- a/proton-c/bindings/go/src/qpid.apache.org/amqp/version.go
+++ b/proton-c/bindings/go/src/qpid.apache.org/amqp/version.go
@@ -17,13 +17,19 @@ specific language governing permissions and limitations
under the License.
*/
+//
+// NOTE: DO NOT EDIT. This file was generated by genwrap.go from the proton header files.
+// Update the generator and re-run if you need to modify this code.
+//
+
+
package amqp
// Version check for proton library.
// Done here because this is the lowest-level dependency for all the proton Go packages.
// #include <proton/version.h>
-// #if PN_VERSION_MINOR < 10
+// #if PN_VERSION_MAJOR == 0 && PN_VERSION_MINOR < 10
// #error packages qpid.apache.org/... require Proton-C library version 0.10 or greater
// #endif
import "C"
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/c94301d5/proton-c/bindings/go/src/qpid.apache.org/proton/wrappers_gen.go
----------------------------------------------------------------------
diff --git a/proton-c/bindings/go/src/qpid.apache.org/proton/wrappers_gen.go b/proton-c/bindings/go/src/qpid.apache.org/proton/wrappers_gen.go
index a6c6635..0db04c8 100644
--- a/proton-c/bindings/go/src/qpid.apache.org/proton/wrappers_gen.go
+++ b/proton-c/bindings/go/src/qpid.apache.org/proton/wrappers_gen.go
@@ -29,11 +29,13 @@ import (
"unsafe"
)
-// #include <proton/types.h>
-// #include <proton/error.h>
// #include <proton/condition.h>
+// #include <proton/error.h>
// #include <proton/event.h>
+// #include <proton/types.h>
// #include <stdlib.h>
+import "C"
+
// #include <proton/session.h>
// #include <proton/link.h>
// #include <proton/delivery.h>
@@ -78,13 +80,6 @@ const (
ETransportHeadClosed EventType = C.PN_TRANSPORT_HEAD_CLOSED
ETransportTailClosed EventType = C.PN_TRANSPORT_TAIL_CLOSED
ETransportClosed EventType = C.PN_TRANSPORT_CLOSED
- EConnectionWake EventType = C.PN_CONNECTION_WAKE
- EListenerAccept EventType = C.PN_LISTENER_ACCEPT
- EListenerClose EventType = C.PN_LISTENER_CLOSE
- EProactorInterrupt EventType = C.PN_PROACTOR_INTERRUPT
- EProactorTimeout EventType = C.PN_PROACTOR_TIMEOUT
- EProactorInactive EventType = C.PN_PROACTOR_INACTIVE
- EListenerOpen EventType = C.PN_LISTENER_OPEN
)
func (e EventType) String() string {
@@ -150,20 +145,6 @@ func (e EventType) String() string {
return "TransportTailClosed"
case C.PN_TRANSPORT_CLOSED:
return "TransportClosed"
- case C.PN_CONNECTION_WAKE:
- return "ConnectionWake"
- case C.PN_LISTENER_ACCEPT:
- return "ListenerAccept"
- case C.PN_LISTENER_CLOSE:
- return "ListenerClose"
- case C.PN_PROACTOR_INTERRUPT:
- return "ProactorInterrupt"
- case C.PN_PROACTOR_TIMEOUT:
- return "ProactorTimeout"
- case C.PN_PROACTOR_INACTIVE:
- return "ProactorInactive"
- case C.PN_LISTENER_OPEN:
- return "ListenerOpen"
}
return "Unknown"
}
@@ -373,15 +354,6 @@ func (l Link) SetDrain(drain bool) {
func (l Link) Draining() bool {
return bool(C.pn_link_draining(l.pn))
}
-func (l Link) MaxMessageSize() uint64 {
- return uint64(C.pn_link_max_message_size(l.pn))
-}
-func (l Link) SetMaxMessageSize(size uint64) {
- C.pn_link_set_max_message_size(l.pn, C.uint64_t(size))
-}
-func (l Link) RemoteMaxMessageSize() uint64 {
- return uint64(C.pn_link_remote_max_message_size(l.pn))
-}
// Wrappers for declarations in delivery.h
@@ -529,9 +501,6 @@ func (c Condition) RedirectHost() string {
func (c Condition) RedirectPort() int {
return int(C.pn_condition_redirect_port(c.pn))
}
-func (c Condition) Copy(src Condition) int {
- return int(C.pn_condition_copy(c.pn, src.pn))
-}
// Wrappers for declarations in terminus.h
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/c94301d5/proton-c/bindings/go/test-versions.sh
----------------------------------------------------------------------
diff --git a/proton-c/bindings/go/test-versions.sh b/proton-c/bindings/go/test-versions.sh
new file mode 100755
index 0000000..0022ce3
--- /dev/null
+++ b/proton-c/bindings/go/test-versions.sh
@@ -0,0 +1,50 @@
+#!/bin/bash
+#
+# Takes a list of install prefixes and tests the go source under the current directory
+# against the proton install in each prefix.
+#
+# NOTE: This script will fail if it finds proton headers or libraries installed in standard
+# places or on the existing paths, to avoid possible confusion.
+#
+
+for VAR in LD_LIBRARY_PATH LIBRARY_PATH C_INCLUDE_PATH; do
+ declare OLD_${VAR}=${!VAR};
+done
+
+prefix() {
+ prefix=$1
+ export LD_LIBRARY_PATH="$prefix/lib64:$prefix/lib:$OLD_LD_LIBRARY_PATH"
+ export LIBRARY_PATH="$prefix/lib64:$prefix/lib:$OLD_LIBRARY_PATH"
+ export C_INCLUDE_PATH="$prefix/include:$OLD_C_INCLUDE_PATH"
+}
+
+TEMP=$(mktemp -d)
+trap "rm -rf $TEMP" EXIT
+set -o pipefail
+
+cat > $TEMP/test.c <<EOF
+#include <proton/connection.h>
+int main(int c, char **a) { return 0; }
+EOF
+cc $TEMP/test.c 2> /dev/null && {
+ echo "cc found proton in include path"; cc -E | grep proton/connection.h | head -n1; exit 1; } 1>&2
+
+cat > $TEMP/test.c <<EOF
+int main(int c, char **a) { return 0; }
+EOF
+cc -lqpid-proton $TEMPC 2>/dev/null && { echo "cc found proton in library path" 1>&2 ; exit 1; }
+
+for P in "$@"; do
+ (
+ case $P in
+ /*) ;;
+ *) P=$PWD/$P;;
+ esac
+ test -d $P || { echo "no such directory: $P"; continue; }
+ echo ==== $P
+ prefix $P
+ export GOPATH=$PWD
+ git clean -dfx
+ go test qpid.apache.org/...
+ )
+done
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org