aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Madison <matt@madison.systems>2017-09-08 18:04:40 -0300
committerRichard Purdie <richard.purdie@linuxfoundation.org>2017-09-11 17:30:15 +0100
commitc62a083306c26b7e4deca1ff41336bb6b33d5b3a (patch)
tree96d02e37cbbe3481628e79048c43fea795876296
parent497136297f15858903b5170a8616d0cb427a995d (diff)
downloadopenembedded-core-contrib-c62a083306c26b7e4deca1ff41336bb6b33d5b3a.tar.gz
openembedded-core-contrib-c62a083306c26b7e4deca1ff41336bb6b33d5b3a.tar.bz2
openembedded-core-contrib-c62a083306c26b7e4deca1ff41336bb6b33d5b3a.zip
go.bbclass: separate ${S} and ${B}
Add a do_configure task to populate ${B} by symlinking in the src subdirectory under ${S}, which lets us point GOPATH at ${B}. This lets us take advantage of the automatic directory creation and cleaning for do_configure. This necessitates a change to do_install to split the installation of the sources and built artifacts. Taking advantage of some additional tar options, we can eliminate the extra staging area and extra recursive chown command. So overall efficiency should be improved. Signed-off-by: Matt Madison <matt@madison.systems> Signed-off-by: Otavio Salvador <otavio@ossystems.com.br> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/classes/go.bbclass46
1 files changed, 18 insertions, 28 deletions
diff --git a/meta/classes/go.bbclass b/meta/classes/go.bbclass
index 82b5f83aa05..cfe773e13d4 100644
--- a/meta/classes/go.bbclass
+++ b/meta/classes/go.bbclass
@@ -53,40 +53,30 @@ FILES_${PN}-staticdev += "${GOPKG_FINAL}/${GO_IMPORT}*"
GO_INSTALL ?= "${GO_IMPORT}/..."
+B = "${WORKDIR}/build"
+
+go_do_configure() {
+ ln -snf ${S}/src ${B}/
+}
+
go_do_compile() {
- GOPATH=${S}:${STAGING_LIBDIR}/${TARGET_SYS}/go go env
+ GOPATH=${B}:${STAGING_LIBDIR}/${TARGET_SYS}/go go env
if [ -n "${GO_INSTALL}" ]; then
- GOPATH=${S}:${STAGING_LIBDIR}/${TARGET_SYS}/go go install ${GOBUILDFLAGS} ${GO_INSTALL}
+ GOPATH=${B}:${STAGING_LIBDIR}/${TARGET_SYS}/go go install ${GOBUILDFLAGS} ${GO_INSTALL}
fi
}
+do_compile[cleandirs] = "${B}/bin ${B}/pkg"
go_do_install() {
- rm -rf ${WORKDIR}/staging
- install -d ${WORKDIR}/staging${GOROOT_FINAL} ${D}${GOROOT_FINAL}
- tar -C ${S} -cf - . | tar -C ${WORKDIR}/staging${GOROOT_FINAL} -xpvf -
-
- find ${WORKDIR}/staging${GOROOT_FINAL} \( \
- -name \*.indirectionsymlink -o \
- -name .git\* -o \
- -name .hg -o \
- -name .svn -o \
- -name .pc\* -o \
- -name patches\* \
- \) -print0 | \
- xargs -r0 rm -rf
-
- tar -C ${WORKDIR}/staging${GOROOT_FINAL} -cf - . | \
- tar -C ${D}${GOROOT_FINAL} -xpvf -
-
- chown -R root:root "${D}${GOROOT_FINAL}"
-
- if [ -e "${D}${GOBIN_FINAL}" ]; then
- install -d -m 0755 "${D}${bindir}"
- find "${D}${GOBIN_FINAL}" ! -type d -print0 | xargs -r0 mv --target-directory="${D}${bindir}"
- rmdir -p "${D}${GOBIN_FINAL}" || true
+ install -d ${D}${GOROOT_FINAL}/src/${GO_IMPORT}
+ tar -C ${S}/src/${GO_IMPORT} -cf - --exclude-vcs . | \
+ tar -C ${D}${GOROOT_FINAL}/src/${GO_IMPORT} --no-same-owner -xf -
+ tar -C ${B} -cf - pkg | tar -C ${D}${GOROOT_FINAL} --no-same-owner -xf -
+
+ if [ -n "`ls ${B}/${GO_BUILD_BINDIR}/`" ]; then
+ install -d ${D}${bindir}
+ install -m 0755 ${B}/${GO_BUILD_BINDIR}/* ${D}${bindir}/
fi
}
-do_install[dirs] =+ "${WORKDIR}/staging"
-do_install[cleandirs] += "${WORKDIR}/staging"
-EXPORT_FUNCTIONS do_compile do_install
+EXPORT_FUNCTIONS do_configure do_compile do_install