diff options
Diffstat (limited to 'meta/classes')
-rw-r--r-- | meta/classes/go.bbclass | 87 |
1 files changed, 51 insertions, 36 deletions
diff --git a/meta/classes/go.bbclass b/meta/classes/go.bbclass index afd68b5951..a51ba3e9f0 100644 --- a/meta/classes/go.bbclass +++ b/meta/classes/go.bbclass | |||
@@ -26,7 +26,7 @@ GO_LDFLAGS ?= '-ldflags="${GO_RPATH} ${GO_LINKMODE} -extldflags '${GO_EXTLDFLAGS | |||
26 | export GOBUILDFLAGS ?= "-v ${GO_LDFLAGS}" | 26 | export GOBUILDFLAGS ?= "-v ${GO_LDFLAGS}" |
27 | export GOPATH_OMIT_IN_ACTIONID ?= "1" | 27 | export GOPATH_OMIT_IN_ACTIONID ?= "1" |
28 | export GOPTESTBUILDFLAGS ?= "${GOBUILDFLAGS} -c" | 28 | export GOPTESTBUILDFLAGS ?= "${GOBUILDFLAGS} -c" |
29 | export GOPTESTFLAGS ?= "-test.v" | 29 | export GOPTESTFLAGS ?= "" |
30 | GOBUILDFLAGS_prepend_task-compile = "${GO_PARALLEL_BUILD} " | 30 | GOBUILDFLAGS_prepend_task-compile = "${GO_PARALLEL_BUILD} " |
31 | 31 | ||
32 | export GO = "${HOST_PREFIX}go" | 32 | export GO = "${HOST_PREFIX}go" |
@@ -76,7 +76,7 @@ go_list_packages() { | |||
76 | } | 76 | } |
77 | 77 | ||
78 | go_list_package_tests() { | 78 | go_list_package_tests() { |
79 | ${GO} list -f '{{.ImportPath}} {{.TestGoFiles}}' ${GOBUILDFLAGS} ${GO_INSTALL} | \ | 79 | ${GO} list -f '{{.ImportPath}} {{.TestGoFiles}}' ${GOBUILDFLAGS} ${GO_INSTALL} | \ |
80 | grep -v '\[\]$' | \ | 80 | grep -v '\[\]$' | \ |
81 | egrep -v '${GO_INSTALL_FILTEROUT}' | \ | 81 | egrep -v '${GO_INSTALL_FILTEROUT}' | \ |
82 | awk '{ print $1 }' | 82 | awk '{ print $1 }' |
@@ -100,15 +100,16 @@ go_do_compile() { | |||
100 | do_compile[dirs] =+ "${GOTMPDIR}" | 100 | do_compile[dirs] =+ "${GOTMPDIR}" |
101 | do_compile[cleandirs] = "${B}/bin ${B}/pkg" | 101 | do_compile[cleandirs] = "${B}/bin ${B}/pkg" |
102 | 102 | ||
103 | do_compile_ptest() { | 103 | do_compile_ptest_base() { |
104 | export TMPDIR="${GOTMPDIR}" | 104 | export TMPDIR="${GOTMPDIR}" |
105 | rm -f ${B}/.go_compiled_tests.list | 105 | rm -f ${B}/.go_compiled_tests.list |
106 | go_list_package_tests | while read pkg; do | 106 | go_list_package_tests | while read pkg; do |
107 | cd ${B}/src/$pkg | 107 | cd ${B}/src/$pkg |
108 | ${GO} test ${GOPTESTBUILDFLAGS} $pkg | 108 | ${GO} test ${GOPTESTBUILDFLAGS} $pkg |
109 | find . -mindepth 1 -maxdepth 1 -type f -name '*.test' -exec echo $pkg/{} \; | \ | 109 | find . -mindepth 1 -maxdepth 1 -type f -name '*.test' -exec echo $pkg/{} \; | \ |
110 | sed -e's,/\./,/,'>> ${B}/.go_compiled_tests.list | 110 | sed -e's,/\./,/,'>> ${B}/.go_compiled_tests.list |
111 | done | 111 | done |
112 | do_compile_ptest | ||
112 | } | 113 | } |
113 | do_compile_ptest_base[dirs] =+ "${GOTMPDIR}" | 114 | do_compile_ptest_base[dirs] =+ "${GOTMPDIR}" |
114 | 115 | ||
@@ -124,40 +125,54 @@ go_do_install() { | |||
124 | fi | 125 | fi |
125 | } | 126 | } |
126 | 127 | ||
127 | do_install_ptest_base() { | 128 | go_make_ptest_wrapper() { |
128 | test -f "${B}/.go_compiled_tests.list" || exit 0 | 129 | cat >${D}${PTEST_PATH}/run-ptest <<EOF |
129 | tests="" | ||
130 | while read test; do | ||
131 | tests="$tests${tests:+ }${test%.test}" | ||
132 | testdir=`dirname $test` | ||
133 | install -d ${D}${PTEST_PATH}/$testdir | ||
134 | install -m 0755 ${B}/src/$test ${D}${PTEST_PATH}/$test | ||
135 | if [ -d "${B}/src/$testdir/testdata" ]; then | ||
136 | cp --preserve=mode,timestamps -R "${B}/src/$testdir/testdata" ${D}${PTEST_PATH}/$testdir | ||
137 | fi | ||
138 | done < ${B}/.go_compiled_tests.list | ||
139 | if [ -n "$tests" ]; then | ||
140 | install -d ${D}${PTEST_PATH} | ||
141 | cat >${D}${PTEST_PATH}/run-ptest <<EOF | ||
142 | #!/bin/sh | 130 | #!/bin/sh |
143 | ANYFAILED=0 | 131 | RC=0 |
144 | for t in $tests; do | 132 | run_test() ( |
145 | testdir=\`dirname \$t.test\` | 133 | cd "\$1" |
146 | if ( cd "${PTEST_PATH}/\$testdir"; "${PTEST_PATH}/\$t.test" ${GOPTESTFLAGS} | tee /dev/fd/9 | grep -q "^FAIL" ) 9>&1; then | 134 | ((((./\$2 ${GOPTESTFLAGS}; echo \$? >&3) | sed -r -e"s,^(PASS|SKIP|FAIL)\$,\\1: \$1/\$2," >&4) 3>&1) | (read rc; exit \$rc)) 4>&1 |
147 | ANYFAILED=1 | 135 | exit \$?) |
148 | fi | ||
149 | done | ||
150 | if [ \$ANYFAILED -ne 0 ]; then | ||
151 | echo "FAIL: ${PN}" | ||
152 | exit 1 | ||
153 | fi | ||
154 | echo "PASS: ${PN}" | ||
155 | exit 0 | ||
156 | EOF | 136 | EOF |
157 | chmod +x ${D}${PTEST_PATH}/run-ptest | 137 | |
158 | else | 138 | } |
159 | rm -rf ${D}${PTEST_PATH} | 139 | |
160 | fi | 140 | go_stage_testdata() { |
141 | oldwd="$PWD" | ||
142 | cd ${S}/src | ||
143 | find ${GO_IMPORT} -depth -type d -name testdata | while read d; do | ||
144 | if echo "$d" | grep -q '/vendor/'; then | ||
145 | continue | ||
146 | fi | ||
147 | parent=`dirname $d` | ||
148 | install -d ${D}${PTEST_PATH}/$parent | ||
149 | cp --preserve=mode,timestamps -R $d ${D}${PTEST_PATH}/$parent/ | ||
150 | done | ||
151 | cd "$oldwd" | ||
152 | } | ||
153 | |||
154 | do_install_ptest_base() { | ||
155 | test -f "${B}/.go_compiled_tests.list" || exit 0 | ||
156 | install -d ${D}${PTEST_PATH} | ||
157 | go_stage_testdata | ||
158 | go_make_ptest_wrapper | ||
159 | havetests="" | ||
160 | while read test; do | ||
161 | testdir=`dirname $test` | ||
162 | testprog=`basename $test` | ||
163 | install -d ${D}${PTEST_PATH}/$testdir | ||
164 | install -m 0755 ${B}/src/$test ${D}${PTEST_PATH}/$test | ||
165 | echo "run_test $testdir $testprog || RC=1" >> ${D}${PTEST_PATH}/run-ptest | ||
166 | havetests="yes" | ||
167 | done < ${B}/.go_compiled_tests.list | ||
168 | if [ -n "$havetests" ]; then | ||
169 | echo "exit \$RC" >> ${D}${PTEST_PATH}/run-ptest | ||
170 | chmod +x ${D}${PTEST_PATH}/run-ptest | ||
171 | else | ||
172 | rm -rf ${D}${PTEST_PATH} | ||
173 | fi | ||
174 | do_install_ptest | ||
175 | chown -R root:root ${D}${PTEST_PATH} | ||
161 | } | 176 | } |
162 | 177 | ||
163 | EXPORT_FUNCTIONS do_unpack do_configure do_compile do_install | 178 | EXPORT_FUNCTIONS do_unpack do_configure do_compile do_install |