diff options
author | Michael Stapelberg <stapelberg@debian.org> | 2014-06-19 09:23:02 +0200 |
---|---|---|
committer | Michael Stapelberg <stapelberg@debian.org> | 2014-06-19 09:23:02 +0200 |
commit | 8fcc691d6fa80c9ddf38bf0d34b803bab0e421d5 (patch) | |
tree | ba71646a10b518372d110532d86fcf0b98edc14f /misc | |
parent | 3bb719bbf3cdb97b3901f3baaa2da9d02a5c3cdb (diff) | |
parent | 8a39ee361feb9bf46d728ff1ba4f07ca1d9610b1 (diff) | |
download | golang-8fcc691d6fa80c9ddf38bf0d34b803bab0e421d5.tar.gz |
Merge tag 'upstream/1.3' into debian-sid
Upstream version 1.3
Diffstat (limited to 'misc')
64 files changed, 2717 insertions, 645 deletions
diff --git a/misc/bash/go b/misc/bash/go index f5d79e41a..50f4f720b 100644 --- a/misc/bash/go +++ b/misc/bash/go @@ -20,10 +20,9 @@ _go() local cmd="${COMP_WORDS[1]}" - local cmds="build clean doc fix fmt get + local cmds="build clean env fix fmt get install list run test tool version vet" - local addhelp="gopath importpath remote - testflag testfunc" + local addhelp="c gopath importpath packages testflag testfunc" local other="help" if [ "$COMP_CWORD" == 1 ]; then @@ -88,9 +87,6 @@ _go() COMPREPLY=(`_go_importpath "$cur"`) fi ;; - 'doc') - COMPREPLY=(`_go_importpath "$cur"`) - ;; 'fix') COMPREPLY=(`_go_importpath "$cur"`) ;; @@ -188,15 +184,9 @@ _go() 'dist') # TODO: Implement something. #_go_tool_dist ;; - 'ebnflint') # TODO: Implement something. - #_go_tool_ebnflint - ;; 'fix') # TODO: Implement something. #_go_tool_fix ;; - 'gotype') # TODO: Implement something. - #_go_tool_gotype - ;; 'nm') # TODO: Implement something. #_go_tool_nm ;; @@ -206,9 +196,6 @@ _go() 'pprof') # TODO: Implement something. #_go_tool_pprof ;; - 'prof') # TODO: Implement something. - #_go_tool_prof - ;; 'vet') # TODO: Implement something. #_go_tool_vet ;; diff --git a/misc/benchcmp b/misc/benchcmp index 3180f57ea..28a37392d 100755 --- a/misc/benchcmp +++ b/misc/benchcmp @@ -1,124 +1,5 @@ -#!/bin/sh -# Copyright 2011 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. +#!/bin/bash -case "$1" in --*) - echo 'usage: benchcmp old.txt new.txt' >&2 - echo >&2 - echo 'Each input file should be from:' >&2 - echo ' go test -test.run=NONE -test.bench=. > [old,new].txt' >&2 - echo >&2 - echo 'Benchcmp compares the first and last for each benchmark.' >&2 - echo >&2 - echo 'If -test.benchmem=true is added to the "go test" command' >&2 - echo 'benchcmp will also compare memory allocations.' >&2 - exit 2 -esac - -awk ' -BEGIN { - n = 0 -} - -$1 ~ /Benchmark/ && $4 == "ns/op" { - if(old[$1]) { - if(!saw[$1]++) { - name[n++] = $1 - if(length($1) > len) - len = length($1) - } - new[$1] = $3 - if($6 == "MB/s") - newmb[$1] = $5 - - # allocs/op might be at $8 or $10 depending on if - # SetBytes was used or not. - # B/op might be at $6 or $8, it should be immediately - # followed by allocs/op - if($8 == "allocs/op") { - newbytes[$1] = $5 - newalloc[$1] = $7 - } - if($10 == "allocs/op") { - newbytes[$1] = $7 - newalloc[$1] = $9 - } - } else { - old[$1] = $3 - if($6 == "MB/s") - oldmb[$1] = $5 - if($8 == "allocs/op") { - oldbytes[$1] = $5 - oldalloc[$1] = $7 - } - if($10 == "allocs/op") { - oldbytes[$1] = $7 - oldalloc[$1] = $9 - } - } -} - -END { - if(n == 0) { - print "benchcmp: no repeated benchmarks" >"/dev/stderr" - exit 1 - } - - printf("%-*s %12s %12s %7s\n", len, "benchmark", "old ns/op", "new ns/op", "delta") - - # print ns/op - for(i=0; i<n; i++) { - what = name[i] - printf("%-*s %12d %12d %6s%%\n", len, what, old[what], new[what], - sprintf("%+.2f", 100*new[what]/old[what]-100)) - } - - # print mb/s - anymb = 0 - for(i=0; i<n; i++) { - what = name[i] - if(!(what in newmb)) - continue - if(anymb++ == 0) - printf("\n%-*s %12s %12s %7s\n", len, "benchmark", "old MB/s", "new MB/s", "speedup") - printf("%-*s %12s %12s %6sx\n", len, what, - sprintf("%.2f", oldmb[what]), - sprintf("%.2f", newmb[what]), - sprintf("%.2f", newmb[what]/oldmb[what])) - } - - # print allocs - anyalloc = 0 - for(i=0; i<n; i++) { - what = name[i] - if(!(what in newalloc)) - continue - if(anyalloc++ == 0) - printf("\n%-*s %12s %12s %7s\n", len, "benchmark", "old allocs", "new allocs", "delta") - if(oldalloc[what] == 0) - delta="n/a" - else - delta=sprintf("%.2f", 100*newalloc[what]/oldalloc[what]-100) - printf("%-*s %12d %12d %6s%%\n", len, what, - oldalloc[what], newalloc[what], delta) - } - - # print alloc bytes - anybytes = 0 - for(i=0; i<n; i++) { - what = name[i] - if(!(what in newbytes)) - continue - if(anybytes++ == 0) - printf("\n%-*s %12s %12s %7s\n", len, "benchmark", "old bytes", "new bytes", "delta") - if(oldbytes[what] == 0) - delta="n/a" - else - delta=sprintf("%.2f", 100*newbytes[what]/oldbytes[what]-100) - printf("%-*s %12d %12d %6s%%\n", len, what, - oldbytes[what], newbytes[what], delta) - } -} -' "$@" +echo 'misc/benchcmp has moved:' >&2 +echo ' go get -u code.google.com/p/go.tools/cmd/benchcmp' >&2 +exit 2 diff --git a/misc/cgo/errors/err3.go b/misc/cgo/errors/err3.go new file mode 100644 index 000000000..3680a4a4c --- /dev/null +++ b/misc/cgo/errors/err3.go @@ -0,0 +1,18 @@ +// Copyright 2014 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 main + +/* +typedef struct foo foo_t; +typedef struct bar bar_t; + +foo_t *foop; +*/ +import "C" + +func main() { + x := (*C.bar_t)(nil) + C.foop = x // ERROR HERE +} diff --git a/misc/cgo/errors/test.bash b/misc/cgo/errors/test.bash index 697ae2fed..f0f60c844 100755 --- a/misc/cgo/errors/test.bash +++ b/misc/cgo/errors/test.bash @@ -26,6 +26,7 @@ check() { check err1.go check err2.go +check err3.go rm -rf errs _obj exit 0 diff --git a/misc/cgo/nocgo/nocgo.go b/misc/cgo/nocgo/nocgo.go new file mode 100644 index 000000000..00ae5e9c8 --- /dev/null +++ b/misc/cgo/nocgo/nocgo.go @@ -0,0 +1,22 @@ +// Copyright 2014 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. + +// Test that -static works when not using cgo. This test is in +// misc/cgo to take advantage of the testing framework support for +// when -static is expected to work. + +package nocgo + +func NoCgo() int { + c := make(chan int) + + // The test is run with external linking, which means that + // goroutines will be created via the runtime/cgo package. + // Make sure that works. + go func() { + c <- 42 + }() + + return <-c +} diff --git a/misc/cgo/nocgo/nocgo_test.go b/misc/cgo/nocgo/nocgo_test.go new file mode 100644 index 000000000..45d247cf9 --- /dev/null +++ b/misc/cgo/nocgo/nocgo_test.go @@ -0,0 +1,14 @@ +// Copyright 2014 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 nocgo + +import "testing" + +func TestNop(t *testing.T) { + i := NoCgo() + if i != 42 { + t.Errorf("got %d, want %d", i, 42) + } +} diff --git a/misc/cgo/test/backdoor/backdoor.go b/misc/cgo/test/backdoor/backdoor.go index efe4f01f4..7398772bd 100644 --- a/misc/cgo/test/backdoor/backdoor.go +++ b/misc/cgo/test/backdoor/backdoor.go @@ -5,3 +5,4 @@ package backdoor func LockedOSThread() bool // in runtime.c +func Issue7695(x1, x2, x3, x4, x5, x6, x7, x8 uintptr) diff --git a/misc/cgo/test/backdoor/backdoor_gccgo.go b/misc/cgo/test/backdoor/backdoor_gccgo.go new file mode 100644 index 000000000..514f76ec5 --- /dev/null +++ b/misc/cgo/test/backdoor/backdoor_gccgo.go @@ -0,0 +1,11 @@ +// Copyright 2014 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 is the gccgo version of the stub in runtime.c. + +// +build gccgo + +package backdoor + +func Issue7695(x1, x2, x3, x4, x5, x6, x7, x8 uintptr) {} diff --git a/misc/cgo/test/backdoor/runtime.c b/misc/cgo/test/backdoor/runtime.c index 194a9c8e4..7e6b44872 100644 --- a/misc/cgo/test/backdoor/runtime.c +++ b/misc/cgo/test/backdoor/runtime.c @@ -23,3 +23,10 @@ void b = runtime·lockedOSThread(); FLUSH(&b); } + +// This is what a cgo-compiled stub declaration looks like. +void +·Issue7695(struct{void *y[8*sizeof(void*)];}p) +{ + USED(p); +} diff --git a/misc/cgo/test/cgo_linux_test.go b/misc/cgo/test/cgo_linux_test.go index 056d67c96..0a405c7a3 100644 --- a/misc/cgo/test/cgo_linux_test.go +++ b/misc/cgo/test/cgo_linux_test.go @@ -7,3 +7,4 @@ package cgotest import "testing" func TestSetgid(t *testing.T) { testSetgid(t) } +func Test6997(t *testing.T) { test6997(t) } diff --git a/misc/cgo/test/cgo_test.go b/misc/cgo/test/cgo_test.go index b7c6d2876..eb237725a 100644 --- a/misc/cgo/test/cgo_test.go +++ b/misc/cgo/test/cgo_test.go @@ -43,12 +43,15 @@ func TestCflags(t *testing.T) { testCflags(t) } func Test5337(t *testing.T) { test5337(t) } func Test5548(t *testing.T) { test5548(t) } func Test5603(t *testing.T) { test5603(t) } +func Test6833(t *testing.T) { test6833(t) } func Test3250(t *testing.T) { test3250(t) } func TestCallbackStack(t *testing.T) { testCallbackStack(t) } func TestFpVar(t *testing.T) { testFpVar(t) } func Test4339(t *testing.T) { test4339(t) } func Test6390(t *testing.T) { test6390(t) } func Test5986(t *testing.T) { test5986(t) } +func Test7665(t *testing.T) { test7665(t) } func TestNaming(t *testing.T) { testNaming(t) } +func Test7560(t *testing.T) { test7560(t) } func BenchmarkCgoCall(b *testing.B) { benchCgoCall(b) } diff --git a/misc/cgo/test/issue6833.go b/misc/cgo/test/issue6833.go new file mode 100644 index 000000000..e12d53422 --- /dev/null +++ b/misc/cgo/test/issue6833.go @@ -0,0 +1,27 @@ +// Copyright 2013 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 cgotest + +/* +extern unsigned long long issue6833Func(unsigned int, unsigned long long); +*/ +import "C" + +import "testing" + +//export GoIssue6833Func +func GoIssue6833Func(aui uint, aui64 uint64) uint64 { + return aui64 + uint64(aui) +} + +func test6833(t *testing.T) { + ui := 7 + ull := uint64(0x4000300020001000) + v := uint64(C.issue6833Func(C.uint(ui), C.ulonglong(ull))) + exp := uint64(ui) + ull + if v != exp { + t.Errorf("issue6833Func() returns %x, expected %x", v, exp) + } +} diff --git a/misc/cgo/test/issue6833_c.c b/misc/cgo/test/issue6833_c.c new file mode 100644 index 000000000..a77b425b5 --- /dev/null +++ b/misc/cgo/test/issue6833_c.c @@ -0,0 +1,10 @@ +// Copyright 2013 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. + +#include "_cgo_export.h" + +unsigned long long +issue6833Func(unsigned int aui, unsigned long long aull) { + return GoIssue6833Func(aui, aull); +} diff --git a/misc/cgo/test/issue6997_linux.c b/misc/cgo/test/issue6997_linux.c new file mode 100644 index 000000000..897cdd081 --- /dev/null +++ b/misc/cgo/test/issue6997_linux.c @@ -0,0 +1,26 @@ +// Copyright 2014 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. + +#include <pthread.h> +#include <stdio.h> +#include <unistd.h> + +static pthread_t thread; + +static void* threadfunc(void* dummy) { + while(1) { + sleep(1); + } +} + +int StartThread() { + return pthread_create(&thread, NULL, &threadfunc, NULL); +} + +int CancelThread() { + void *r; + pthread_cancel(thread); + pthread_join(thread, &r); + return (r == PTHREAD_CANCELED); +} diff --git a/misc/cgo/test/issue6997_linux.go b/misc/cgo/test/issue6997_linux.go new file mode 100644 index 000000000..871bd517a --- /dev/null +++ b/misc/cgo/test/issue6997_linux.go @@ -0,0 +1,40 @@ +// Copyright 2014 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. + +// Test that pthread_cancel works as expected +// (NPTL uses SIGRTMIN to implement thread cancellation) +// See http://golang.org/issue/6997 +package cgotest + +/* +#cgo CFLAGS: -pthread +#cgo LDFLAGS: -pthread +extern int StartThread(); +extern int CancelThread(); +*/ +import "C" + +import "testing" +import "time" + +func test6997(t *testing.T) { + r := C.StartThread() + if r != 0 { + t.Error("pthread_create failed") + } + c := make(chan C.int) + go func() { + time.Sleep(500 * time.Millisecond) + c <- C.CancelThread() + }() + + select { + case r = <-c: + if r == 0 { + t.Error("pthread finished but wasn't cancelled??") + } + case <-time.After(5 * time.Second): + t.Error("hung in pthread_cancel/pthread_join") + } +} diff --git a/misc/cgo/test/issue7234_test.go b/misc/cgo/test/issue7234_test.go new file mode 100644 index 000000000..713dade4c --- /dev/null +++ b/misc/cgo/test/issue7234_test.go @@ -0,0 +1,21 @@ +// Copyright 2014 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 cgotest + +import "testing" + +// This test actually doesn't have anything to do with cgo. It is a +// test of http://golang.org/issue/7234, a compiler/linker bug in +// handling string constants when using -linkmode=external. The test +// is in this directory because we routinely test -linkmode=external +// here. + +var v7234 = [...]string{"runtime/cgo"} + +func TestIssue7234(t *testing.T) { + if v7234[0] != "runtime/cgo" { + t.Errorf("bad string constant %q", v7234[0]) + } +} diff --git a/misc/cgo/test/issue7560.go b/misc/cgo/test/issue7560.go new file mode 100644 index 000000000..4bea6e357 --- /dev/null +++ b/misc/cgo/test/issue7560.go @@ -0,0 +1,44 @@ +// Copyright 2014 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 cgotest + +/* +#include <stdint.h> + +typedef struct { + char x; + long y; +} __attribute__((__packed__)) misaligned; + +int +offset7560(void) +{ + return (uintptr_t)&((misaligned*)0)->y; +} +*/ +import "C" + +import ( + "reflect" + "testing" +) + +func test7560(t *testing.T) { + // some mingw don't implement __packed__ correctly. + if C.offset7560() != 1 { + t.Skip("C compiler did not pack struct") + } + + // C.misaligned should have x but then a padding field to get to the end of the struct. + // There should not be a field named 'y'. + var v C.misaligned + rt := reflect.TypeOf(&v).Elem() + if rt.NumField() != 2 || rt.Field(0).Name != "x" || rt.Field(1).Name != "_" { + t.Errorf("unexpected fields in C.misaligned:\n") + for i := 0; i < rt.NumField(); i++ { + t.Logf("%+v\n", rt.Field(i)) + } + } +} diff --git a/misc/cgo/test/issue7665.go b/misc/cgo/test/issue7665.go new file mode 100644 index 000000000..4f36dce75 --- /dev/null +++ b/misc/cgo/test/issue7665.go @@ -0,0 +1,25 @@ +// Copyright 2013 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 cgotest + +import ( + "testing" + "unsafe" +) + +// extern void f7665(void); +import "C" + +//export f7665 +func f7665() {} + +var bad7665 unsafe.Pointer = C.f7665 +var good7665 uintptr = uintptr(C.f7665) + +func test7665(t *testing.T) { + if bad7665 == nil || bad7665 != unsafe.Pointer(good7665) { + t.Errorf("ptrs = %p, %#x, want same non-nil pointer", bad7665, good7665) + } +} diff --git a/misc/cgo/test/issue7695_test.go b/misc/cgo/test/issue7695_test.go new file mode 100644 index 000000000..4bd6f8e73 --- /dev/null +++ b/misc/cgo/test/issue7695_test.go @@ -0,0 +1,27 @@ +// Copyright 2014 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. + +// Demo of deferred C function with untrue prototype +// breaking stack copying. See golang.org/issue/7695. + +package cgotest + +import ( + "testing" + + "./backdoor" +) + +func TestIssue7695(t *testing.T) { + defer backdoor.Issue7695(1, 0, 2, 0, 0, 3, 0, 4) + recurse(100) +} + +func recurse(n int) { + var x [128]int + n += x[0] + if n > 0 { + recurse(n - 1) + } +} diff --git a/misc/cgo/test/issue7786.go b/misc/cgo/test/issue7786.go new file mode 100644 index 000000000..b92763789 --- /dev/null +++ b/misc/cgo/test/issue7786.go @@ -0,0 +1,51 @@ +// Copyright 2013 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. + +// Issue 7786. No runtime test, just make sure that typedef and struct/union/class are interchangeable at compile time. + +package cgotest + +// struct test7786; +// typedef struct test7786 typedef_test7786; +// void f7786(struct test7786 *ctx) {} +// void g7786(typedef_test7786 *ctx) {} +// +// typedef struct body7786 typedef_body7786; +// struct body7786 { int x; }; +// void b7786(struct body7786 *ctx) {} +// void c7786(typedef_body7786 *ctx) {} +// +// typedef union union7786 typedef_union7786; +// void u7786(union union7786 *ctx) {} +// void v7786(typedef_union7786 *ctx) {} +import "C" + +func f() { + var x1 *C.typedef_test7786 + var x2 *C.struct_test7786 + x1 = x2 + x2 = x1 + C.f7786(x1) + C.f7786(x2) + C.g7786(x1) + C.g7786(x2) + + var b1 *C.typedef_body7786 + var b2 *C.struct_body7786 + b1 = b2 + b2 = b1 + C.b7786(b1) + C.b7786(b2) + C.c7786(b1) + C.c7786(b2) + + var u1 *C.typedef_union7786 + var u2 *C.union_union7786 + u1 = u2 + u2 = u1 + C.u7786(u1) + C.u7786(u2) + C.v7786(u1) + C.v7786(u2) +} diff --git a/misc/cgo/test/issue8148.go b/misc/cgo/test/issue8148.go new file mode 100644 index 000000000..8e4190848 --- /dev/null +++ b/misc/cgo/test/issue8148.go @@ -0,0 +1,31 @@ +// Copyright 2014 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. + +// Issue 8148. A typedef of an unnamed struct didn't work when used +// with an exported Go function. No runtime test; just make sure it +// compiles. + +package cgotest + +/* +typedef struct { int i; } T; + +int issue8148Callback(T*); + +static int get() { + T t; + t.i = 42; + return issue8148Callback(&t); +} +*/ +import "C" + +//export issue8148Callback +func issue8148Callback(t *C.T) C.int { + return t.i +} + +func Issue8148() int { + return int(C.get()) +} diff --git a/misc/cgo/test/issue8331.h b/misc/cgo/test/issue8331.h new file mode 100644 index 000000000..936ae9d5c --- /dev/null +++ b/misc/cgo/test/issue8331.h @@ -0,0 +1,7 @@ +// Copyright 2014 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. + +typedef struct { + int i; +} issue8331; diff --git a/misc/cgo/test/issue8331a.go b/misc/cgo/test/issue8331a.go new file mode 100644 index 000000000..7fa55be43 --- /dev/null +++ b/misc/cgo/test/issue8331a.go @@ -0,0 +1,15 @@ +// Copyright 2014 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. + +// Issue 8331. A typedef of an unnamed struct is the same struct when +// #include'd twice. No runtime test; just make sure it compiles. + +package cgotest + +// #include "issue8331.h" +import "C" + +func issue8331a() C.issue8331 { + return issue8331Var +} diff --git a/misc/cgo/test/issue8331b.go b/misc/cgo/test/issue8331b.go new file mode 100644 index 000000000..d52aed63e --- /dev/null +++ b/misc/cgo/test/issue8331b.go @@ -0,0 +1,13 @@ +// Copyright 2014 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. + +// Issue 8331. A typedef of an unnamed struct is the same struct when +// #include'd twice. No runtime test; just make sure it compiles. + +package cgotest + +// #include "issue8331.h" +import "C" + +var issue8331Var C.issue8331 diff --git a/misc/cgo/testcdefs/test.bash b/misc/cgo/testcdefs/test.bash index 1a14ad35c..01621a49a 100755 --- a/misc/cgo/testcdefs/test.bash +++ b/misc/cgo/testcdefs/test.bash @@ -12,5 +12,5 @@ done go build . && ./testcdefs EXIT=$? -rm -rf _obj main *.h +rm -rf _obj testcdefs *.h exit $EXIT diff --git a/misc/cgo/testso/cgoso_c.c b/misc/cgo/testso/cgoso_c.c index 27155c27f..7a38022b5 100644 --- a/misc/cgo/testso/cgoso_c.c +++ b/misc/cgo/testso/cgoso_c.c @@ -19,6 +19,11 @@ extern void goCallback(void); void setCallback(void *f) { (void)f; } #endif +// OpenBSD and older Darwin lack TLS support +#if !defined(__OpenBSD__) && !defined(__APPLE__) +__thread int tlsvar = 12345; +#endif + void sofunc(void) { goCallback(); diff --git a/misc/cgo/testso/cgoso_unix.go b/misc/cgo/testso/cgoso_unix.go new file mode 100644 index 000000000..7d5444cd1 --- /dev/null +++ b/misc/cgo/testso/cgoso_unix.go @@ -0,0 +1,20 @@ +// Copyright 2014 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. + +// +build dragonfly freebsd linux netbsd + +package cgosotest + +/* +extern int __thread tlsvar; +int *getTLS() { return &tlsvar; } +*/ +import "C" + +func init() { + if v := *C.getTLS(); v != 12345 { + println("got", v) + panic("BAD TLS value") + } +} diff --git a/misc/cgo/testtls/tls.go b/misc/cgo/testtls/tls.go index a9546a61c..8e9ee7003 100644 --- a/misc/cgo/testtls/tls.go +++ b/misc/cgo/testtls/tls.go @@ -15,14 +15,16 @@ import ( ) func testTLS(t *testing.T) { - var keyVal C.int = 1234 - runtime.LockOSThread() defer runtime.UnlockOSThread() - C.setTLS(C.int(keyVal)) - storedVal := C.getTLS() - if storedVal != keyVal { - t.Fatalf("stored %d want %d", storedVal, keyVal) + if val := C.getTLS(); val != 0 { + t.Fatalf("at start, C.getTLS() = %#x, want 0", val) + } + + const keyVal = 0x1234 + C.setTLS(keyVal) + if val := C.getTLS(); val != keyVal { + t.Fatalf("at end, C.getTLS() = %#x, want %#x", val, keyVal) } } diff --git a/misc/emacs/go-mode.el b/misc/emacs/go-mode.el index 75b28ac73..6333ff966 100644 --- a/misc/emacs/go-mode.el +++ b/misc/emacs/go-mode.el @@ -7,6 +7,7 @@ (require 'cl) (require 'etags) (require 'ffap) +(require 'find-file) (require 'ring) (require 'url) @@ -61,6 +62,7 @@ ;; macro. (if nil (declare-function go--position-bytes "go-mode" (point))) + ;; XEmacs unfortunately does not offer position-bytes. We can fall ;; back to just using (point), but it will be incorrect as soon as ;; multibyte characters are being used. @@ -167,6 +169,13 @@ from https://github.com/bradfitz/goimports." :type 'string :group 'go) +(defcustom go-other-file-alist + '(("_test\\.go\\'" (".go")) + ("\\.go\\'" ("_test.go"))) + "See the documentation of `ff-other-file-alist' for details." + :type '(repeat (list regexp (choice (repeat string) function))) + :group 'go) + (defface go-coverage-untracked '((t (:foreground "#505050"))) "Coverage color of untracked code." @@ -249,22 +258,23 @@ For mode=set, all covered lines will have this weight." "Syntax table for Go mode.") (defun go--build-font-lock-keywords () - ;; we cannot use 'symbols in regexp-opt because emacs <24 doesn't - ;; understand that + ;; we cannot use 'symbols in regexp-opt because GNU Emacs <24 + ;; doesn't understand that (append `((,(go--regexp-enclose-in-symbol (regexp-opt go-mode-keywords t)) . font-lock-keyword-face) - (,(go--regexp-enclose-in-symbol (regexp-opt go-builtins t)) . font-lock-builtin-face) + (,(concat "\\(" (go--regexp-enclose-in-symbol (regexp-opt go-builtins t)) "\\)[[:space:]]*(") 1 font-lock-builtin-face) (,(go--regexp-enclose-in-symbol (regexp-opt go-constants t)) . font-lock-constant-face) (,go-func-regexp 1 font-lock-function-name-face)) ;; function (not method) name (if go-fontify-function-calls `((,(concat "\\(" go-identifier-regexp "\\)[[:space:]]*(") 1 font-lock-function-name-face) ;; function call/method name (,(concat "[^[:word:][:multibyte:]](\\(" go-identifier-regexp "\\))[[:space:]]*(") 1 font-lock-function-name-face)) ;; bracketed function call - `((,go-func-meth-regexp 1 font-lock-function-name-face))) ;; method name + `((,go-func-meth-regexp 2 font-lock-function-name-face))) ;; method name `( - (,(concat (go--regexp-enclose-in-symbol "type") "[[:space:]]*\\([^[:space:]]+\\)") 1 font-lock-type-face) ;; types - (,(concat (go--regexp-enclose-in-symbol "type") "[[:space:]]*" go-identifier-regexp "[[:space:]]*" go-type-name-regexp) 1 font-lock-type-face) ;; types + ("\\(`[^`]*`\\)" 1 font-lock-multiline) ;; raw string literal, needed for font-lock-syntactic-keywords + (,(concat (go--regexp-enclose-in-symbol "type") "[[:space:]]+\\([^[:space:]]+\\)") 1 font-lock-type-face) ;; types + (,(concat (go--regexp-enclose-in-symbol "type") "[[:space:]]+" go-identifier-regexp "[[:space:]]*" go-type-name-regexp) 1 font-lock-type-face) ;; types (,(concat "[^[:word:][:multibyte:]]\\[\\([[:digit:]]+\\|\\.\\.\\.\\)?\\]" go-type-name-regexp) 2 font-lock-type-face) ;; Arrays/slices (,(concat "\\(" go-identifier-regexp "\\)" "{") 1 font-lock-type-face) (,(concat (go--regexp-enclose-in-symbol "map") "\\[[^]]+\\]" go-type-name-regexp) 1 font-lock-type-face) ;; map value type @@ -281,6 +291,14 @@ For mode=set, all covered lines will have this weight." (,(concat "^[[:space:]]*\\(" go-label-regexp "\\)[[:space:]]*:\\(\\S.\\|$\\)") 1 font-lock-constant-face) ;; Labels and compound literal fields (,(concat (go--regexp-enclose-in-symbol "\\(goto\\|break\\|continue\\)") "[[:space:]]*\\(" go-label-regexp "\\)") 2 font-lock-constant-face)))) ;; labels in goto/break/continue +(defconst go--font-lock-syntactic-keywords + ;; Override syntax property of raw string literal contents, so that + ;; backslashes have no special meaning in ``. Used in Emacs 23 or older. + '((go--match-raw-string-literal + (1 (7 . ?`)) + (2 (15 . nil)) ;; 15 = "generic string" + (3 (7 . ?`))))) + (defvar go-mode-map (let ((m (make-sparse-keymap))) (define-key m "}" #'go-mode-insert-and-indent) @@ -349,6 +367,18 @@ STOP-AT-STRING is not true, over strings." (- (point-max) (point-min)))) +(defun go--match-raw-string-literal (end) + "Search for a raw string literal. Set point to the end of the +occurence found on success. Returns nil on failure." + (when (search-forward "`" end t) + (goto-char (match-beginning 0)) + (if (go-in-string-or-comment-p) + (progn (goto-char (match-end 0)) + (go--match-raw-string-literal end)) + (when (looking-at "\\(`\\)\\([^`]*\\)\\(`\\)") + (goto-char (match-end 0)) + t)))) + (defun go-previous-line-has-dangling-op-p () "Returns non-nil if the current line is a continuation line." (let* ((cur-line (line-number-at-pos)) @@ -450,8 +480,9 @@ current line will be returned." (goto-char (- (point-max) pos)))))) (defun go-beginning-of-defun (&optional count) - (unless count (setq count 1)) - (let ((first t) failure) + (setq count (or count 1)) + (let ((first t) + failure) (dotimes (i (abs count)) (while (and (not failure) (or first (go-in-string-or-comment-p))) @@ -513,7 +544,7 @@ The following extra functions are defined: If you want to automatically run `gofmt' before saving a file, add the following hook to your emacs configuration: -\(add-hook 'before-save-hook 'gofmt-before-save) +\(add-hook 'before-save-hook #'gofmt-before-save) If you want to use `godef-jump' instead of etags (or similar), consider binding godef-jump to `M-.', which is the default key @@ -532,7 +563,8 @@ If you're looking for even more integration with Go, namely on-the-fly syntax checking, auto-completion and snippets, it is recommended that you look at goflymake \(https://github.com/dougm/goflymake), gocode -\(https://github.com/nsf/gocode) and yasnippet-go +\(https://github.com/nsf/gocode), go-eldoc +\(github.com/syohex/emacs-go-eldoc) and yasnippet-go \(https://github.com/dominikh/yasnippet-go)" ;; Font lock @@ -553,11 +585,16 @@ recommended that you look at goflymake (set (make-local-variable 'parse-sexp-lookup-properties) t) (if (boundp 'syntax-propertize-function) - (set (make-local-variable 'syntax-propertize-function) #'go-propertize-syntax)) + (set (make-local-variable 'syntax-propertize-function) #'go-propertize-syntax) + (set (make-local-variable 'font-lock-syntactic-keywords) + go--font-lock-syntactic-keywords) + (set (make-local-variable 'font-lock-multiline) t)) (set (make-local-variable 'go-dangling-cache) (make-hash-table :test 'eql)) (add-hook 'before-change-functions (lambda (x y) (setq go-dangling-cache (make-hash-table :test 'eql))) t t) + ;; ff-find-other-file + (setq ff-other-file-alist 'go-other-file-alist) (setq imenu-generic-expression '(("type" "^type *\\([^ \t\n\r\f]*\\)" 1) @@ -992,7 +1029,7 @@ description at POINT." "-f" (file-truename (buffer-file-name (go--coverage-origin-buffer))) "-o" - (number-to-string (go--position-bytes (point)))) + (number-to-string (go--position-bytes point))) (with-current-buffer outbuf (split-string (buffer-substring-no-properties (point-min) (point-max)) "\n"))))) @@ -1108,7 +1145,7 @@ divisor for FILE-NAME." (start-line start-column end-line end-column num count) (mapcar #'string-to-number rest) - (when (and (string= (file-name-nondirectory file) file-name)) + (when (string= (file-name-nondirectory file) file-name) (if (> count max-count) (setq max-count count)) (push (make-go--covered :start-line start-line diff --git a/misc/goplay/Makefile b/misc/goplay/Makefile deleted file mode 100644 index a6db75ac3..000000000 --- a/misc/goplay/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright 2010 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. - -goplay: goplay.go - go build goplay.go diff --git a/misc/goplay/README b/misc/goplay/README deleted file mode 100644 index e8a1d290f..000000000 --- a/misc/goplay/README +++ /dev/null @@ -1 +0,0 @@ -See doc.go. diff --git a/misc/goplay/doc.go b/misc/goplay/doc.go deleted file mode 100644 index 61e74a000..000000000 --- a/misc/goplay/doc.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2010 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. - -// Goplay is a web interface for experimenting with Go code. -// It is similar to the Go Playground: http://golang.org/doc/play/ -// -// To use goplay: -// $ cd $GOROOT/misc/goplay -// $ go run goplay.go -// and load http://localhost:3999/ in a web browser. -// -// You should see a Hello World program, which you can compile and run by -// pressing shift-enter. There is also a "compile-on-keypress" feature that can -// be enabled by checking a checkbox. -// -// WARNING! CUIDADO! ACHTUNG! ATTENZIONE! -// A note on security: anyone with access to the goplay web interface can run -// arbitrary code on your computer. Goplay is not a sandbox, and has no other -// security mechanisms. Do not deploy it in untrusted environments. -// By default, goplay listens only on localhost. This can be overridden with -// the -http parameter. Do so at your own risk. -package main diff --git a/misc/goplay/goplay.go b/misc/goplay/goplay.go deleted file mode 100644 index 9cb7d7bfb..000000000 --- a/misc/goplay/goplay.go +++ /dev/null @@ -1,288 +0,0 @@ -// Copyright 2010 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 main - -import ( - "bytes" - "flag" - "io/ioutil" - "log" - "net/http" - "os" - "os/exec" - "path/filepath" - "regexp" - "strconv" - "text/template" -) - -var ( - httpListen = flag.String("http", "127.0.0.1:3999", "host:port to listen on") - htmlOutput = flag.Bool("html", false, "render program output as HTML") -) - -var ( - // a source of numbers, for naming temporary files - uniq = make(chan int) -) - -func main() { - flag.Parse() - - // source of unique numbers - go func() { - for i := 0; ; i++ { - uniq <- i - } - }() - - http.HandleFunc("/", FrontPage) - http.HandleFunc("/compile", Compile) - log.Fatal(http.ListenAndServe(*httpListen, nil)) -} - -// FrontPage is an HTTP handler that renders the goplay interface. -// If a filename is supplied in the path component of the URI, -// its contents will be put in the interface's text area. -// Otherwise, the default "hello, world" program is displayed. -func FrontPage(w http.ResponseWriter, req *http.Request) { - data, err := ioutil.ReadFile(req.URL.Path[1:]) - if err != nil { - data = helloWorld - } - frontPage.Execute(w, data) -} - -// Compile is an HTTP handler that reads Go source code from the request, -// runs the program (returning any errors), -// and sends the program's output as the HTTP response. -func Compile(w http.ResponseWriter, req *http.Request) { - out, err := compile(req) - if err != nil { - error_(w, out, err) - return - } - - // write the output of x as the http response - if *htmlOutput { - w.Write(out) - } else { - output.Execute(w, out) - } -} - -var ( - commentRe = regexp.MustCompile(`(?m)^#.*\n`) - tmpdir string -) - -func init() { - // find real temporary directory (for rewriting filename in output) - var err error - tmpdir, err = filepath.EvalSymlinks(os.TempDir()) - if err != nil { - log.Fatal(err) - } -} - -func compile(req *http.Request) (out []byte, err error) { - // x is the base name for .go, .6, executable files - x := filepath.Join(tmpdir, "compile"+strconv.Itoa(<-uniq)) - src := x + ".go" - - // rewrite filename in error output - defer func() { - if err != nil { - // drop messages from the go tool like '# _/compile0' - out = commentRe.ReplaceAll(out, nil) - } - out = bytes.Replace(out, []byte(src+":"), []byte("main.go:"), -1) - }() - - // write body to x.go - body := new(bytes.Buffer) - if _, err = body.ReadFrom(req.Body); err != nil { - return - } - defer os.Remove(src) - if err = ioutil.WriteFile(src, body.Bytes(), 0666); err != nil { - return - } - - // go run x.go - dir, file := filepath.Split(src) - out, err = run(dir, "go", "run", file) - if err != nil { - return - } - return out, nil -} - -// error writes compile, link, or runtime errors to the HTTP connection. -// The JavaScript interface uses the 404 status code to identify the error. -func error_(w http.ResponseWriter, out []byte, err error) { - w.WriteHeader(404) - if out != nil { - output.Execute(w, out) - } else { - output.Execute(w, err.Error()) - } -} - -// run executes the specified command and returns its output and an error. -func run(dir string, args ...string) ([]byte, error) { - var buf bytes.Buffer - cmd := exec.Command(args[0], args[1:]...) - cmd.Dir = dir - cmd.Stdout = &buf - cmd.Stderr = cmd.Stdout - err := cmd.Run() - return buf.Bytes(), err -} - -var frontPage = template.Must(template.New("frontPage").Parse(frontPageText)) // HTML template -var output = template.Must(template.New("output").Parse(outputText)) // HTML template - -var outputText = `<pre>{{printf "%s" . |html}}</pre>` - -var frontPageText = `<!doctype html> -<html> -<head> -<style> -pre, textarea { - font-family: Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; - font-size: 100%; -} -.hints { - font-size: 0.8em; - text-align: right; -} -#edit, #output, #errors { width: 100%; text-align: left; } -#edit { height: 500px; } -#output { color: #00c; } -#errors { color: #c00; } -</style> -<script> - -function insertTabs(n) { - // find the selection start and end - var cont = document.getElementById("edit"); - var start = cont.selectionStart; - var end = cont.selectionEnd; - // split the textarea content into two, and insert n tabs - var v = cont.value; - var u = v.substr(0, start); - for (var i=0; i<n; i++) { - u += "\t"; - } - u += v.substr(end); - // set revised content - cont.value = u; - // reset caret position after inserted tabs - cont.selectionStart = start+n; - cont.selectionEnd = start+n; -} - -function autoindent(el) { - var curpos = el.selectionStart; - var tabs = 0; - while (curpos > 0) { - curpos--; - if (el.value[curpos] == "\t") { - tabs++; - } else if (tabs > 0 || el.value[curpos] == "\n") { - break; - } - } - setTimeout(function() { - insertTabs(tabs); - }, 1); -} - -function preventDefault(e) { - if (e.preventDefault) { - e.preventDefault(); - } else { - e.cancelBubble = true; - } -} - -function keyHandler(event) { - var e = window.event || event; - if (e.keyCode == 9) { // tab - insertTabs(1); - preventDefault(e); - return false; - } - if (e.keyCode == 13) { // enter - if (e.shiftKey) { // +shift - compile(e.target); - preventDefault(e); - return false; - } else { - autoindent(e.target); - } - } - return true; -} - -var xmlreq; - -function autocompile() { - if(!document.getElementById("autocompile").checked) { - return; - } - compile(); -} - -function compile() { - var prog = document.getElementById("edit").value; - var req = new XMLHttpRequest(); - xmlreq = req; - req.onreadystatechange = compileUpdate; - req.open("POST", "/compile", true); - req.setRequestHeader("Content-Type", "text/plain; charset=utf-8"); - req.send(prog); -} - -function compileUpdate() { - var req = xmlreq; - if(!req || req.readyState != 4) { - return; - } - if(req.status == 200) { - document.getElementById("output").innerHTML = req.responseText; - document.getElementById("errors").innerHTML = ""; - } else { - document.getElementById("errors").innerHTML = req.responseText; - document.getElementById("output").innerHTML = ""; - } -} -</script> -</head> -<body> -<table width="100%"><tr><td width="60%" valign="top"> -<textarea autofocus="true" id="edit" spellcheck="false" onkeydown="keyHandler(event);" onkeyup="autocompile();">{{printf "%s" . |html}}</textarea> -<div class="hints"> -(Shift-Enter to compile and run.) -<input type="checkbox" id="autocompile" value="checked" /> Compile and run after each keystroke -</div> -<td width="3%"> -<td width="27%" align="right" valign="top"> -<div id="output"></div> -</table> -<div id="errors"></div> -</body> -</html> -` - -var helloWorld = []byte(`package main - -import "fmt" - -func main() { - fmt.Println("hello, world") -} -`) diff --git a/misc/dist/darwin/Distribution b/misc/makerelease/darwin/Distribution index 8b764b69f..8b764b69f 100644 --- a/misc/dist/darwin/Distribution +++ b/misc/makerelease/darwin/Distribution diff --git a/misc/dist/darwin/Resources/bg.png b/misc/makerelease/darwin/Resources/bg.png Binary files differindex c3d8ea93a..c3d8ea93a 100644 --- a/misc/dist/darwin/Resources/bg.png +++ b/misc/makerelease/darwin/Resources/bg.png diff --git a/misc/dist/darwin/etc/paths.d/go b/misc/makerelease/darwin/etc/paths.d/go index 532e5f936..532e5f936 100644 --- a/misc/dist/darwin/etc/paths.d/go +++ b/misc/makerelease/darwin/etc/paths.d/go diff --git a/misc/dist/darwin/scripts/postinstall b/misc/makerelease/darwin/scripts/postinstall index 13f5bff9b..13f5bff9b 100755 --- a/misc/dist/darwin/scripts/postinstall +++ b/misc/makerelease/darwin/scripts/postinstall diff --git a/misc/dist/darwin/scripts/preinstall b/misc/makerelease/darwin/scripts/preinstall index 4cdaaa4bc..4cdaaa4bc 100755 --- a/misc/dist/darwin/scripts/preinstall +++ b/misc/makerelease/darwin/scripts/preinstall diff --git a/misc/dist/bindist.go b/misc/makerelease/makerelease.go index 223d2dc17..2496a865a 100644 --- a/misc/dist/bindist.go +++ b/misc/makerelease/makerelease.go @@ -12,14 +12,15 @@ import ( "bufio" "bytes" "compress/gzip" - "encoding/base64" + "crypto/sha1" + "encoding/json" "flag" "fmt" "io" "io/ioutil" "log" - "mime/multipart" "net/http" + "net/url" "os" "os/exec" "path" @@ -27,29 +28,36 @@ import ( "regexp" "runtime" "strings" + + "code.google.com/p/goauth2/oauth" + "code.google.com/p/google-api-go-client/storage/v1beta2" ) var ( tag = flag.String("tag", "release", "mercurial tag to check out") toolTag = flag.String("tool", defaultToolTag, "go.tools tag to check out") + tourTag = flag.String("tour", defaultTourTag, "go-tour tag to check out") repo = flag.String("repo", "https://code.google.com/p/go", "repo URL") verbose = flag.Bool("v", false, "verbose output") - upload = flag.Bool("upload", true, "upload resulting files to Google Code") - wxsFile = flag.String("wxs", "", "path to custom installer.wxs") + upload = flag.Bool("upload", false, "upload resulting files to Google Code") addLabel = flag.String("label", "", "additional label to apply to file when uploading") includeRace = flag.Bool("race", true, "build race detector packages") versionOverride = flag.String("version", "", "override version name") staticToolchain = flag.Bool("static", true, "try to build statically linked toolchain (only supported on ELF targets)") + tokenCache = flag.String("token", defaultCacheFile, "Authentication token cache file") + storageBucket = flag.String("bucket", "golang", "Cloud Storage Bucket") + uploadURL = flag.String("upload_url", defaultUploadURL, "Upload URL") - username, password string // for Google Code upload + defaultCacheFile = filepath.Join(os.Getenv("HOME"), ".makerelease-request-token") + defaultUploadURL = "http://golang.org/dl/upload" ) const ( - uploadURL = "https://go.googlecode.com/files" blogPath = "code.google.com/p/go.blog" toolPath = "code.google.com/p/go.tools" tourPath = "code.google.com/p/go-tour" defaultToolTag = "release-branch.go1.2" + defaultTourTag = "release-branch.go1.2" ) // Import paths for tool commands. @@ -90,7 +98,6 @@ var tourPackages = []string{ var tourContent = []string{ "content", - "js", "solutions", "static", "template", @@ -117,8 +124,13 @@ var staticLinkAvailable = []string{ "netbsd", } -var fileRe = regexp.MustCompile( - `^(go[a-z0-9-.]+)\.(src|([a-z0-9]+)-([a-z0-9]+)(?:-([a-z0-9.]))?)\.`) +var fileRe = regexp.MustCompile(`^(go[a-z0-9-.]+)\.(src|([a-z0-9]+)-([a-z0-9]+)(?:-([a-z0-9.]+))?)\.(tar\.gz|zip|pkg|msi)$`) + +// OAuth2-authenticated HTTP client used to make calls to Cloud Storage. +var oauthClient *http.Client + +// Builder key as specified in ~/.gobuildkey +var builderKey string func main() { flag.Usage = func() { @@ -136,7 +148,10 @@ func main() { if *upload { if err := readCredentials(); err != nil { - log.Println("readCredentials:", err) + log.Fatalln("readCredentials:", err) + } + if err := setupOAuthClient(); err != nil { + log.Fatalln("setupOAuthClient:", err) } } for _, targ := range flag.Args() { @@ -156,7 +171,7 @@ func main() { continue } if err := b.Upload(version, targ); err != nil { - log.Printf("%s: %v", targ, err) + log.Printf("uploading %s: %v", targ, err) } continue } @@ -206,7 +221,7 @@ type Build struct { } func (b *Build) Do() error { - work, err := ioutil.TempDir("", "bindist") + work, err := ioutil.TempDir("", "makerelease") if err != nil { return err } @@ -268,15 +283,7 @@ func (b *Build) Do() error { if err != nil { return err } - err = b.tools() - if err != nil { - return err - } - err = b.blog() - if err != nil { - return err - } - err = b.tour() + err = b.extras() } if err != nil { return err @@ -350,9 +357,11 @@ func (b *Build) Do() error { err = makeTar(targ, work) targs = append(targs, targ) + makerelease := filepath.Join(runtime.GOROOT(), "misc/makerelease") + // build pkg // arrange work so it's laid out as the dest filesystem - etc := filepath.Join(b.root, "misc/dist/darwin/etc") + etc := filepath.Join(makerelease, "darwin/etc") _, err = b.run(work, "cp", "-r", etc, ".") if err != nil { return err @@ -372,11 +381,10 @@ func (b *Build) Do() error { return err } defer os.RemoveAll(pkgdest) - dist := filepath.Join(runtime.GOROOT(), "misc/dist") _, err = b.run("", "pkgbuild", "--identifier", "com.googlecode.go", "--version", version, - "--scripts", filepath.Join(dist, "darwin/scripts"), + "--scripts", filepath.Join(makerelease, "darwin/scripts"), "--root", work, filepath.Join(pkgdest, "com.googlecode.go.pkg")) if err != nil { @@ -384,8 +392,8 @@ func (b *Build) Do() error { } targ = base + ".pkg" _, err = b.run("", "productbuild", - "--distribution", filepath.Join(dist, "darwin/Distribution"), - "--resources", filepath.Join(dist, "darwin/Resources"), + "--distribution", filepath.Join(makerelease, "darwin/Distribution"), + "--resources", filepath.Join(makerelease, "darwin/Resources"), "--package-path", pkgdest, targ) if err != nil { @@ -405,11 +413,8 @@ func (b *Build) Do() error { targs = append(targs, targ) // Create MSI installer. - win := filepath.Join(b.root, "misc/dist/windows") + win := filepath.Join(runtime.GOROOT(), "misc/makerelease/windows") installer := filepath.Join(win, "installer.wxs") - if *wxsFile != "" { - installer = *wxsFile - } appfiles := filepath.Join(work, "AppFiles.wxs") msi := filepath.Join(work, "installer.msi") // Gather files. @@ -454,33 +459,51 @@ func (b *Build) Do() error { for _, targ := range targs { err = b.Upload(version, targ) if err != nil { - return err + return fmt.Errorf("uploading %s: %v", targ, err) } } } return err } -func (b *Build) tools() error { +// extras fetches the go.tools, go.blog, and go-tour repositories, +// builds them and copies the resulting binaries and static assets +// to the new GOROOT. +func (b *Build) extras() error { defer b.cleanGopath() - // Fetch the tool packages (without building/installing). - args := append([]string{"get", "-d"}, toolPaths...) - _, err := b.run(b.gopath, filepath.Join(b.root, "bin", "go"), args...) - if err != nil { + if err := b.tools(); err != nil { + return err + } + if err := b.blog(); err != nil { return err } + return b.tour() +} - // Update the repo to the revision specified by -tool. - repoPath := filepath.Join(b.gopath, "src", filepath.FromSlash(toolPath)) - _, err = b.run(repoPath, "hg", "update", *toolTag) +func (b *Build) get(repoPath, revision string) error { + // Fetch the packages (without building/installing). + _, err := b.run(b.gopath, filepath.Join(b.root, "bin", "go"), + "get", "-d", repoPath+"/...") if err != nil { return err } + // Update the repo to the specified revision. + p := filepath.Join(b.gopath, "src", filepath.FromSlash(repoPath)) + _, err = b.run(p, "hg", "update", revision) + return err +} + +func (b *Build) tools() error { + // Fetch the go.tools repository. + if err := b.get(toolPath, *toolTag); err != nil { + return err + } + // Install tools. - args = append([]string{"install"}, toolPaths...) - _, err = b.run(b.gopath, filepath.Join(b.root, "bin", "go"), args...) + args := append([]string{"install"}, toolPaths...) + _, err := b.run(b.gopath, filepath.Join(b.root, "bin", "go"), args...) if err != nil { return err } @@ -509,8 +532,6 @@ func (b *Build) tools() error { } func (b *Build) blog() error { - defer b.cleanGopath() - // Fetch the blog repository. _, err := b.run(b.gopath, filepath.Join(b.root, "bin", "go"), "get", "-d", blogPath+"/blog") if err != nil { @@ -524,10 +545,14 @@ func (b *Build) blog() error { } func (b *Build) tour() error { - defer b.cleanGopath() + // Fetch the go-tour repository. + if err := b.get(tourPath, *tourTag); err != nil { + return err + } - // go get the gotour package. - _, err := b.run(b.gopath, filepath.Join(b.root, "bin", "go"), "get", tourPath+"/gotour") + // Build tour binary. + _, err := b.run(b.gopath, filepath.Join(b.root, "bin", "go"), + "install", tourPath+"/gotour") if err != nil { return err } @@ -632,121 +657,95 @@ func (b *Build) env() []string { } func (b *Build) Upload(version string, filename string) error { - // Prepare upload metadata. - var labels []string - os_, arch := b.OS, b.Arch - switch b.Arch { - case "386": - arch = "x86 32-bit" - case "amd64": - arch = "x86 64-bit" - } - if arch != "" { - labels = append(labels, "Arch-"+b.Arch) - } - var opsys, ftype string // labels - switch b.OS { - case "linux": - os_ = "Linux" - opsys = "Linux" - case "freebsd": - os_ = "FreeBSD" - opsys = "FreeBSD" - case "darwin": - os_ = "Mac OS X" - opsys = "OSX" - case "netbsd": - os_ = "NetBSD" - opsys = "NetBSD" - case "windows": - os_ = "Windows" - opsys = "Windows" - } - summary := fmt.Sprintf("%s %s (%s)", version, os_, arch) - switch { - case strings.HasSuffix(filename, ".msi"): - ftype = "Installer" - summary += " MSI installer" - case strings.HasSuffix(filename, ".pkg"): - ftype = "Installer" - summary += " PKG installer" - case strings.HasSuffix(filename, ".zip"): - ftype = "Archive" - summary += " ZIP archive" - case strings.HasSuffix(filename, ".tar.gz"): - ftype = "Archive" - summary += " tarball" - } - if b.Source { - ftype = "Source" - summary = fmt.Sprintf("%s (source only)", version) - } - if opsys != "" { - labels = append(labels, "OpSys-"+opsys) - } - if ftype != "" { - labels = append(labels, "Type-"+ftype) - } - if b.Label != "" { - labels = append(labels, b.Label) - } - if *addLabel != "" { - labels = append(labels, *addLabel) - } - // Put "Go" prefix on summary when it doesn't already begin with "go". - if !strings.HasPrefix(strings.ToLower(summary), "go") { - summary = "Go " + summary - } - - // Open file to upload. - f, err := os.Open(filename) + file, err := ioutil.ReadFile(filename) if err != nil { return err } - defer f.Close() - // Prepare multipart payload. - body := new(bytes.Buffer) - w := multipart.NewWriter(body) - if err := w.WriteField("summary", summary); err != nil { - return err - } - for _, l := range labels { - if err := w.WriteField("label", l); err != nil { - return err - } - } - fw, err := w.CreateFormFile("filename", filename) + svc, err := storage.New(oauthClient) if err != nil { return err } - if _, err = io.Copy(fw, f); err != nil { - return err + obj := &storage.Object{ + Acl: []*storage.ObjectAccessControl{{Entity: "allUsers", Role: "READER"}}, + Name: filename, } - if err := w.Close(); err != nil { + _, err = svc.Objects.Insert(*storageBucket, obj).Media(bytes.NewReader(file)).Do() + if err != nil { return err } - // Send the file to Google Code. - req, err := http.NewRequest("POST", uploadURL, body) + sum := fmt.Sprintf("%x", sha1.Sum(file)) + kind := "unknown" + switch { + case b.Source: + kind = "source" + case strings.HasSuffix(filename, ".tar.gz"), strings.HasSuffix(filename, ".zip"): + kind = "archive" + case strings.HasSuffix(filename, ".msi"), strings.HasSuffix(filename, ".pkg"): + kind = "installer" + } + req, err := json.Marshal(File{ + Filename: filename, + Version: version, + OS: b.OS, + Arch: b.Arch, + Checksum: sum, + Kind: kind, + }) if err != nil { return err } - token := fmt.Sprintf("%s:%s", username, password) - token = base64.StdEncoding.EncodeToString([]byte(token)) - req.Header.Set("Authorization", "Basic "+token) - req.Header.Set("Content-type", w.FormDataContentType()) - - resp, err := http.DefaultTransport.RoundTrip(req) + u := fmt.Sprintf("%s?%s", *uploadURL, url.Values{"key": []string{builderKey}}.Encode()) + resp, err := http.Post(u, "application/json", bytes.NewReader(req)) if err != nil { return err } - if resp.StatusCode/100 != 2 { - fmt.Fprintln(os.Stderr, "upload failed") - defer resp.Body.Close() - io.Copy(os.Stderr, resp.Body) - return fmt.Errorf("upload: %s", resp.Status) + defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + return fmt.Errorf("upload status: %v", resp.Status) + } + + return nil +} + +type File struct { + Filename string + OS string + Arch string + Version string + Checksum string `datastore:",noindex"` + Kind string // "archive", "installer", "source" +} + +func setupOAuthClient() error { + config := &oauth.Config{ + ClientId: "999119582588-h7kpj5pcm6d9solh5lgrbusmvvk4m9dn.apps.googleusercontent.com", + ClientSecret: "8YLFgOhXIELWbO", + Scope: storage.DevstorageRead_writeScope, + AuthURL: "https://accounts.google.com/o/oauth2/auth", + TokenURL: "https://accounts.google.com/o/oauth2/token", + TokenCache: oauth.CacheFile(*tokenCache), + RedirectURL: "oob", + } + transport := &oauth.Transport{Config: config} + if token, err := config.TokenCache.Token(); err != nil { + url := transport.Config.AuthCodeURL("") + fmt.Println("Visit the following URL, obtain an authentication" + + "code, and enter it below.") + fmt.Println(url) + fmt.Print("Enter authentication code: ") + code := "" + if _, err := fmt.Scan(&code); err != nil { + return err + } + if _, err := transport.Exchange(code); err != nil { + return err + } + } else { + transport.Token = token } + oauthClient = transport.Client() return nil } @@ -776,21 +775,11 @@ func readCredentials() error { return err } defer f.Close() - r := bufio.NewReader(f) - for i := 0; i < 3; i++ { - b, _, err := r.ReadLine() - if err != nil { - return err - } - b = bytes.TrimSpace(b) - switch i { - case 1: - username = string(b) - case 2: - password = string(b) - } + s := bufio.NewScanner(f) + if s.Scan() { + builderKey = s.Text() } - return nil + return s.Err() } func cp(dst, src string) error { diff --git a/misc/dist/windows/LICENSE.rtf b/misc/makerelease/windows/LICENSE.rtf Binary files differindex b2b0be62c..b2b0be62c 100644 --- a/misc/dist/windows/LICENSE.rtf +++ b/misc/makerelease/windows/LICENSE.rtf diff --git a/misc/dist/windows/README.txt b/misc/makerelease/windows/README.txt index 0cf828b24..0cf828b24 100644 --- a/misc/dist/windows/README.txt +++ b/misc/makerelease/windows/README.txt diff --git a/misc/dist/windows/images/Banner.jpg b/misc/makerelease/windows/images/Banner.jpg Binary files differindex ce65f63af..ce65f63af 100644 --- a/misc/dist/windows/images/Banner.jpg +++ b/misc/makerelease/windows/images/Banner.jpg diff --git a/misc/dist/windows/images/Dialog.jpg b/misc/makerelease/windows/images/Dialog.jpg Binary files differindex 1f0ec0a31..1f0ec0a31 100644 --- a/misc/dist/windows/images/Dialog.jpg +++ b/misc/makerelease/windows/images/Dialog.jpg diff --git a/misc/dist/windows/images/DialogLeft.jpg b/misc/makerelease/windows/images/DialogLeft.jpg Binary files differindex 73bab89b4..73bab89b4 100644 --- a/misc/dist/windows/images/DialogLeft.jpg +++ b/misc/makerelease/windows/images/DialogLeft.jpg diff --git a/misc/dist/windows/images/gopher.ico b/misc/makerelease/windows/images/gopher.ico Binary files differindex 2e861ebe0..2e861ebe0 100644 --- a/misc/dist/windows/images/gopher.ico +++ b/misc/makerelease/windows/images/gopher.ico diff --git a/misc/dist/windows/installer.wxs b/misc/makerelease/windows/installer.wxs index b170b98dc..b170b98dc 100644 --- a/misc/dist/windows/installer.wxs +++ b/misc/makerelease/windows/installer.wxs diff --git a/misc/nacl/README b/misc/nacl/README new file mode 100644 index 000000000..9cc2bda60 --- /dev/null +++ b/misc/nacl/README @@ -0,0 +1,63 @@ +Native Client +============= + +This document outlines the basics of building and developing the Go runtime and programs in the Native Client (NaCl) environment. + +Go 1.3 supports two architectures + + * nacl/386 which is standard 386. + * nacl/amd64p32 which is a 64 bit architecture, where the address space is limited to a 4gb window. + +For background it is recommended that you read http://golang.org/s/go13nacl. + +Prerequisites +------------- + +Native Client programs are executed inside a sandbox, the NaCl runtime. This runtime must be installed before you can use NaCl programs. + +The NaCl distribution comes with an installer which ensures you have access to the latest version of the runtime. The version tracks the Chrome numbering scheme. + +# Download NaCl + +Download nacl_sdk.zip file from https://developers.google.com/native-client/dev/sdk/download, and unpack it. I chose /opt/nacl_sdk + +# Update + +The zip file contains a small skeleton that can be used to download the correct sdk. These are released every 6-8 weeks, in line with Chrome releases. + + % cd /opt/nacl_sdk + % ./naclsdk update + +At this time pepper_33 is the stable version. If naclsdk downloads a later version, please adjust accordingly. + +The cmd/go helper scripts expect that the runtime loaders, sel_ldr_x86_{32,64} are in your path. I find it easiest to make a symlink from the NaCl distribution to my $GOPATH/bin directory. + + % ln -nfs /opt/nacl_sdk/pepper_33/tools/sel_ldr_x86_32 $GOPATH/bin/sel_ldr_x86_32 + % ln -nfs /opt/nacl_sdk/pepper_33/tools/sel_ldr_x86_64 $GOPATH/bin/sel_ldr_x86_64 + +Support scripts +--------------- + +Symlink the two scripts in this directory into your $PATH, just as you did with NaCl sdk above. + + % ln -nfs $GOROOT/go/misc/nacl/go_nacl_amd64p32_exec $GOPATH/bin/go_nacl_amd64p32_exec + % ln -nfs $GOROOT/go/misc/nacl/go_nacl_386_exec $GOPATH/bin/go_nacl_386_exec + +Building and testing +-------------------- + +Building for NaCl is similar to cross compiling for other platforms. However, as it is not possible to ever build in a `native` NaCl environment, the cmd/go tool has been enhanced to allow the full build, all.bash, to be executed, rather than just the compile stage, make.bash. + +The cmd/go tool knows that if GOOS is set to `nacl` it should not try to execute any binaries itself. Instead it passes their execution to a support script which sets up a Native Client environment and invokes the NaCl sandbox. + +The script's name has a special format, go_$GOOS_$GOARCH_exec, so cmd/go can find it. + +In short, if the support scripts are in place, the cmd/go tool can be used as per normal. + +# Build and test Go for NaCl + +NaCl does not permit direct file system access. Instead, package syscall provides a simulated file system served by in-memory data. The script nacltest.bash is the NaCl equivalent of all.bash. It builds NaCl with an in-memory file system containing files needed for tests, and then it runs the tests. + + % cd go/src + % env GOARCH=amd64p32 ./nacltest.bash + diff --git a/misc/nacl/go_nacl_386_exec b/misc/nacl/go_nacl_386_exec new file mode 100755 index 000000000..9cff63556 --- /dev/null +++ b/misc/nacl/go_nacl_386_exec @@ -0,0 +1,10 @@ +#!/bin/bash + +eval $(go env) + +export NACLENV_GOARCH=$GOARCH +export NACLENV_GOOS=$GOOS +export NACLENV_GOROOT=/go +export NACLENV_NACLPWD=$(pwd | sed "s;$GOROOT;/go;") + +exec sel_ldr_x86_32 -l /dev/null -S -e "$@" diff --git a/misc/nacl/go_nacl_amd64p32_exec b/misc/nacl/go_nacl_amd64p32_exec new file mode 100755 index 000000000..0a5ed651f --- /dev/null +++ b/misc/nacl/go_nacl_amd64p32_exec @@ -0,0 +1,10 @@ +#!/bin/bash + +eval $(go env) + +export NACLENV_GOARCH=$GOARCH +export NACLENV_GOOS=$GOOS +export NACLENV_GOROOT=/go +export NACLENV_NACLPWD=$(pwd | sed "s;$GOROOT;/go;") + +exec sel_ldr_x86_64 -l /dev/null -S -e "$@" diff --git a/misc/nacl/mkzip.go b/misc/nacl/mkzip.go new file mode 100644 index 000000000..7b2de7d47 --- /dev/null +++ b/misc/nacl/mkzip.go @@ -0,0 +1,220 @@ +// Copyright 2014 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. + +// Mkzip creates a zip file from a 'proto' file describing the contents. +// +// The proto file is inspired by the Plan 9 mkfs prototype file format. +// It describes a file tree, one directory per line, with leading tab +// indentation marking the tree structure. Each line contains a leading +// name field giving the name of the file to copy into the zip file, +// and then a sequence of optional key=value attributes to control +// the copy. The only known attribute is src=foo, meaning copy the +// actual data for the file (or directory) from an alternate location. +package main + +import ( + "archive/zip" + "bufio" + "flag" + "fmt" + "io" + "io/ioutil" + "log" + "os" + "path" + "path/filepath" + "strings" +) + +func usage() { + fmt.Fprintf(os.Stderr, "usage: mkzip [-r root] src.proto out.zip\n") + os.Exit(2) +} + +func sysfatal(format string, args ...interface{}) { + fmt.Fprintf(os.Stderr, "mkzip: %s\n", fmt.Sprintf(format, args...)) + os.Exit(2) +} + +var ( + root = flag.String("r", ".", "interpret source paths relative to this directory") + gopackage = flag.String("p", "", "write Go source file in this package") +) + +type stack struct { + name string + src string + depth int +} + +func main() { + log.SetFlags(0) + flag.Usage = usage + flag.Parse() + + args := flag.Args() + if len(args) != 2 { + usage() + } + + rf, err := os.Open(args[0]) + if err != nil { + sysfatal("%v", err) + } + r := bufio.NewScanner(rf) + + zf, err := os.Create(args[1]) + if err != nil { + sysfatal("%v", err) + } + + var w io.Writer = zf + if *gopackage != "" { + fmt.Fprintf(zf, "package %s\n\nfunc init() {\n\tunzip(\"", *gopackage) + gw := &goWriter{b: bufio.NewWriter(w)} + defer func() { + if err := gw.Close(); err != nil { + sysfatal("finishing Go output: %v", err) + } + }() + w = gw + } + z := zip.NewWriter(w) + + lineno := 0 + + addfile := func(info os.FileInfo, dst string, src string) { + zh, err := zip.FileInfoHeader(info) + if err != nil { + sysfatal("%s:%d: %s: %v", args[0], lineno, src, err) + } + zh.Name = dst + zh.Method = zip.Deflate + if info.IsDir() && !strings.HasSuffix(dst, "/") { + zh.Name += "/" + } + w, err := z.CreateHeader(zh) + if err != nil { + sysfatal("%s:%d: %s: %v", args[0], lineno, src, err) + } + if info.IsDir() { + return + } + r, err := os.Open(src) + if err != nil { + sysfatal("%s:%d: %s: %v", args[0], lineno, src, err) + } + defer r.Close() + if _, err := io.Copy(w, r); err != nil { + sysfatal("%s:%d: %s: %v", args[0], lineno, src, err) + } + } + + var stk []stack + + for r.Scan() { + line := r.Text() + lineno++ + s := strings.TrimLeft(line, "\t") + prefix, line := line[:len(line)-len(s)], s + if i := strings.Index(line, "#"); i >= 0 { + line = line[:i] + } + f := strings.Fields(line) + if len(f) == 0 { + continue + } + if strings.HasPrefix(line, " ") { + sysfatal("%s:%d: must use tabs for indentation", args[0], lineno) + } + depth := len(prefix) + for len(stk) > 0 && depth <= stk[len(stk)-1].depth { + stk = stk[:len(stk)-1] + } + parent := "" + psrc := *root + if len(stk) > 0 { + parent = stk[len(stk)-1].name + psrc = stk[len(stk)-1].src + } + if strings.Contains(f[0], "/") { + sysfatal("%s:%d: destination name cannot contain slash", args[0], lineno) + } + name := path.Join(parent, f[0]) + src := filepath.Join(psrc, f[0]) + for _, attr := range f[1:] { + i := strings.Index(attr, "=") + if i < 0 { + sysfatal("%s:%d: malformed attribute %q", args[0], lineno, attr) + } + key, val := attr[:i], attr[i+1:] + switch key { + case "src": + src = val + default: + sysfatal("%s:%d: unknown attribute %q", args[0], lineno, attr) + } + } + + stk = append(stk, stack{name: name, src: src, depth: depth}) + + if f[0] == "*" || f[0] == "+" { + if f[0] == "*" { + dir, err := ioutil.ReadDir(psrc) + if err != nil { + sysfatal("%s:%d: %v", args[0], lineno, err) + } + for _, d := range dir { + addfile(d, path.Join(parent, d.Name()), filepath.Join(psrc, d.Name())) + } + } else { + err := filepath.Walk(psrc, func(src string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if src == psrc { + return nil + } + if psrc == "." { + psrc = "" + } + name := path.Join(parent, filepath.ToSlash(src[len(psrc):])) + addfile(info, name, src) + return nil + }) + if err != nil { + sysfatal("%s:%d: %v", args[0], lineno, err) + } + } + continue + } + + fi, err := os.Stat(src) + if err != nil { + sysfatal("%s:%d: %v", args[0], lineno, err) + } + addfile(fi, name, src) + } + + if err := z.Close(); err != nil { + sysfatal("finishing zip file: %v", err) + } +} + +type goWriter struct { + b *bufio.Writer +} + +func (w *goWriter) Write(b []byte) (int, error) { + for _, c := range b { + fmt.Fprintf(w.b, "\\x%02x", c) + } + return len(b), nil +} + +func (w *goWriter) Close() error { + fmt.Fprintf(w.b, "\")\n}\n") + w.b.Flush() + return nil +} diff --git a/misc/nacl/testdata/bin/placeholder b/misc/nacl/testdata/bin/placeholder new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/misc/nacl/testdata/bin/placeholder diff --git a/misc/nacl/testdata/empty b/misc/nacl/testdata/empty new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/misc/nacl/testdata/empty diff --git a/misc/nacl/testdata/group b/misc/nacl/testdata/group new file mode 100644 index 000000000..eb7f9a307 --- /dev/null +++ b/misc/nacl/testdata/group @@ -0,0 +1,8 @@ +nobody:*:-2: +nogroup:*:-1: +wheel:*:0:root +daemon:*:1:root +kmem:*:2:root +sys:*:3:root +tty:*:4:root +operator:*:5:root diff --git a/misc/nacl/testdata/hosts b/misc/nacl/testdata/hosts new file mode 100644 index 000000000..75721cd5a --- /dev/null +++ b/misc/nacl/testdata/hosts @@ -0,0 +1 @@ +127.0.0.1 localhost diff --git a/misc/nacl/testdata/mime.types b/misc/nacl/testdata/mime.types new file mode 100644 index 000000000..2c41bd2c0 --- /dev/null +++ b/misc/nacl/testdata/mime.types @@ -0,0 +1,1596 @@ +# This file maps Internet media types to unique file extension(s). +# Although created for httpd, this file is used by many software systems +# and has been placed in the public domain for unlimited redisribution. +# +# The table below contains both registered and (common) unregistered types. +# A type that has no unique extension can be ignored -- they are listed +# here to guide configurations toward known types and to make it easier to +# identify "new" types. File extensions are also commonly used to indicate +# content languages and encodings, so choose them carefully. +# +# Internet media types should be registered as described in RFC 4288. +# The registry is at <http://www.iana.org/assignments/media-types/>. +# +# MIME type (lowercased) Extensions +# ============================================ ========== +# application/1d-interleaved-parityfec +# application/3gpp-ims+xml +# application/activemessage +application/andrew-inset ez +# application/applefile +application/applixware aw +application/atom+xml atom +application/atomcat+xml atomcat +# application/atomicmail +application/atomsvc+xml atomsvc +# application/auth-policy+xml +# application/batch-smtp +# application/beep+xml +# application/calendar+xml +# application/cals-1840 +# application/ccmp+xml +application/ccxml+xml ccxml +application/cdmi-capability cdmia +application/cdmi-container cdmic +application/cdmi-domain cdmid +application/cdmi-object cdmio +application/cdmi-queue cdmiq +# application/cea-2018+xml +# application/cellml+xml +# application/cfw +# application/cnrp+xml +# application/commonground +# application/conference-info+xml +# application/cpl+xml +# application/csta+xml +# application/cstadata+xml +application/cu-seeme cu +# application/cybercash +application/davmount+xml davmount +# application/dca-rft +# application/dec-dx +# application/dialog-info+xml +# application/dicom +# application/dns +application/docbook+xml dbk +# application/dskpp+xml +application/dssc+der dssc +application/dssc+xml xdssc +# application/dvcs +application/ecmascript ecma +# application/edi-consent +# application/edi-x12 +# application/edifact +application/emma+xml emma +# application/epp+xml +application/epub+zip epub +# application/eshop +# application/example +application/exi exi +# application/fastinfoset +# application/fastsoap +# application/fits +application/font-tdpfr pfr +# application/framework-attributes+xml +application/gml+xml gml +application/gpx+xml gpx +application/gxf gxf +# application/h224 +# application/held+xml +# application/http +application/hyperstudio stk +# application/ibe-key-request+xml +# application/ibe-pkg-reply+xml +# application/ibe-pp-data +# application/iges +# application/im-iscomposing+xml +# application/index +# application/index.cmd +# application/index.obj +# application/index.response +# application/index.vnd +application/inkml+xml ink inkml +# application/iotp +application/ipfix ipfix +# application/ipp +# application/isup +application/java-archive jar +application/java-serialized-object ser +application/java-vm class +application/javascript js +application/json json +application/jsonml+json jsonml +# application/kpml-request+xml +# application/kpml-response+xml +application/lost+xml lostxml +application/mac-binhex40 hqx +application/mac-compactpro cpt +# application/macwriteii +application/mads+xml mads +application/marc mrc +application/marcxml+xml mrcx +application/mathematica ma nb mb +# application/mathml-content+xml +# application/mathml-presentation+xml +application/mathml+xml mathml +# application/mbms-associated-procedure-description+xml +# application/mbms-deregister+xml +# application/mbms-envelope+xml +# application/mbms-msk+xml +# application/mbms-msk-response+xml +# application/mbms-protection-description+xml +# application/mbms-reception-report+xml +# application/mbms-register+xml +# application/mbms-register-response+xml +# application/mbms-user-service-description+xml +application/mbox mbox +# application/media_control+xml +application/mediaservercontrol+xml mscml +application/metalink+xml metalink +application/metalink4+xml meta4 +application/mets+xml mets +# application/mikey +application/mods+xml mods +# application/moss-keys +# application/moss-signature +# application/mosskey-data +# application/mosskey-request +application/mp21 m21 mp21 +application/mp4 mp4s +# application/mpeg4-generic +# application/mpeg4-iod +# application/mpeg4-iod-xmt +# application/msc-ivr+xml +# application/msc-mixer+xml +application/msword doc dot +application/mxf mxf +# application/nasdata +# application/news-checkgroups +# application/news-groupinfo +# application/news-transmission +# application/nss +# application/ocsp-request +# application/ocsp-response +application/octet-stream bin dms lrf mar so dist distz pkg bpk dump elc deploy mobipocket-ebook +application/oda oda +application/oebps-package+xml opf +application/ogg ogx +application/omdoc+xml omdoc +application/onenote onetoc onetoc2 onetmp onepkg +application/oxps oxps +# application/parityfec +application/patch-ops-error+xml xer +application/pdf pdf +application/pgp-encrypted pgp +# application/pgp-keys +application/pgp-signature asc sig +application/pics-rules prf +# application/pidf+xml +# application/pidf-diff+xml +application/pkcs10 p10 +application/pkcs7-mime p7m p7c +application/pkcs7-signature p7s +application/pkcs8 p8 +application/pkix-attr-cert ac +application/pkix-cert cer +application/pkix-crl crl +application/pkix-pkipath pkipath +application/pkixcmp pki +application/pls+xml pls +# application/poc-settings+xml +application/postscript ai eps ps +# application/prs.alvestrand.titrax-sheet +application/prs.cww cww +# application/prs.nprend +# application/prs.plucker +# application/prs.rdf-xml-crypt +# application/prs.xsf+xml +application/pskc+xml pskcxml +# application/qsig +application/rdf+xml rdf +application/reginfo+xml rif +application/relax-ng-compact-syntax rnc +# application/remote-printing +application/resource-lists+xml rl +application/resource-lists-diff+xml rld +# application/riscos +# application/rlmi+xml +application/rls-services+xml rs +application/rpki-ghostbusters gbr +application/rpki-manifest mft +application/rpki-roa roa +# application/rpki-updown +application/rsd+xml rsd +application/rss+xml rss +application/rtf rtf +# application/rtx +# application/samlassertion+xml +# application/samlmetadata+xml +application/sbml+xml sbml +application/scvp-cv-request scq +application/scvp-cv-response scs +application/scvp-vp-request spq +application/scvp-vp-response spp +application/sdp sdp +# application/set-payment +application/set-payment-initiation setpay +# application/set-registration +application/set-registration-initiation setreg +# application/sgml +# application/sgml-open-catalog +application/shf+xml shf +# application/sieve +# application/simple-filter+xml +# application/simple-message-summary +# application/simplesymbolcontainer +# application/slate +# application/smil +application/smil+xml smi smil +# application/soap+fastinfoset +# application/soap+xml +application/sparql-query rq +application/sparql-results+xml srx +# application/spirits-event+xml +application/srgs gram +application/srgs+xml grxml +application/sru+xml sru +application/ssdl+xml ssdl +application/ssml+xml ssml +# application/tamp-apex-update +# application/tamp-apex-update-confirm +# application/tamp-community-update +# application/tamp-community-update-confirm +# application/tamp-error +# application/tamp-sequence-adjust +# application/tamp-sequence-adjust-confirm +# application/tamp-status-query +# application/tamp-status-response +# application/tamp-update +# application/tamp-update-confirm +application/tei+xml tei teicorpus +application/thraud+xml tfi +# application/timestamp-query +# application/timestamp-reply +application/timestamped-data tsd +# application/tve-trigger +# application/ulpfec +# application/vcard+xml +# application/vemmi +# application/vividence.scriptfile +# application/vnd.3gpp.bsf+xml +application/vnd.3gpp.pic-bw-large plb +application/vnd.3gpp.pic-bw-small psb +application/vnd.3gpp.pic-bw-var pvb +# application/vnd.3gpp.sms +# application/vnd.3gpp2.bcmcsinfo+xml +# application/vnd.3gpp2.sms +application/vnd.3gpp2.tcap tcap +application/vnd.3m.post-it-notes pwn +application/vnd.accpac.simply.aso aso +application/vnd.accpac.simply.imp imp +application/vnd.acucobol acu +application/vnd.acucorp atc acutc +application/vnd.adobe.air-application-installer-package+zip air +application/vnd.adobe.formscentral.fcdt fcdt +application/vnd.adobe.fxp fxp fxpl +# application/vnd.adobe.partial-upload +application/vnd.adobe.xdp+xml xdp +application/vnd.adobe.xfdf xfdf +# application/vnd.aether.imp +# application/vnd.ah-barcode +application/vnd.ahead.space ahead +application/vnd.airzip.filesecure.azf azf +application/vnd.airzip.filesecure.azs azs +application/vnd.amazon.ebook azw +application/vnd.americandynamics.acc acc +application/vnd.amiga.ami ami +# application/vnd.amundsen.maze+xml +application/vnd.android.package-archive apk +application/vnd.anser-web-certificate-issue-initiation cii +application/vnd.anser-web-funds-transfer-initiation fti +application/vnd.antix.game-component atx +application/vnd.apple.installer+xml mpkg +application/vnd.apple.mpegurl m3u8 +# application/vnd.arastra.swi +application/vnd.aristanetworks.swi swi +application/vnd.astraea-software.iota iota +application/vnd.audiograph aep +# application/vnd.autopackage +# application/vnd.avistar+xml +application/vnd.blueice.multipass mpm +# application/vnd.bluetooth.ep.oob +application/vnd.bmi bmi +application/vnd.businessobjects rep +# application/vnd.cab-jscript +# application/vnd.canon-cpdl +# application/vnd.canon-lips +# application/vnd.cendio.thinlinc.clientconf +application/vnd.chemdraw+xml cdxml +application/vnd.chipnuts.karaoke-mmd mmd +application/vnd.cinderella cdy +# application/vnd.cirpack.isdn-ext +application/vnd.claymore cla +application/vnd.cloanto.rp9 rp9 +application/vnd.clonk.c4group c4g c4d c4f c4p c4u +application/vnd.cluetrust.cartomobile-config c11amc +application/vnd.cluetrust.cartomobile-config-pkg c11amz +# application/vnd.collection+json +# application/vnd.commerce-battelle +application/vnd.commonspace csp +application/vnd.contact.cmsg cdbcmsg +application/vnd.cosmocaller cmc +application/vnd.crick.clicker clkx +application/vnd.crick.clicker.keyboard clkk +application/vnd.crick.clicker.palette clkp +application/vnd.crick.clicker.template clkt +application/vnd.crick.clicker.wordbank clkw +application/vnd.criticaltools.wbs+xml wbs +application/vnd.ctc-posml pml +# application/vnd.ctct.ws+xml +# application/vnd.cups-pdf +# application/vnd.cups-postscript +application/vnd.cups-ppd ppd +# application/vnd.cups-raster +# application/vnd.cups-raw +# application/vnd.curl +application/vnd.curl.car car +application/vnd.curl.pcurl pcurl +# application/vnd.cybank +application/vnd.dart dart +application/vnd.data-vision.rdz rdz +application/vnd.dece.data uvf uvvf uvd uvvd +application/vnd.dece.ttml+xml uvt uvvt +application/vnd.dece.unspecified uvx uvvx +application/vnd.dece.zip uvz uvvz +application/vnd.denovo.fcselayout-link fe_launch +# application/vnd.dir-bi.plate-dl-nosuffix +application/vnd.dna dna +application/vnd.dolby.mlp mlp +# application/vnd.dolby.mobile.1 +# application/vnd.dolby.mobile.2 +application/vnd.dpgraph dpg +application/vnd.dreamfactory dfac +application/vnd.ds-keypoint kpxx +application/vnd.dvb.ait ait +# application/vnd.dvb.dvbj +# application/vnd.dvb.esgcontainer +# application/vnd.dvb.ipdcdftnotifaccess +# application/vnd.dvb.ipdcesgaccess +# application/vnd.dvb.ipdcesgaccess2 +# application/vnd.dvb.ipdcesgpdd +# application/vnd.dvb.ipdcroaming +# application/vnd.dvb.iptv.alfec-base +# application/vnd.dvb.iptv.alfec-enhancement +# application/vnd.dvb.notif-aggregate-root+xml +# application/vnd.dvb.notif-container+xml +# application/vnd.dvb.notif-generic+xml +# application/vnd.dvb.notif-ia-msglist+xml +# application/vnd.dvb.notif-ia-registration-request+xml +# application/vnd.dvb.notif-ia-registration-response+xml +# application/vnd.dvb.notif-init+xml +# application/vnd.dvb.pfr +application/vnd.dvb.service svc +# application/vnd.dxr +application/vnd.dynageo geo +# application/vnd.easykaraoke.cdgdownload +# application/vnd.ecdis-update +application/vnd.ecowin.chart mag +# application/vnd.ecowin.filerequest +# application/vnd.ecowin.fileupdate +# application/vnd.ecowin.series +# application/vnd.ecowin.seriesrequest +# application/vnd.ecowin.seriesupdate +# application/vnd.emclient.accessrequest+xml +application/vnd.enliven nml +# application/vnd.eprints.data+xml +application/vnd.epson.esf esf +application/vnd.epson.msf msf +application/vnd.epson.quickanime qam +application/vnd.epson.salt slt +application/vnd.epson.ssf ssf +# application/vnd.ericsson.quickcall +application/vnd.eszigno3+xml es3 et3 +# application/vnd.etsi.aoc+xml +# application/vnd.etsi.cug+xml +# application/vnd.etsi.iptvcommand+xml +# application/vnd.etsi.iptvdiscovery+xml +# application/vnd.etsi.iptvprofile+xml +# application/vnd.etsi.iptvsad-bc+xml +# application/vnd.etsi.iptvsad-cod+xml +# application/vnd.etsi.iptvsad-npvr+xml +# application/vnd.etsi.iptvservice+xml +# application/vnd.etsi.iptvsync+xml +# application/vnd.etsi.iptvueprofile+xml +# application/vnd.etsi.mcid+xml +# application/vnd.etsi.overload-control-policy-dataset+xml +# application/vnd.etsi.sci+xml +# application/vnd.etsi.simservs+xml +# application/vnd.etsi.tsl+xml +# application/vnd.etsi.tsl.der +# application/vnd.eudora.data +application/vnd.ezpix-album ez2 +application/vnd.ezpix-package ez3 +# application/vnd.f-secure.mobile +application/vnd.fdf fdf +application/vnd.fdsn.mseed mseed +application/vnd.fdsn.seed seed dataless +# application/vnd.ffsns +# application/vnd.fints +application/vnd.flographit gph +application/vnd.fluxtime.clip ftc +# application/vnd.font-fontforge-sfd +application/vnd.framemaker fm frame maker book +application/vnd.frogans.fnc fnc +application/vnd.frogans.ltf ltf +application/vnd.fsc.weblaunch fsc +application/vnd.fujitsu.oasys oas +application/vnd.fujitsu.oasys2 oa2 +application/vnd.fujitsu.oasys3 oa3 +application/vnd.fujitsu.oasysgp fg5 +application/vnd.fujitsu.oasysprs bh2 +# application/vnd.fujixerox.art-ex +# application/vnd.fujixerox.art4 +# application/vnd.fujixerox.hbpl +application/vnd.fujixerox.ddd ddd +application/vnd.fujixerox.docuworks xdw +application/vnd.fujixerox.docuworks.binder xbd +# application/vnd.fut-misnet +application/vnd.fuzzysheet fzs +application/vnd.genomatix.tuxedo txd +# application/vnd.geocube+xml +application/vnd.geogebra.file ggb +application/vnd.geogebra.tool ggt +application/vnd.geometry-explorer gex gre +application/vnd.geonext gxt +application/vnd.geoplan g2w +application/vnd.geospace g3w +# application/vnd.globalplatform.card-content-mgt +# application/vnd.globalplatform.card-content-mgt-response +application/vnd.gmx gmx +application/vnd.google-earth.kml+xml kml +application/vnd.google-earth.kmz kmz +application/vnd.grafeq gqf gqs +# application/vnd.gridmp +application/vnd.groove-account gac +application/vnd.groove-help ghf +application/vnd.groove-identity-message gim +application/vnd.groove-injector grv +application/vnd.groove-tool-message gtm +application/vnd.groove-tool-template tpl +application/vnd.groove-vcard vcg +# application/vnd.hal+json +application/vnd.hal+xml hal +application/vnd.handheld-entertainment+xml zmm +application/vnd.hbci hbci +# application/vnd.hcl-bireports +application/vnd.hhe.lesson-player les +application/vnd.hp-hpgl hpgl +application/vnd.hp-hpid hpid +application/vnd.hp-hps hps +application/vnd.hp-jlyt jlt +application/vnd.hp-pcl pcl +application/vnd.hp-pclxl pclxl +# application/vnd.httphone +application/vnd.hydrostatix.sof-data sfd-hdstx +# application/vnd.hzn-3d-crossword +# application/vnd.ibm.afplinedata +# application/vnd.ibm.electronic-media +application/vnd.ibm.minipay mpy +application/vnd.ibm.modcap afp listafp list3820 +application/vnd.ibm.rights-management irm +application/vnd.ibm.secure-container sc +application/vnd.iccprofile icc icm +application/vnd.igloader igl +application/vnd.immervision-ivp ivp +application/vnd.immervision-ivu ivu +# application/vnd.informedcontrol.rms+xml +# application/vnd.informix-visionary +# application/vnd.infotech.project +# application/vnd.infotech.project+xml +# application/vnd.innopath.wamp.notification +application/vnd.insors.igm igm +application/vnd.intercon.formnet xpw xpx +application/vnd.intergeo i2g +# application/vnd.intertrust.digibox +# application/vnd.intertrust.nncp +application/vnd.intu.qbo qbo +application/vnd.intu.qfx qfx +# application/vnd.iptc.g2.conceptitem+xml +# application/vnd.iptc.g2.knowledgeitem+xml +# application/vnd.iptc.g2.newsitem+xml +# application/vnd.iptc.g2.newsmessage+xml +# application/vnd.iptc.g2.packageitem+xml +# application/vnd.iptc.g2.planningitem+xml +application/vnd.ipunplugged.rcprofile rcprofile +application/vnd.irepository.package+xml irp +application/vnd.is-xpr xpr +application/vnd.isac.fcs fcs +application/vnd.jam jam +# application/vnd.japannet-directory-service +# application/vnd.japannet-jpnstore-wakeup +# application/vnd.japannet-payment-wakeup +# application/vnd.japannet-registration +# application/vnd.japannet-registration-wakeup +# application/vnd.japannet-setstore-wakeup +# application/vnd.japannet-verification +# application/vnd.japannet-verification-wakeup +application/vnd.jcp.javame.midlet-rms rms +application/vnd.jisp jisp +application/vnd.joost.joda-archive joda +application/vnd.kahootz ktz ktr +application/vnd.kde.karbon karbon +application/vnd.kde.kchart chrt +application/vnd.kde.kformula kfo +application/vnd.kde.kivio flw +application/vnd.kde.kontour kon +application/vnd.kde.kpresenter kpr kpt +application/vnd.kde.kspread ksp +application/vnd.kde.kword kwd kwt +application/vnd.kenameaapp htke +application/vnd.kidspiration kia +application/vnd.kinar kne knp +application/vnd.koan skp skd skt skm +application/vnd.kodak-descriptor sse +application/vnd.las.las+xml lasxml +# application/vnd.liberty-request+xml +application/vnd.llamagraphics.life-balance.desktop lbd +application/vnd.llamagraphics.life-balance.exchange+xml lbe +application/vnd.lotus-1-2-3 123 +application/vnd.lotus-approach apr +application/vnd.lotus-freelance pre +application/vnd.lotus-notes nsf +application/vnd.lotus-organizer org +application/vnd.lotus-screencam scm +application/vnd.lotus-wordpro lwp +application/vnd.macports.portpkg portpkg +# application/vnd.marlin.drm.actiontoken+xml +# application/vnd.marlin.drm.conftoken+xml +# application/vnd.marlin.drm.license+xml +# application/vnd.marlin.drm.mdcf +application/vnd.mcd mcd +application/vnd.medcalcdata mc1 +application/vnd.mediastation.cdkey cdkey +# application/vnd.meridian-slingshot +application/vnd.mfer mwf +application/vnd.mfmp mfm +application/vnd.micrografx.flo flo +application/vnd.micrografx.igx igx +application/vnd.mif mif +# application/vnd.minisoft-hp3000-save +# application/vnd.mitsubishi.misty-guard.trustweb +application/vnd.mobius.daf daf +application/vnd.mobius.dis dis +application/vnd.mobius.mbk mbk +application/vnd.mobius.mqy mqy +application/vnd.mobius.msl msl +application/vnd.mobius.plc plc +application/vnd.mobius.txf txf +application/vnd.mophun.application mpn +application/vnd.mophun.certificate mpc +# application/vnd.motorola.flexsuite +# application/vnd.motorola.flexsuite.adsi +# application/vnd.motorola.flexsuite.fis +# application/vnd.motorola.flexsuite.gotap +# application/vnd.motorola.flexsuite.kmr +# application/vnd.motorola.flexsuite.ttc +# application/vnd.motorola.flexsuite.wem +# application/vnd.motorola.iprm +application/vnd.mozilla.xul+xml xul +application/vnd.ms-artgalry cil +# application/vnd.ms-asf +application/vnd.ms-cab-compressed cab +# application/vnd.ms-color.iccprofile +application/vnd.ms-excel xls xlm xla xlc xlt xlw +application/vnd.ms-excel.addin.macroenabled.12 xlam +application/vnd.ms-excel.sheet.binary.macroenabled.12 xlsb +application/vnd.ms-excel.sheet.macroenabled.12 xlsm +application/vnd.ms-excel.template.macroenabled.12 xltm +application/vnd.ms-fontobject eot +application/vnd.ms-htmlhelp chm +application/vnd.ms-ims ims +application/vnd.ms-lrm lrm +# application/vnd.ms-office.activex+xml +application/vnd.ms-officetheme thmx +# application/vnd.ms-opentype +# application/vnd.ms-package.obfuscated-opentype +application/vnd.ms-pki.seccat cat +application/vnd.ms-pki.stl stl +# application/vnd.ms-playready.initiator+xml +application/vnd.ms-powerpoint ppt pps pot +application/vnd.ms-powerpoint.addin.macroenabled.12 ppam +application/vnd.ms-powerpoint.presentation.macroenabled.12 pptm +application/vnd.ms-powerpoint.slide.macroenabled.12 sldm +application/vnd.ms-powerpoint.slideshow.macroenabled.12 ppsm +application/vnd.ms-powerpoint.template.macroenabled.12 potm +# application/vnd.ms-printing.printticket+xml +application/vnd.ms-project mpp mpt +# application/vnd.ms-tnef +# application/vnd.ms-wmdrm.lic-chlg-req +# application/vnd.ms-wmdrm.lic-resp +# application/vnd.ms-wmdrm.meter-chlg-req +# application/vnd.ms-wmdrm.meter-resp +application/vnd.ms-word.document.macroenabled.12 docm +application/vnd.ms-word.template.macroenabled.12 dotm +application/vnd.ms-works wps wks wcm wdb +application/vnd.ms-wpl wpl +application/vnd.ms-xpsdocument xps +application/vnd.mseq mseq +# application/vnd.msign +# application/vnd.multiad.creator +# application/vnd.multiad.creator.cif +# application/vnd.music-niff +application/vnd.musician mus +application/vnd.muvee.style msty +application/vnd.mynfc taglet +# application/vnd.ncd.control +# application/vnd.ncd.reference +# application/vnd.nervana +# application/vnd.netfpx +application/vnd.neurolanguage.nlu nlu +application/vnd.nitf ntf nitf +application/vnd.noblenet-directory nnd +application/vnd.noblenet-sealer nns +application/vnd.noblenet-web nnw +# application/vnd.nokia.catalogs +# application/vnd.nokia.conml+wbxml +# application/vnd.nokia.conml+xml +# application/vnd.nokia.isds-radio-presets +# application/vnd.nokia.iptv.config+xml +# application/vnd.nokia.landmark+wbxml +# application/vnd.nokia.landmark+xml +# application/vnd.nokia.landmarkcollection+xml +# application/vnd.nokia.n-gage.ac+xml +application/vnd.nokia.n-gage.data ngdat +application/vnd.nokia.n-gage.symbian.install n-gage +# application/vnd.nokia.ncd +# application/vnd.nokia.pcd+wbxml +# application/vnd.nokia.pcd+xml +application/vnd.nokia.radio-preset rpst +application/vnd.nokia.radio-presets rpss +application/vnd.novadigm.edm edm +application/vnd.novadigm.edx edx +application/vnd.novadigm.ext ext +# application/vnd.ntt-local.file-transfer +# application/vnd.ntt-local.sip-ta_remote +# application/vnd.ntt-local.sip-ta_tcp_stream +application/vnd.oasis.opendocument.chart odc +application/vnd.oasis.opendocument.chart-template otc +application/vnd.oasis.opendocument.database odb +application/vnd.oasis.opendocument.formula odf +application/vnd.oasis.opendocument.formula-template odft +application/vnd.oasis.opendocument.graphics odg +application/vnd.oasis.opendocument.graphics-template otg +application/vnd.oasis.opendocument.image odi +application/vnd.oasis.opendocument.image-template oti +application/vnd.oasis.opendocument.presentation odp +application/vnd.oasis.opendocument.presentation-template otp +application/vnd.oasis.opendocument.spreadsheet ods +application/vnd.oasis.opendocument.spreadsheet-template ots +application/vnd.oasis.opendocument.text odt +application/vnd.oasis.opendocument.text-master odm +application/vnd.oasis.opendocument.text-template ott +application/vnd.oasis.opendocument.text-web oth +# application/vnd.obn +# application/vnd.oftn.l10n+json +# application/vnd.oipf.contentaccessdownload+xml +# application/vnd.oipf.contentaccessstreaming+xml +# application/vnd.oipf.cspg-hexbinary +# application/vnd.oipf.dae.svg+xml +# application/vnd.oipf.dae.xhtml+xml +# application/vnd.oipf.mippvcontrolmessage+xml +# application/vnd.oipf.pae.gem +# application/vnd.oipf.spdiscovery+xml +# application/vnd.oipf.spdlist+xml +# application/vnd.oipf.ueprofile+xml +# application/vnd.oipf.userprofile+xml +application/vnd.olpc-sugar xo +# application/vnd.oma-scws-config +# application/vnd.oma-scws-http-request +# application/vnd.oma-scws-http-response +# application/vnd.oma.bcast.associated-procedure-parameter+xml +# application/vnd.oma.bcast.drm-trigger+xml +# application/vnd.oma.bcast.imd+xml +# application/vnd.oma.bcast.ltkm +# application/vnd.oma.bcast.notification+xml +# application/vnd.oma.bcast.provisioningtrigger +# application/vnd.oma.bcast.sgboot +# application/vnd.oma.bcast.sgdd+xml +# application/vnd.oma.bcast.sgdu +# application/vnd.oma.bcast.simple-symbol-container +# application/vnd.oma.bcast.smartcard-trigger+xml +# application/vnd.oma.bcast.sprov+xml +# application/vnd.oma.bcast.stkm +# application/vnd.oma.cab-address-book+xml +# application/vnd.oma.cab-feature-handler+xml +# application/vnd.oma.cab-pcc+xml +# application/vnd.oma.cab-user-prefs+xml +# application/vnd.oma.dcd +# application/vnd.oma.dcdc +application/vnd.oma.dd2+xml dd2 +# application/vnd.oma.drm.risd+xml +# application/vnd.oma.group-usage-list+xml +# application/vnd.oma.pal+xml +# application/vnd.oma.poc.detailed-progress-report+xml +# application/vnd.oma.poc.final-report+xml +# application/vnd.oma.poc.groups+xml +# application/vnd.oma.poc.invocation-descriptor+xml +# application/vnd.oma.poc.optimized-progress-report+xml +# application/vnd.oma.push +# application/vnd.oma.scidm.messages+xml +# application/vnd.oma.xcap-directory+xml +# application/vnd.omads-email+xml +# application/vnd.omads-file+xml +# application/vnd.omads-folder+xml +# application/vnd.omaloc-supl-init +application/vnd.openofficeorg.extension oxt +# application/vnd.openxmlformats-officedocument.custom-properties+xml +# application/vnd.openxmlformats-officedocument.customxmlproperties+xml +# application/vnd.openxmlformats-officedocument.drawing+xml +# application/vnd.openxmlformats-officedocument.drawingml.chart+xml +# application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml +# application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml +# application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml +# application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml +# application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml +# application/vnd.openxmlformats-officedocument.extended-properties+xml +# application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml +# application/vnd.openxmlformats-officedocument.presentationml.comments+xml +# application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml +# application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml +# application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml +application/vnd.openxmlformats-officedocument.presentationml.presentation pptx +# application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml +# application/vnd.openxmlformats-officedocument.presentationml.presprops+xml +application/vnd.openxmlformats-officedocument.presentationml.slide sldx +# application/vnd.openxmlformats-officedocument.presentationml.slide+xml +# application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml +# application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml +application/vnd.openxmlformats-officedocument.presentationml.slideshow ppsx +# application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml +# application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml +# application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml +# application/vnd.openxmlformats-officedocument.presentationml.tags+xml +application/vnd.openxmlformats-officedocument.presentationml.template potx +# application/vnd.openxmlformats-officedocument.presentationml.template.main+xml +# application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml +application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx +# application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml +application/vnd.openxmlformats-officedocument.spreadsheetml.template xltx +# application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml +# application/vnd.openxmlformats-officedocument.theme+xml +# application/vnd.openxmlformats-officedocument.themeoverride+xml +# application/vnd.openxmlformats-officedocument.vmldrawing +# application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml +application/vnd.openxmlformats-officedocument.wordprocessingml.document docx +# application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml +application/vnd.openxmlformats-officedocument.wordprocessingml.template dotx +# application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml +# application/vnd.openxmlformats-package.core-properties+xml +# application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml +# application/vnd.openxmlformats-package.relationships+xml +# application/vnd.quobject-quoxdocument +# application/vnd.osa.netdeploy +application/vnd.osgeo.mapguide.package mgp +# application/vnd.osgi.bundle +application/vnd.osgi.dp dp +application/vnd.osgi.subsystem esa +# application/vnd.otps.ct-kip+xml +application/vnd.palm pdb pqa oprc +# application/vnd.paos.xml +application/vnd.pawaafile paw +application/vnd.pg.format str +application/vnd.pg.osasli ei6 +# application/vnd.piaccess.application-licence +application/vnd.picsel efif +application/vnd.pmi.widget wg +# application/vnd.poc.group-advertisement+xml +application/vnd.pocketlearn plf +application/vnd.powerbuilder6 pbd +# application/vnd.powerbuilder6-s +# application/vnd.powerbuilder7 +# application/vnd.powerbuilder7-s +# application/vnd.powerbuilder75 +# application/vnd.powerbuilder75-s +# application/vnd.preminet +application/vnd.previewsystems.box box +application/vnd.proteus.magazine mgz +application/vnd.publishare-delta-tree qps +application/vnd.pvi.ptid1 ptid +# application/vnd.pwg-multiplexed +# application/vnd.pwg-xhtml-print+xml +# application/vnd.qualcomm.brew-app-res +application/vnd.quark.quarkxpress qxd qxt qwd qwt qxl qxb +# application/vnd.radisys.moml+xml +# application/vnd.radisys.msml+xml +# application/vnd.radisys.msml-audit+xml +# application/vnd.radisys.msml-audit-conf+xml +# application/vnd.radisys.msml-audit-conn+xml +# application/vnd.radisys.msml-audit-dialog+xml +# application/vnd.radisys.msml-audit-stream+xml +# application/vnd.radisys.msml-conf+xml +# application/vnd.radisys.msml-dialog+xml +# application/vnd.radisys.msml-dialog-base+xml +# application/vnd.radisys.msml-dialog-fax-detect+xml +# application/vnd.radisys.msml-dialog-fax-sendrecv+xml +# application/vnd.radisys.msml-dialog-group+xml +# application/vnd.radisys.msml-dialog-speech+xml +# application/vnd.radisys.msml-dialog-transform+xml +# application/vnd.rainstor.data +# application/vnd.rapid +application/vnd.realvnc.bed bed +application/vnd.recordare.musicxml mxl +application/vnd.recordare.musicxml+xml musicxml +# application/vnd.renlearn.rlprint +application/vnd.rig.cryptonote cryptonote +application/vnd.rim.cod cod +application/vnd.rn-realmedia rm +application/vnd.rn-realmedia-vbr rmvb +application/vnd.route66.link66+xml link66 +# application/vnd.rs-274x +# application/vnd.ruckus.download +# application/vnd.s3sms +application/vnd.sailingtracker.track st +# application/vnd.sbm.cid +# application/vnd.sbm.mid2 +# application/vnd.scribus +# application/vnd.sealed.3df +# application/vnd.sealed.csf +# application/vnd.sealed.doc +# application/vnd.sealed.eml +# application/vnd.sealed.mht +# application/vnd.sealed.net +# application/vnd.sealed.ppt +# application/vnd.sealed.tiff +# application/vnd.sealed.xls +# application/vnd.sealedmedia.softseal.html +# application/vnd.sealedmedia.softseal.pdf +application/vnd.seemail see +application/vnd.sema sema +application/vnd.semd semd +application/vnd.semf semf +application/vnd.shana.informed.formdata ifm +application/vnd.shana.informed.formtemplate itp +application/vnd.shana.informed.interchange iif +application/vnd.shana.informed.package ipk +application/vnd.simtech-mindmapper twd twds +application/vnd.smaf mmf +# application/vnd.smart.notebook +application/vnd.smart.teacher teacher +# application/vnd.software602.filler.form+xml +# application/vnd.software602.filler.form-xml-zip +application/vnd.solent.sdkm+xml sdkm sdkd +application/vnd.spotfire.dxp dxp +application/vnd.spotfire.sfs sfs +# application/vnd.sss-cod +# application/vnd.sss-dtf +# application/vnd.sss-ntf +application/vnd.stardivision.calc sdc +application/vnd.stardivision.draw sda +application/vnd.stardivision.impress sdd +application/vnd.stardivision.math smf +application/vnd.stardivision.writer sdw vor +application/vnd.stardivision.writer-global sgl +application/vnd.stepmania.package smzip +application/vnd.stepmania.stepchart sm +# application/vnd.street-stream +application/vnd.sun.xml.calc sxc +application/vnd.sun.xml.calc.template stc +application/vnd.sun.xml.draw sxd +application/vnd.sun.xml.draw.template std +application/vnd.sun.xml.impress sxi +application/vnd.sun.xml.impress.template sti +application/vnd.sun.xml.math sxm +application/vnd.sun.xml.writer sxw +application/vnd.sun.xml.writer.global sxg +application/vnd.sun.xml.writer.template stw +# application/vnd.sun.wadl+xml +application/vnd.sus-calendar sus susp +application/vnd.svd svd +# application/vnd.swiftview-ics +application/vnd.symbian.install sis sisx +application/vnd.syncml+xml xsm +application/vnd.syncml.dm+wbxml bdm +application/vnd.syncml.dm+xml xdm +# application/vnd.syncml.dm.notification +# application/vnd.syncml.ds.notification +application/vnd.tao.intent-module-archive tao +application/vnd.tcpdump.pcap pcap cap dmp +application/vnd.tmobile-livetv tmo +application/vnd.trid.tpt tpt +application/vnd.triscape.mxs mxs +application/vnd.trueapp tra +# application/vnd.truedoc +# application/vnd.ubisoft.webplayer +application/vnd.ufdl ufd ufdl +application/vnd.uiq.theme utz +application/vnd.umajin umj +application/vnd.unity unityweb +application/vnd.uoml+xml uoml +# application/vnd.uplanet.alert +# application/vnd.uplanet.alert-wbxml +# application/vnd.uplanet.bearer-choice +# application/vnd.uplanet.bearer-choice-wbxml +# application/vnd.uplanet.cacheop +# application/vnd.uplanet.cacheop-wbxml +# application/vnd.uplanet.channel +# application/vnd.uplanet.channel-wbxml +# application/vnd.uplanet.list +# application/vnd.uplanet.list-wbxml +# application/vnd.uplanet.listcmd +# application/vnd.uplanet.listcmd-wbxml +# application/vnd.uplanet.signal +application/vnd.vcx vcx +# application/vnd.vd-study +# application/vnd.vectorworks +# application/vnd.verimatrix.vcas +# application/vnd.vidsoft.vidconference +application/vnd.visio vsd vst vss vsw +application/vnd.visionary vis +# application/vnd.vividence.scriptfile +application/vnd.vsf vsf +# application/vnd.wap.sic +# application/vnd.wap.slc +application/vnd.wap.wbxml wbxml +application/vnd.wap.wmlc wmlc +application/vnd.wap.wmlscriptc wmlsc +application/vnd.webturbo wtb +# application/vnd.wfa.wsc +# application/vnd.wmc +# application/vnd.wmf.bootstrap +# application/vnd.wolfram.mathematica +# application/vnd.wolfram.mathematica.package +application/vnd.wolfram.player nbp +application/vnd.wordperfect wpd +application/vnd.wqd wqd +# application/vnd.wrq-hp3000-labelled +application/vnd.wt.stf stf +# application/vnd.wv.csp+wbxml +# application/vnd.wv.csp+xml +# application/vnd.wv.ssp+xml +application/vnd.xara xar +application/vnd.xfdl xfdl +# application/vnd.xfdl.webform +# application/vnd.xmi+xml +# application/vnd.xmpie.cpkg +# application/vnd.xmpie.dpkg +# application/vnd.xmpie.plan +# application/vnd.xmpie.ppkg +# application/vnd.xmpie.xlim +application/vnd.yamaha.hv-dic hvd +application/vnd.yamaha.hv-script hvs +application/vnd.yamaha.hv-voice hvp +application/vnd.yamaha.openscoreformat osf +application/vnd.yamaha.openscoreformat.osfpvg+xml osfpvg +# application/vnd.yamaha.remote-setup +application/vnd.yamaha.smaf-audio saf +application/vnd.yamaha.smaf-phrase spf +# application/vnd.yamaha.through-ngn +# application/vnd.yamaha.tunnel-udpencap +application/vnd.yellowriver-custom-menu cmp +application/vnd.zul zir zirz +application/vnd.zzazz.deck+xml zaz +application/voicexml+xml vxml +# application/vq-rtcpxr +# application/watcherinfo+xml +# application/whoispp-query +# application/whoispp-response +application/widget wgt +application/winhlp hlp +# application/wita +# application/wordperfect5.1 +application/wsdl+xml wsdl +application/wspolicy+xml wspolicy +application/x-7z-compressed 7z +application/x-abiword abw +application/x-ace-compressed ace +# application/x-amf +application/x-apple-diskimage dmg +application/x-authorware-bin aab x32 u32 vox +application/x-authorware-map aam +application/x-authorware-seg aas +application/x-bcpio bcpio +application/x-bittorrent torrent +application/x-blorb blb blorb +application/x-bzip bz +application/x-bzip2 bz2 boz +application/x-cbr cbr cba cbt cbz cb7 +application/x-cdlink vcd +application/x-cfs-compressed cfs +application/x-chat chat +application/x-chess-pgn pgn +application/x-conference nsc +# application/x-compress +application/x-cpio cpio +application/x-csh csh +application/x-debian-package deb udeb +application/x-dgc-compressed dgc +application/x-director dir dcr dxr cst cct cxt w3d fgd swa +application/x-doom wad +application/x-dtbncx+xml ncx +application/x-dtbook+xml dtb +application/x-dtbresource+xml res +application/x-dvi dvi +application/x-envoy evy +application/x-eva eva +application/x-font-bdf bdf +# application/x-font-dos +# application/x-font-framemaker +application/x-font-ghostscript gsf +# application/x-font-libgrx +application/x-font-linux-psf psf +application/x-font-otf otf +application/x-font-pcf pcf +application/x-font-snf snf +# application/x-font-speedo +# application/x-font-sunos-news +application/x-font-ttf ttf ttc +application/x-font-type1 pfa pfb pfm afm +application/x-font-woff woff +# application/x-font-vfont +application/x-freearc arc +application/x-futuresplash spl +application/x-gca-compressed gca +application/x-glulx ulx +application/x-gnumeric gnumeric +application/x-gramps-xml gramps +application/x-gtar gtar +# application/x-gzip +application/x-hdf hdf +application/x-install-instructions install +application/x-iso9660-image iso +application/x-java-jnlp-file jnlp +application/x-latex latex +application/x-lzh-compressed lzh lha +application/x-mie mie +application/x-mobipocket-ebook prc mobi +application/x-mpegurl m3u8 +application/x-ms-application application +application/x-ms-shortcut lnk +application/x-ms-wmd wmd +application/x-ms-wmz wmz +application/x-ms-xbap xbap +application/x-msaccess mdb +application/x-msbinder obd +application/x-mscardfile crd +application/x-msclip clp +application/x-msdownload exe dll com bat msi +application/x-msmediaview mvb m13 m14 +application/x-msmetafile wmf wmz emf emz +application/x-msmoney mny +application/x-mspublisher pub +application/x-msschedule scd +application/x-msterminal trm +application/x-mswrite wri +application/x-netcdf nc cdf +application/x-nzb nzb +application/x-pkcs12 p12 pfx +application/x-pkcs7-certificates p7b spc +application/x-pkcs7-certreqresp p7r +application/x-rar-compressed rar +application/x-research-info-systems ris +application/x-sh sh +application/x-shar shar +application/x-shockwave-flash swf +application/x-silverlight-app xap +application/x-sql sql +application/x-stuffit sit +application/x-stuffitx sitx +application/x-subrip srt +application/x-sv4cpio sv4cpio +application/x-sv4crc sv4crc +application/x-t3vm-image t3 +application/x-tads gam +application/x-tar tar +application/x-tcl tcl +application/x-tex tex +application/x-tex-tfm tfm +application/x-texinfo texinfo texi +application/x-tgif obj +application/x-ustar ustar +application/x-wais-source src +application/x-x509-ca-cert der crt +application/x-xfig fig +application/x-xliff+xml xlf +application/x-xpinstall xpi +application/x-xz xz +application/x-zmachine z1 z2 z3 z4 z5 z6 z7 z8 +# application/x400-bp +application/xaml+xml xaml +# application/xcap-att+xml +# application/xcap-caps+xml +application/xcap-diff+xml xdf +# application/xcap-el+xml +# application/xcap-error+xml +# application/xcap-ns+xml +# application/xcon-conference-info-diff+xml +# application/xcon-conference-info+xml +application/xenc+xml xenc +application/xhtml+xml xhtml xht +# application/xhtml-voice+xml +application/xml xml xsl +application/xml-dtd dtd +# application/xml-external-parsed-entity +# application/xmpp+xml +application/xop+xml xop +application/xproc+xml xpl +application/xslt+xml xslt +application/xspf+xml xspf +application/xv+xml mxml xhvml xvml xvm +application/yang yang +application/yin+xml yin +application/zip zip +# audio/1d-interleaved-parityfec +# audio/32kadpcm +# audio/3gpp +# audio/3gpp2 +# audio/ac3 +audio/adpcm adp +# audio/amr +# audio/amr-wb +# audio/amr-wb+ +# audio/asc +# audio/atrac-advanced-lossless +# audio/atrac-x +# audio/atrac3 +audio/basic au snd +# audio/bv16 +# audio/bv32 +# audio/clearmode +# audio/cn +# audio/dat12 +# audio/dls +# audio/dsr-es201108 +# audio/dsr-es202050 +# audio/dsr-es202211 +# audio/dsr-es202212 +# audio/dv +# audio/dvi4 +# audio/eac3 +# audio/evrc +# audio/evrc-qcp +# audio/evrc0 +# audio/evrc1 +# audio/evrcb +# audio/evrcb0 +# audio/evrcb1 +# audio/evrcwb +# audio/evrcwb0 +# audio/evrcwb1 +# audio/example +# audio/fwdred +# audio/g719 +# audio/g722 +# audio/g7221 +# audio/g723 +# audio/g726-16 +# audio/g726-24 +# audio/g726-32 +# audio/g726-40 +# audio/g728 +# audio/g729 +# audio/g7291 +# audio/g729d +# audio/g729e +# audio/gsm +# audio/gsm-efr +# audio/gsm-hr-08 +# audio/ilbc +# audio/ip-mr_v2.5 +# audio/isac +# audio/l16 +# audio/l20 +# audio/l24 +# audio/l8 +# audio/lpc +audio/midi mid midi kar rmi +# audio/mobile-xmf +audio/mp4 mp4a +# audio/mp4a-latm +audio/mp4a-latm m4a m4p +# audio/mpa +# audio/mpa-robust +audio/mpeg mpga mp2 mp2a mp3 m2a m3a +# audio/mpeg4-generic +# audio/musepack +audio/ogg oga ogg spx +# audio/opus +# audio/parityfec +# audio/pcma +# audio/pcma-wb +# audio/pcmu-wb +# audio/pcmu +# audio/prs.sid +# audio/qcelp +# audio/red +# audio/rtp-enc-aescm128 +# audio/rtp-midi +# audio/rtx +audio/s3m s3m +audio/silk sil +# audio/smv +# audio/smv0 +# audio/smv-qcp +# audio/sp-midi +# audio/speex +# audio/t140c +# audio/t38 +# audio/telephone-event +# audio/tone +# audio/uemclip +# audio/ulpfec +# audio/vdvi +# audio/vmr-wb +# audio/vnd.3gpp.iufp +# audio/vnd.4sb +# audio/vnd.audiokoz +# audio/vnd.celp +# audio/vnd.cisco.nse +# audio/vnd.cmles.radio-events +# audio/vnd.cns.anp1 +# audio/vnd.cns.inf1 +audio/vnd.dece.audio uva uvva +audio/vnd.digital-winds eol +# audio/vnd.dlna.adts +# audio/vnd.dolby.heaac.1 +# audio/vnd.dolby.heaac.2 +# audio/vnd.dolby.mlp +# audio/vnd.dolby.mps +# audio/vnd.dolby.pl2 +# audio/vnd.dolby.pl2x +# audio/vnd.dolby.pl2z +# audio/vnd.dolby.pulse.1 +audio/vnd.dra dra +audio/vnd.dts dts +audio/vnd.dts.hd dtshd +# audio/vnd.dvb.file +# audio/vnd.everad.plj +# audio/vnd.hns.audio +audio/vnd.lucent.voice lvp +audio/vnd.ms-playready.media.pya pya +# audio/vnd.nokia.mobile-xmf +# audio/vnd.nortel.vbk +audio/vnd.nuera.ecelp4800 ecelp4800 +audio/vnd.nuera.ecelp7470 ecelp7470 +audio/vnd.nuera.ecelp9600 ecelp9600 +# audio/vnd.octel.sbc +# audio/vnd.qcelp +# audio/vnd.rhetorex.32kadpcm +audio/vnd.rip rip +# audio/vnd.sealedmedia.softseal.mpeg +# audio/vnd.vmx.cvsd +# audio/vorbis +# audio/vorbis-config +audio/webm weba +audio/x-aac aac +audio/x-aiff aif aiff aifc +audio/x-caf caf +audio/x-flac flac +audio/x-matroska mka +audio/x-mpegurl m3u +audio/x-ms-wax wax +audio/x-ms-wma wma +audio/x-pn-realaudio ram ra +audio/x-pn-realaudio-plugin rmp +# audio/x-tta +audio/x-wav wav +audio/xm xm +chemical/x-cdx cdx +chemical/x-cif cif +chemical/x-cmdf cmdf +chemical/x-cml cml +chemical/x-csml csml +# chemical/x-pdb +chemical/x-xyz xyz +image/bmp bmp +image/cgm cgm +# image/example +# image/fits +image/g3fax g3 +image/gif gif +image/ief ief +# image/jp2 +image/jp2 jp2 +image/jpeg jpeg jpg jpe +# image/jpm +# image/jpx +image/ktx ktx +# image/naplps +image/pict pict pic pct +image/png png +image/prs.btif btif +# image/prs.pti +image/sgi sgi +image/svg+xml svg svgz +# image/t38 +image/tiff tiff tif +# image/tiff-fx +image/vnd.adobe.photoshop psd +# image/vnd.cns.inf2 +image/vnd.dece.graphic uvi uvvi uvg uvvg +image/vnd.dvb.subtitle sub +image/vnd.djvu djvu djv +image/vnd.dwg dwg +image/vnd.dxf dxf +image/vnd.fastbidsheet fbs +image/vnd.fpx fpx +image/vnd.fst fst +image/vnd.fujixerox.edmics-mmr mmr +image/vnd.fujixerox.edmics-rlc rlc +# image/vnd.globalgraphics.pgb +# image/vnd.microsoft.icon +# image/vnd.mix +image/vnd.ms-modi mdi +image/vnd.ms-photo wdp +image/vnd.net-fpx npx +# image/vnd.radiance +# image/vnd.sealed.png +# image/vnd.sealedmedia.softseal.gif +# image/vnd.sealedmedia.softseal.jpg +# image/vnd.svf +image/vnd.wap.wbmp wbmp +image/vnd.xiff xif +image/webp webp +image/x-3ds 3ds +image/x-cmu-raster ras +image/x-cmx cmx +image/x-freehand fh fhc fh4 fh5 fh7 +image/x-icon ico +image/x-macpaint pntg pnt mac +image/x-mrsid-image sid +image/x-pcx pcx +image/x-pict pic pct +image/x-portable-anymap pnm +image/x-portable-bitmap pbm +image/x-portable-graymap pgm +image/x-portable-pixmap ppm +image/x-quicktime qtif qti +image/x-rgb rgb +image/x-tga tga +image/x-xbitmap xbm +image/x-xpixmap xpm +image/x-xwindowdump xwd +# message/cpim +# message/delivery-status +# message/disposition-notification +# message/example +# message/external-body +# message/feedback-report +# message/global +# message/global-delivery-status +# message/global-disposition-notification +# message/global-headers +# message/http +# message/imdn+xml +# message/news +# message/partial +message/rfc822 eml mime +# message/s-http +# message/sip +# message/sipfrag +# message/tracking-status +# message/vnd.si.simp +# model/example +model/iges igs iges +model/mesh msh mesh silo +model/vnd.collada+xml dae +model/vnd.dwf dwf +# model/vnd.flatland.3dml +model/vnd.gdl gdl +# model/vnd.gs-gdl +# model/vnd.gs.gdl +model/vnd.gtw gtw +# model/vnd.moml+xml +model/vnd.mts mts +# model/vnd.parasolid.transmit.binary +# model/vnd.parasolid.transmit.text +model/vnd.vtu vtu +model/vrml wrl vrml +model/x3d+binary x3db x3dbz +model/x3d+vrml x3dv x3dvz +model/x3d+xml x3d x3dz +# multipart/alternative +# multipart/appledouble +# multipart/byteranges +# multipart/digest +# multipart/encrypted +# multipart/example +# multipart/form-data +# multipart/header-set +# multipart/mixed +# multipart/parallel +# multipart/related +# multipart/report +# multipart/signed +# multipart/voice-message +text/cache-manifest manifest +# text/1d-interleaved-parityfec +text/cache-manifest appcache +text/calendar ics ifb +text/css css +text/csv csv +# text/directory +# text/dns +# text/ecmascript +# text/enriched +# text/example +# text/fwdred +text/html html htm +# text/javascript +text/n3 n3 +# text/parityfec +text/plain txt text conf def list log in +# text/prs.fallenstein.rst +text/prs.lines.tag dsc +# text/vnd.radisys.msml-basic-layout +# text/red +# text/rfc822-headers +text/richtext rtx +# text/rtf +# text/rtp-enc-aescm128 +# text/rtx +text/sgml sgml sgm +# text/t140 +text/tab-separated-values tsv +text/troff t tr roff man me ms +text/turtle ttl +# text/ulpfec +text/uri-list uri uris urls +text/vcard vcard +# text/vnd.abc +text/vnd.curl curl +text/vnd.curl.dcurl dcurl +text/vnd.curl.scurl scurl +text/vnd.curl.mcurl mcurl +# text/vnd.dmclientscript +text/vnd.dvb.subtitle sub +# text/vnd.esmertec.theme-descriptor +text/vnd.fly fly +text/vnd.fmi.flexstor flx +text/vnd.graphviz gv +text/vnd.in3d.3dml 3dml +text/vnd.in3d.spot spot +# text/vnd.iptc.newsml +# text/vnd.iptc.nitf +# text/vnd.latex-z +# text/vnd.motorola.reflex +# text/vnd.ms-mediapackage +# text/vnd.net2phone.commcenter.command +# text/vnd.si.uricatalogue +text/vnd.sun.j2me.app-descriptor jad +# text/vnd.trolltech.linguist +# text/vnd.wap.si +# text/vnd.wap.sl +text/vnd.wap.wml wml +text/vnd.wap.wmlscript wmls +text/x-asm s asm +text/x-c c cc cxx cpp h hh dic +text/x-fortran f for f77 f90 +text/x-java-source java +text/x-opml opml +text/x-pascal p pas +text/x-nfo nfo +text/x-setext etx +text/x-sfv sfv +text/x-uuencode uu +text/x-vcalendar vcs +text/x-vcard vcf +# text/xml +# text/xml-external-parsed-entity +# video/1d-interleaved-parityfec +video/3gpp 3gp +# video/3gpp-tt +video/3gpp2 3g2 +# video/bmpeg +# video/bt656 +# video/celb +# video/dv +# video/example +video/h261 h261 +video/h263 h263 +# video/h263-1998 +# video/h263-2000 +video/h264 h264 +# video/h264-rcdo +# video/h264-svc +video/jpeg jpgv +# video/jpeg2000 +video/jpm jpm jpgm +video/mj2 mj2 mjp2 +# video/mp1s +# video/mp2p +# video/mp4v-es +video/mp2t ts +video/mp4 mp4 mp4v mpg4 m4v +video/mpeg mpeg mpg mpe m1v m2v +# video/mpeg4-generic +# video/mpv +# video/nv +video/ogg ogv +# video/parityfec +# video/pointer +video/quicktime qt mov +# video/raw +# video/rtp-enc-aescm128 +# video/rtx +# video/smpte292m +# video/ulpfec +# video/vc1 +# video/vnd.cctv +video/vnd.dece.hd uvh uvvh +video/vnd.dece.mobile uvm uvvm +# video/vnd.dece.mp4 +video/vnd.dece.pd uvp uvvp +video/vnd.dece.sd uvs uvvs +video/vnd.dece.video uvv uvvv +# video/vnd.directv.mpeg +# video/vnd.directv.mpeg-tts +# video/vnd.dlna.mpeg-tts +video/vnd.dvb.file dvb +video/vnd.fvt fvt +# video/vnd.hns.video +# video/vnd.iptvforum.1dparityfec-1010 +# video/vnd.iptvforum.1dparityfec-2005 +# video/vnd.iptvforum.2dparityfec-1010 +# video/vnd.iptvforum.2dparityfec-2005 +# video/vnd.iptvforum.ttsavc +# video/vnd.iptvforum.ttsmpeg2 +# video/vnd.motorola.video +# video/vnd.motorola.videop +video/vnd.mpegurl mxu m4u +video/vnd.ms-playready.media.pyv pyv +# video/vnd.nokia.interleaved-multimedia +# video/vnd.nokia.videovoip +# video/vnd.objectvideo +# video/vnd.sealed.mpeg1 +# video/vnd.sealed.mpeg4 +# video/vnd.sealed.swf +# video/vnd.sealedmedia.softseal.mov +video/vnd.uvvu.mp4 uvu uvvu +video/vnd.vivo viv +video/x-dv dv dif +video/webm webm +video/x-f4v f4v +video/x-fli fli +video/x-flv flv +video/x-m4v m4v +video/x-matroska mkv mk3d mks +video/x-mng mng +video/x-ms-asf asf asx +video/x-ms-vob vob +video/x-ms-wm wm +video/x-ms-wmv wmv +video/x-ms-wmx wmx +video/x-ms-wvx wvx +video/x-msvideo avi +video/x-sgi-movie movie +video/x-smv smv +x-conference/x-cooltalk ice diff --git a/misc/nacl/testzip.proto b/misc/nacl/testzip.proto new file mode 100644 index 000000000..2701ff463 --- /dev/null +++ b/misc/nacl/testzip.proto @@ -0,0 +1,113 @@ +etc src=/etc + mime.types src=../misc/nacl/testdata/mime.types + resolv.conf src=../misc/nacl/testdata/empty + group src=../misc/nacl/testdata/group + passwd src=../misc/nacl/testdata/empty + hosts src=../misc/nacl/testdata/hosts + services +usr src=../misc/nacl/testdata + bin +go src=.. + src + cmd + gofmt + testdata + + + pkg + archive + tar + testdata + + + zip + testdata + + + compress + bzip2 + testdata + + + flate + gzip + testdata + + + lzw + testdata + + + zlib + crypto + rsa + testdata + + + tls + testdata + + + debug + dwarf + testdata + + + elf + testdata + + + macho + testdata + + + pe + testdata + + + plan9obj + testdata + + + go + build + + + doc + testdata + + + format + + + parser + + + printer + + + image + testdata + + + draw + gif + jpeg + png + testdata + + + io + + + mime + testdata + + + multipart + testdata + + + net + http + + + testdata + + + os + + + path + filepath + + + regexp + testdata + + + strconv + testdata + + + text + template + testdata + + + lib + time + zoneinfo.zip + + test + + diff --git a/misc/notepadplus/functionList.xml b/misc/notepadplus/functionList.xml index ca949f018..7c605db4f 100644 --- a/misc/notepadplus/functionList.xml +++ b/misc/notepadplus/functionList.xml @@ -1,8 +1,15 @@ <!-- <NotepadPlus> --> <!-- <functionList> --> <!-- <associationMap> --> + + <!-- + if npp version == 6.4: <association ext=".go" id="go"/> + if npp version >= 6.5: + <association userDefinedLangName="go" id="go"/> + --> + <!-- </associationMap> --> <!-- <parsers> --> <parser id="go" displayName="Go" commentExpr="((/\*.*?\*)/|(//.*?$))"> diff --git a/misc/pprof b/misc/pprof index 1fc8d3621..ad3f1ebe1 100755 --- a/misc/pprof +++ b/misc/pprof @@ -730,6 +730,13 @@ sub RunWeb { return; } + if (`uname` =~ /CYGWIN/) { + # Windows(cygwin): open will use standard preference for SVG files. + my $winname = `cygpath -wa $fname`; + system("explorer.exe", $winname); + return; + } + # Some kind of Unix; try generic symlinks, then specific browsers. # (Stop once we find one.) # Works best if the browser is already running. @@ -2645,6 +2652,7 @@ sub RemoveUninterestingFrames { 'makechan', 'makemap', 'mal', + 'profilealloc', 'runtime.new', 'makeslice1', 'runtime.malloc', @@ -4608,6 +4616,7 @@ sub ConfigureObjTools { # in the same directory as pprof. $obj_tool_map{"nm_pdb"} = "nm-pdb"; $obj_tool_map{"addr2line_pdb"} = "addr2line-pdb"; + $obj_tool_map{"objdump"} = "false"; # no objdump } if ($file_type =~ /Mach-O/) { diff --git a/misc/vim/autoload/go/complete.vim b/misc/vim/autoload/go/complete.vim index 8dd43de4a..a4fa6b668 100644 --- a/misc/vim/autoload/go/complete.vim +++ b/misc/vim/autoload/go/complete.vim @@ -58,7 +58,7 @@ function! go#complete#Package(ArgLead, CmdLine, CursorPos) if executable('go') let goroot = substitute(system('go env GOROOT'), '\n', '', 'g') if v:shell_error - echomsg '\'go env GOROOT\' failed' + echomsg '''go env GOROOT'' failed' endif else let goroot = $GOROOT diff --git a/misc/vim/ftplugin/go.vim b/misc/vim/ftplugin/go.vim index 8066733cf..532fb1723 100644 --- a/misc/vim/ftplugin/go.vim +++ b/misc/vim/ftplugin/go.vim @@ -9,9 +9,11 @@ if exists("b:did_ftplugin") endif let b:did_ftplugin = 1 +setlocal formatoptions-=t + setlocal comments=s1:/*,mb:*,ex:*/,:// setlocal commentstring=//\ %s -let b:undo_ftplugin = "setl com< cms<" +let b:undo_ftplugin = "setl fo< com< cms<" " vim:ts=4:sw=4:et diff --git a/misc/vim/ftplugin/go/fmt.vim b/misc/vim/ftplugin/go/fmt.vim index 5f7976f5f..359545bd4 100644 --- a/misc/vim/ftplugin/go/fmt.vim +++ b/misc/vim/ftplugin/go/fmt.vim @@ -57,7 +57,7 @@ function! s:GoFormat() endif undo if !empty(errors) - call setloclist(0, errors, 'r') + call setqflist(errors, 'r') endif echohl Error | echomsg "Gofmt returned error" | echohl None endif diff --git a/misc/vim/indent/go.vim b/misc/vim/indent/go.vim index faf4d79e2..e3d6e8416 100644 --- a/misc/vim/indent/go.vim +++ b/misc/vim/indent/go.vim @@ -24,6 +24,18 @@ if exists("*GoIndent") finish endif +" The shiftwidth() function is relatively new. +" Don't require it to exist. +if exists('*shiftwidth') + func s:sw() + return shiftwidth() + endfunc +else + func s:sw() + return &shiftwidth + endfunc +endif + function! GoIndent(lnum) let prevlnum = prevnonblank(a:lnum-1) if prevlnum == 0 @@ -40,17 +52,17 @@ function! GoIndent(lnum) if prevl =~ '[({]\s*$' " previous line opened a block - let ind += &sw + let ind += s:sw() endif if prevl =~# '^\s*\(case .*\|default\):$' " previous line is part of a switch statement - let ind += &sw + let ind += s:sw() endif " TODO: handle if the previous line is a label. if thisl =~ '^\s*[)}]' " this line closed a block - let ind -= &sw + let ind -= s:sw() endif " Colons are tricky. @@ -58,7 +70,7 @@ function! GoIndent(lnum) " We ignore trying to deal with jump labels because (a) they're rare, and " (b) they're hard to disambiguate from a composite literal key. if thisl =~# '^\s*\(case .*\|default\):$' - let ind -= &sw + let ind -= s:sw() endif return ind diff --git a/misc/vim/readme.txt b/misc/vim/readme.txt index b8469f927..9a9e22870 100644 --- a/misc/vim/readme.txt +++ b/misc/vim/readme.txt @@ -5,9 +5,11 @@ To use all the Vim plugins, add these lines to your $HOME/.vimrc. " Some Linux distributions set filetype in /etc/vimrc. " Clear filetype flags before changing runtimepath to force Vim to reload them. - filetype off - filetype plugin indent off - set runtimepath+=$GOROOT/misc/vim + if exists("g:did_load_filetypes") + filetype off + filetype plugin indent off + endif + set runtimepath+=$GOROOT/misc/vim " replace $GOROOT with the output of: go env GOROOT filetype plugin indent on syntax on diff --git a/misc/zsh/go b/misc/zsh/go index 18bcaaff2..066cf4065 100644 --- a/misc/zsh/go +++ b/misc/zsh/go @@ -19,7 +19,6 @@ __go_tool_complete() { commands+=( 'build[compile packages and dependencies]' 'clean[remove object files]' - 'doc[run godoc on package sources]' 'env[print Go environment information]' 'fix[run go tool fix on packages]' 'fmt[run gofmt on package sources]' @@ -92,6 +91,7 @@ __go_tool_complete() { "-short[use short mode]" \ "-parallel[number of parallel tests]:number" \ "-cpu[values of GOMAXPROCS to use]:number list" \ + "-cover[enable coverage analysis]" \ "-run[run tests and examples matching regexp]:regexp" \ "-bench[run benchmarks matching regexp]:regexp" \ "-benchmem[print memory allocation stats]" \ @@ -106,9 +106,10 @@ __go_tool_complete() { ;; help) _values "${commands[@]}" \ + 'c[how to call C code]' \ + 'importpath[description of import path]' \ 'gopath[GOPATH environment variable]' \ 'packages[description of package lists]' \ - 'remote[remote import path syntax]' \ 'testflag[description of testing flags]' \ 'testfunc[description of testing functions]' ;; |