diff options
Diffstat (limited to 'vendor/github.com/ugorji/go/codec/build.sh')
| -rw-r--r-- | vendor/github.com/ugorji/go/codec/build.sh | 349 |
1 files changed, 99 insertions, 250 deletions
diff --git a/vendor/github.com/ugorji/go/codec/build.sh b/vendor/github.com/ugorji/go/codec/build.sh index 023faf3d4..5214c7b03 100644 --- a/vendor/github.com/ugorji/go/codec/build.sh +++ b/vendor/github.com/ugorji/go/codec/build.sh @@ -1,232 +1,61 @@ #!/bin/bash -# Run all the different permutations of all the tests and other things -# This helps ensure that nothing gets broken. - -_tests() { - local vet="" # TODO: make it off - local gover=$( ${gocmd} version | cut -f 3 -d ' ' ) - [[ $( ${gocmd} version ) == *"gccgo"* ]] && zcover=0 - [[ $( ${gocmd} version ) == *"gollvm"* ]] && zcover=0 - case $gover in - go1.[7-9]*|go1.1[0-9]*|go2.*|devel*) true ;; - *) return 1 - esac - # note that codecgen requires fastpath, so you cannot do "codecgen codec.notfastpath" - # we test the following permutations wnich all execute different code paths as below. - echo "TestCodecSuite: (fastpath/unsafe), (!fastpath/unsafe), (fastpath/!unsafe), (!fastpath/!unsafe), (codecgen/unsafe)" - local echo=1 - local nc=2 # count - local cpus="1,$(nproc)" - # if using the race detector, then set nc to - if [[ " ${zargs[@]} " =~ "-race" ]]; then - cpus="$(nproc)" - fi - local a=( "" "codec.notfastpath" "codec.safe" "codec.notfastpath codec.safe" "codecgen" ) - local b=() - local c=() - for i in "${a[@]}" - do - local i2=${i:-default} - [[ "$zwait" == "1" ]] && echo ">>>> TAGS: 'alltests $i'; RUN: 'TestCodecSuite'" - [[ "$zcover" == "1" ]] && c=( -coverprofile "${i2// /-}.cov.out" ) - true && - ${gocmd} vet -printfuncs "errorf" "$@" && - if [[ "$echo" == 1 ]]; then set -o xtrace; fi && - ${gocmd} test ${zargs[*]} ${ztestargs[*]} -vet "$vet" -tags "alltests $i" -count $nc -cpu $cpus -run "TestCodecSuite" "${c[@]}" "$@" & - if [[ "$echo" == 1 ]]; then set +o xtrace; fi - b+=("${i2// /-}.cov.out") - [[ "$zwait" == "1" ]] && wait - - # if [[ "$?" != 0 ]]; then return 1; fi +# Build and Run the different test permutations. +# This helps validate that nothing gets broken. + +_build_proceed() { + # return success (0) if we should, and 1 (fail) if not + if [[ "${zforce}" ]]; then return 0; fi + for a in "fastpath.generated.go" "json.mono.generated.go"; do + if [[ ! -e "$a" ]]; then return 0; fi + for b in `ls -1 *.go.tmpl gen.go gen_mono.go values_test.go`; do + if [[ "$a" -ot "$b" ]]; then return 0; fi + done done - if [[ "$zextra" == "1" ]]; then - [[ "$zwait" == "1" ]] && echo ">>>> TAGS: 'codec.notfastpath x'; RUN: 'Test.*X$'" - [[ "$zcover" == "1" ]] && c=( -coverprofile "x.cov.out" ) - ${gocmd} test ${zargs[*]} ${ztestargs[*]} -vet "$vet" -tags "codec.notfastpath x" -count $nc -run 'Test.*X$' "${c[@]}" & - b+=("x.cov.out") - [[ "$zwait" == "1" ]] && wait - fi - wait - # go tool cover is not supported for gccgo, gollvm, other non-standard go compilers - [[ "$zcover" == "1" ]] && - command -v gocovmerge && - gocovmerge "${b[@]}" > __merge.cov.out && - ${gocmd} tool cover -html=__merge.cov.out + return 1 } -# is a generation needed? -_ng() { - local a="$1" - if [[ ! -e "$a" ]]; then echo 1; return; fi - for i in `ls -1 *.go.tmpl gen.go values_test.go` - do - if [[ "$a" -ot "$i" ]]; then echo 1; return; fi - done -} - -_prependbt() { - cat > ${2} <<EOF -// +build generated - -EOF - cat ${1} >> ${2} - rm -f ${1} -} - -# _build generates fast-path.go and gen-helper.go. +# _build generates fastpath.go _build() { - if ! [[ "${zforce}" || $(_ng "fast-path.generated.go") || $(_ng "gen-helper.generated.go") || $(_ng "gen.generated.go") ]]; then return 0; fi - + # if ! [[ "${zforce}" || $(_ng "fastpath.generated.go") || $(_ng "json.mono.generated.go") ]]; then return 0; fi + _build_proceed + if [ $? -eq 1 ]; then return 0; fi if [ "${zbak}" ]; then _zts=`date '+%m%d%Y_%H%M%S'` _gg=".generated.go" - [ -e "gen-helper${_gg}" ] && mv gen-helper${_gg} gen-helper${_gg}__${_zts}.bak - [ -e "fast-path${_gg}" ] && mv fast-path${_gg} fast-path${_gg}__${_zts}.bak + [ -e "fastpath${_gg}" ] && mv fastpath${_gg} fastpath${_gg}__${_zts}.bak [ -e "gen${_gg}" ] && mv gen${_gg} gen${_gg}__${_zts}.bak - fi - rm -f gen-helper.generated.go fast-path.generated.go gen.generated.go \ - *safe.generated.go *_generated_test.go *.generated_ffjson_expose.go - - cat > gen.generated.go <<EOF -// +build codecgen.exec - -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -package codec - -// DO NOT EDIT. THIS FILE IS AUTO-GENERATED FROM gen-dec-(map|array).go.tmpl + fi + + rm -f fast*path.generated.go *mono*generated.go *_generated_test.go gen-from-tmpl*.generated.go -const genDecMapTmpl = \` -EOF - cat >> gen.generated.go < gen-dec-map.go.tmpl - cat >> gen.generated.go <<EOF -\` + local btags="codec.build codec.notmono codec.safe codec.notfastpath" -const genDecListTmpl = \` -EOF - cat >> gen.generated.go < gen-dec-array.go.tmpl - cat >> gen.generated.go <<EOF -\` - -const genEncChanTmpl = \` -EOF - cat >> gen.generated.go < gen-enc-chan.go.tmpl - cat >> gen.generated.go <<EOF -\` -EOF cat > gen-from-tmpl.codec.generated.go <<EOF -package codec -func GenRunTmpl2Go(in, out string) { genRunTmpl2Go(in, out) } -func GenRunSortTmpl2Go(in, out string) { genRunSortTmpl2Go(in, out) } -EOF - - # stub xxxRv and xxxRvSlice creation, before you create it - cat > gen-from-tmpl.sort-slice-stubs.generated.go <<EOF -// +build codecgen.sort_slice - package codec - -import "reflect" -import "time" - +func GenTmplRun2Go(in, out string) { genTmplRun2Go(in, out) } +func GenMonoAll() { genMonoAll() } EOF - for i in string bool uint64 int64 float64 bytes time; do - local i2=$i - case $i in - 'time' ) i2="time.Time";; - 'bytes' ) i2="[]byte";; - esac - - cat >> gen-from-tmpl.sort-slice-stubs.generated.go <<EOF -type ${i}Rv struct { v ${i2}; r reflect.Value } - -type ${i}RvSlice []${i}Rv - -func (${i}RvSlice) Len() int { return 0 } -func (${i}RvSlice) Less(i, j int) bool { return false } -func (${i}RvSlice) Swap(i, j int) {} - -type ${i}Intf struct { v ${i2}; i interface{} } - -type ${i}IntfSlice []${i}Intf - -func (${i}IntfSlice) Len() int { return 0 } -func (${i}IntfSlice) Less(i, j int) bool { return false } -func (${i}IntfSlice) Swap(i, j int) {} - -EOF - done - - sed -e 's+// __DO_NOT_REMOVE__NEEDED_FOR_REPLACING__IMPORT_PATH__FOR_CODEC_BENCH__+import . "github.com/ugorji/go/codec"+' \ - shared_test.go > bench/shared_test.go - - # explicitly return 0 if this passes, else return 1 - local btags="codec.notfastpath codec.safe codecgen.exec" - rm -f sort-slice.generated.go fast-path.generated.go gen-helper.generated.go mammoth_generated_test.go mammoth2_generated_test.go - - cat > gen-from-tmpl.sort-slice.generated.go <<EOF -// +build ignore - -package main - -import "${zpkg}" - -func main() { -codec.GenRunSortTmpl2Go("sort-slice.go.tmpl", "sort-slice.generated.go") -} -EOF - - ${gocmd} run -tags "$btags codecgen.sort_slice" gen-from-tmpl.sort-slice.generated.go || return 1 - rm -f gen-from-tmpl.sort-slice.generated.go - cat > gen-from-tmpl.generated.go <<EOF -// +build ignore - +//go:build ignore package main - import "${zpkg}" - func main() { -codec.GenRunTmpl2Go("fast-path.go.tmpl", "fast-path.generated.go") -codec.GenRunTmpl2Go("gen-helper.go.tmpl", "gen-helper.generated.go") -codec.GenRunTmpl2Go("mammoth-test.go.tmpl", "mammoth_generated_test.go") -codec.GenRunTmpl2Go("mammoth2-test.go.tmpl", "mammoth2_generated_test.go") +codec.GenTmplRun2Go("fastpath.go.tmpl", "base.fastpath.generated.go") +codec.GenTmplRun2Go("fastpath.notmono.go.tmpl", "base.fastpath.notmono.generated.go") +codec.GenTmplRun2Go("mammoth_test.go.tmpl", "mammoth_generated_test.go") +codec.GenMonoAll() } EOF + # explicitly return 0 if this passes, else return 1 ${gocmd} run -tags "$btags" gen-from-tmpl.generated.go || return 1 - rm -f gen-from-tmpl.generated.go - - rm -f gen-from-tmpl.*generated.go + rm -f gen-from-tmpl*.generated.go return 0 } -_codegenerators() { - local c5="_generated_test.go" - local c7="$PWD/codecgen" - local c8="$c7/__codecgen" - local c9="codecgen-scratch.go" - - if ! [[ $zforce || $(_ng "values_codecgen${c5}") ]]; then return 0; fi - - # Note: ensure you run the codecgen for this codebase/directory i.e. ./codecgen/codecgen - true && - echo "codecgen ... " && - if [[ $zforce || ! -f "$c8" || "$c7/gen.go" -nt "$c8" ]]; then - echo "rebuilding codecgen ... " && ( cd codecgen && ${gocmd} build -o $c8 ${zargs[*]} . ) - fi && - $c8 -rt 'codecgen' -t 'codecgen generated' -o "values_codecgen${c5}" -d 19780 "$zfin" "$zfin2" && - cp mammoth2_generated_test.go $c9 && - $c8 -t 'codecgen,!codec.notfastpath,!codec.notmammoth generated,!codec.notfastpath,!codec.notmammoth' -o "mammoth2_codecgen${c5}" -d 19781 "mammoth2_generated_test.go" && - rm -f $c9 && - echo "generators done!" -} - _prebuild() { - echo "prebuild: zforce: $zforce" local d="$PWD" local zfin="test_values.generated.go" local zfin2="test_values_flex.generated.go" @@ -236,13 +65,12 @@ _prebuild() { # zpkg=${d##*/src/} # zgobase=${d%%/src/*} # rm -f *_generated_test.go - rm -f codecgen-*.go && + # if [[ $zforce ]]; then ${gocmd} install ${zargs[*]} .; fi && + true && _build && cp $d/values_test.go $d/$zfin && cp $d/values_flex_test.go $d/$zfin2 && - _codegenerators && if [[ "$(type -t _codegenerators_external )" = "function" ]]; then _codegenerators_external ; fi && - if [[ $zforce ]]; then ${gocmd} install ${zargs[*]} .; fi && returncode=0 && echo "prebuild done successfully" rm -f $d/$zfin $d/$zfin2 @@ -251,54 +79,67 @@ _prebuild() { } _make() { - local makeforce=${zforce} - zforce=1 - (cd codecgen && ${gocmd} install ${zargs[*]} .) && _prebuild && ${gocmd} install ${zargs[*]} . - zforce=${makeforce} + _prebuild && ${gocmd} install ${zargs[*]} . } _clean() { rm -f \ gen-from-tmpl.*generated.go \ - codecgen-*.go \ test_values.generated.go test_values_flex.generated.go } -_release() { - local reply - read -p "Pre-release validation takes a few minutes and MUST be run from within GOPATH/src. Confirm y/n? " -n 1 -r reply - echo - if [[ ! $reply =~ ^[Yy]$ ]]; then return 1; fi +_tests_run_one() { + local tt="alltests $i" + local rr="TestCodecSuite" + if [[ "x$i" == "xx" ]]; then tt="codec.notmono codec.notfastpath x"; rr='Test.*X$'; fi + local g=( ${zargs[*]} ${ztestargs[*]} -count $nc -cpu $cpus -vet "$vet" -tags "$tt" -run "$rr" ) + [[ "$zcover" == "1" ]] && g+=( -cover ) + # g+=( -ti "$k" ) + g+=( -tdiff ) + [[ "$zcover" == "1" ]] && g+=( -test.gocoverdir $covdir ) + local - + set -x + ${gocmd} test "${g[@]}" & +} - # expects GOROOT, GOROOT_BOOTSTRAP to have been set. - if [[ -z "${GOROOT// }" || -z "${GOROOT_BOOTSTRAP// }" ]]; then return 1; fi - # (cd $GOROOT && git checkout -f master && git pull && git reset --hard) - (cd $GOROOT && git pull) - local f=`pwd`/make.release.out - cat > $f <<EOF -========== `date` =========== -EOF - # # go 1.6 and below kept giving memory errors on Mac OS X during SDK build or go run execution, - # # that is fine, as we only explicitly test the last 3 releases and tip (2 years). - local makeforce=${zforce} - zforce=1 - for i in 1.10 1.11 1.12 master - do - echo "*********** $i ***********" >>$f - if [[ "$i" != "master" ]]; then i="release-branch.go$i"; fi - (false || - (echo "===== BUILDING GO SDK for branch: $i ... =====" && - cd $GOROOT && - git checkout -f $i && git reset --hard && git clean -f . && - cd src && ./make.bash >>$f 2>&1 && sleep 1 ) ) && - echo "===== GO SDK BUILD DONE =====" && - _prebuild && - echo "===== PREBUILD DONE with exit: $? =====" && - _tests "$@" - if [[ "$?" != 0 ]]; then return 1; fi +_tests() { + local vet="" # TODO: make it off + local gover=$( ${gocmd} version | cut -f 3 -d ' ' ) + # go tool cover is not supported for gccgo, gollvm, other non-standard go compilers + [[ $( ${gocmd} version ) == *"gccgo"* ]] && zcover=0 + [[ $( ${gocmd} version ) == *"gollvm"* ]] && zcover=0 + case $gover in + go1.2[0-9]*|go2.*|devel*) true ;; + *) return 1 + esac + # we test the following permutations wnich all execute different code paths as below. + echo "TestCodecSuite: (fastpath/unsafe), (!fastpath/unsafe), (fastpath/!unsafe), (!fastpath/!unsafe)" + local nc=2 # count + local cpus="1,$(nproc)" + # if using the race detector, then set nc to + if [[ " ${zargs[@]} " =~ "-race" ]]; then + cpus="$(nproc)" + fi + local covdir="" + local a=( "" "codec.safe" "codec.notfastpath" "codec.safe codec.notfastpath" + "codec.notmono" "codec.notmono codec.safe" + "codec.notmono codec.notfastpath" "codec.notmono codec.safe codec.notfastpath" ) + [[ "$zextra" == "1" ]] && a+=( "x" ) + [[ "$zcover" == "1" ]] && covdir=`mktemp -d` + ${gocmd} vet -printfuncs "errorf" "$@" || return 1 + for i in "${a[@]}"; do + local j=${i:-default}; j="${j// /-}"; j="${j//codec./}" + [[ "$zwait" == "1" ]] && echo ">>>> TAGS: 'alltests $i'; RUN: 'TestCodecSuite'" + _tests_run_one + [[ "$zwait" == "1" ]] && wait + # if [[ "$?" != 0 ]]; then return 1; fi done - zforce=${makeforce} - echo "++++++++ RELEASE TEST SUITES ALL PASSED ++++++++" + wait + [[ "$zcover" == "1" ]] && + echo "go tool covdata output" && + ${gocmd} tool covdata percent -i $covdir && + ${gocmd} tool covdata textfmt -i $covdir -o __cov.out && + ${gocmd} tool cover -html=__cov.out } _usage() { @@ -306,11 +147,10 @@ _usage() { # -pf [p=prebuild (f=force)] cat <<EOF -primary usage: $0 +primary usage: $0 -t[esow] -> t=tests [e=extra, s=short, o=cover, w=wait] -[md] -> [m=make, d=race detector] - -[n l i] -> [n=inlining diagnostics, l=mid-stack inlining, i=check inlining for path (path)] - -v -> v=verbose + -v -> v=verbose (more v's to increase verbose level) EOF if [[ "$(type -t _usage_run)" = "function" ]]; then _usage_run ; fi } @@ -331,15 +171,15 @@ _main() { local gocmd=${MYGOCMD:-go} OPTIND=1 - while getopts ":cetmnrgpfvldsowkxyzi" flag + while getopts ":cetmnrgpfvldsowikxyz" flag do case "x$flag" in + 'xw') zwait=1 ;; + 'xv') zverbose+=(1) ;; 'xo') zcover=1 ;; 'xe') zextra=1 ;; - 'xw') zwait=1 ;; 'xf') zforce=1 ;; 'xs') ztestargs+=("-short") ;; - 'xv') zverbose+=(1) ;; 'xl') zargs+=("-gcflags"); zargs+=("-l=4") ;; 'xn') zargs+=("-gcflags"); zargs+=("-m=2") ;; 'xd') zargs+=("-race") ;; @@ -357,14 +197,23 @@ _main() { 'xg') _go ;; 'xp') _prebuild "$@" ;; 'xc') _clean "$@" ;; + esac + + # handle from local run.sh + case "x$x" in + 'xi') _check_inlining_one "$@" ;; + 'xk') _go_compiler_validation_suite ;; 'xx') _analyze_checks "$@" ;; 'xy') _analyze_debug_types "$@" ;; 'xz') _analyze_do_inlining_and_more "$@" ;; - 'xk') _go_compiler_validation_suite ;; - 'xi') _check_inlining_one "$@" ;; esac # unset zforce zargs zbenchflags } [ "." = `dirname $0` ] && _main "$@" +# _xtrace() { +# local - +# set -x +# "${@}" +# } |
