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.

(From OE-Core rev: c62a083306c26b7e4deca1ff41336bb6b33d5b3a)

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>
This commit is contained in:
Matt Madison
2017-09-08 18:04:40 -03:00
committed by Richard Purdie
parent f01000da80
commit 07ef4dd93d

View 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 -
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 -
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
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