]> code.ossystems Code Review - openembedded-core.git/commitdiff
go.bbclass: separate ${S} and ${B}
authorMatt Madison <matt@madison.systems>
Fri, 8 Sep 2017 21:04:40 +0000 (18:04 -0300)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Mon, 11 Sep 2017 16:30:15 +0000 (17:30 +0100)
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>
meta/classes/go.bbclass

index 82b5f83aa056ea0d01c62ac770b0adf7b618b5f2..cfe773e13d492d455870b374640ba62b72db0a16 100644 (file)
@@ -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