From: Stefan Herbrechtsmeier <stefan.herbrechtsme...@weidmueller.com>

Add a vendor class for go to resolve the dependency SRC_URIs from a
go.sum file and run populate the go mod vendor folder.

Signed-off-by: Stefan Herbrechtsmeier <stefan.herbrechtsme...@weidmueller.com>
---

 meta/classes-recipe/vendor_go.bbclass | 59 +++++++++++++++++++++++++++
 1 file changed, 59 insertions(+)
 create mode 100644 meta/classes-recipe/vendor_go.bbclass

diff --git a/meta/classes-recipe/vendor_go.bbclass 
b/meta/classes-recipe/vendor_go.bbclass
new file mode 100644
index 0000000000..dc5f8d1d8d
--- /dev/null
+++ b/meta/classes-recipe/vendor_go.bbclass
@@ -0,0 +1,59 @@
+# Copyright (C) 2025 Weidmueller Interface GmbH & Co. KG
+# Stefan Herbrechtsmeier <stefan.herbrechtsme...@weidmueller.com>
+#
+# SPDX-License-Identifier: MIT
+#
+
+# The directory of the go.mod file relative to the root directory, per default
+# assume there's a file directly in the root directory
+GO_SRC_DIR ?= ""
+
+# The path to the go.mod file
+GO_MANIFEST_DIR ?= "${GO_SRC_PATH}/go.mod"
+
+# The path to go.sum file
+GO_LOCK_DIR ?= "${@os.path.join(os.path.dirname(d.getVar('GO_MANIFEST_DIR')), 
'go.sum')}"
+
+# The URL of the go proxy
+GO_PROXY ?= "https://proxy.golang.org";
+
+GO_SRC_PATH = "${S}/${GO_SRC_DIR}"
+GO_SRC_SUBDIR = "${@os.path.relpath(d.getVar('CARGO_SRC_PATH'), 
d.getVar('WORKDIR'))}"
+GO_SRC_URI_FILE = "${VENDOR_DIR}/go-source-uris.txt"
+SRC_URI_FILES:append = " ${GO_SRC_URI_FILE}"
+
+inherit go-mod vendor
+
+GO_INSTALL_PREFIX = "."
+GO_SRC_PATH = "${S}"
+GO_SRCURI_DESTSUFFIX = ""
+
+GOMODCACHE = "invalid"
+GO_MOD_CACHE_DIR = "go/pkg/mod"
+GO_WORKPATH = "${GO_SRC_PATH}"
+GO_MOD_RECRDEPTASK = ""
+
+GOBUILDFLAGS:append = " -mod=vendor"
+
+python vendor_go_do_vendor_resolve() {
+    import oe.vendor
+    import oe.vendor.go
+
+    lock_file_dir = d.getVar("GO_LOCK_DIR")
+    lock_file_subdir = get_early_source_dir(d, lock_file_dir)
+    proxy = d.getVar("GO_PROXY")
+    cache_subdir = d.getVar("GO_MOD_CACHE_DIR")
+    src_uris = oe.vendor.go.resolve_src_uris(lock_file_subdir, proxy, 
cache_subdir)
+    with open(d.getVar("GO_SRC_URI_FILE"), "w") as f:
+        oe.vendor.dump(f, src_uris)
+}
+
+run_go_mod_vendor() {
+    cd ${GO_SRC_PATH}
+    export GOMODCACHE="${UNPACKDIR}/${GO_MOD_CACHE_DIR}"
+    ${GO} mod vendor
+}
+do_unpack[postfuncs] += "run_go_mod_vendor"
+do_unpack[depends] += 
"${@oe.utils.build_depends_string(d.getVar('DEPENDS_GOLANG'), 
'do_populate_sysroot')}"
+
+EXPORT_FUNCTIONS do_vendor_resolve
-- 
2.39.5

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#211143): 
https://lists.openembedded.org/g/openembedded-core/message/211143
Mute This Topic: https://lists.openembedded.org/mt/111123541/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to