From 6a4e730003d4adec28fa14baa78020c8c8b53887 Mon Sep 17 00:00:00 2001
From: Steve Ruckdashel <steven.ruckdashel@optum.com>
Date: Tue, 8 Dec 2020 03:47:56 -0600
Subject: [PATCH] crypto/secp256k1: add workaround for go mod vendor (#21735)

Go won't vendor C files if there are no Go files present in the directory.
Workaround is to add dummy Go files.

Fixes: #20232
---
 crypto/secp256k1/dummy.go                     | 20 +++++++++++++++++++
 .../secp256k1/libsecp256k1/contrib/dummy.go   |  7 +++++++
 crypto/secp256k1/libsecp256k1/dummy.go        |  7 +++++++
 .../secp256k1/libsecp256k1/include/dummy.go   |  7 +++++++
 crypto/secp256k1/libsecp256k1/src/dummy.go    |  7 +++++++
 .../libsecp256k1/src/modules/dummy.go         |  7 +++++++
 .../libsecp256k1/src/modules/ecdh/dummy.go    |  7 +++++++
 .../src/modules/recovery/dummy.go             |  7 +++++++
 8 files changed, 69 insertions(+)
 create mode 100644 crypto/secp256k1/dummy.go
 create mode 100644 crypto/secp256k1/libsecp256k1/contrib/dummy.go
 create mode 100644 crypto/secp256k1/libsecp256k1/dummy.go
 create mode 100644 crypto/secp256k1/libsecp256k1/include/dummy.go
 create mode 100644 crypto/secp256k1/libsecp256k1/src/dummy.go
 create mode 100644 crypto/secp256k1/libsecp256k1/src/modules/dummy.go
 create mode 100644 crypto/secp256k1/libsecp256k1/src/modules/ecdh/dummy.go
 create mode 100644 crypto/secp256k1/libsecp256k1/src/modules/recovery/dummy.go

diff --git a/crypto/secp256k1/dummy.go b/crypto/secp256k1/dummy.go
new file mode 100644
index 000000000..c0f2ee52c
--- /dev/null
+++ b/crypto/secp256k1/dummy.go
@@ -0,0 +1,20 @@
+// +build dummy
+
+// This file is part of a workaround for `go mod vendor` which won't vendor
+// C files if there's no Go file in the same directory.
+// This would prevent the crypto/secp256k1/libsecp256k1/include/secp256k1.h file to be vendored.
+//
+// This Go file imports the c directory where there is another dummy.go file which
+// is the second part of this workaround.
+//
+// These two files combined make it so `go mod vendor` behaves correctly.
+//
+// See this issue for reference: https://github.com/golang/go/issues/26366
+
+package secp256k1
+
+import (
+	_ "github.com/ethereum/go-ethereum/crypto/secp256k1/libsecp256k1/include"
+	_ "github.com/ethereum/go-ethereum/crypto/secp256k1/libsecp256k1/src"
+	_ "github.com/ethereum/go-ethereum/crypto/secp256k1/libsecp256k1/src/modules/recovery"
+)
diff --git a/crypto/secp256k1/libsecp256k1/contrib/dummy.go b/crypto/secp256k1/libsecp256k1/contrib/dummy.go
new file mode 100644
index 000000000..fda594be9
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/contrib/dummy.go
@@ -0,0 +1,7 @@
+// +build dummy
+
+// Package c contains only a C file.
+//
+// This Go file is part of a workaround for `go mod vendor`.
+// Please see the file crypto/secp256k1/dummy.go for more information.
+package contrib
diff --git a/crypto/secp256k1/libsecp256k1/dummy.go b/crypto/secp256k1/libsecp256k1/dummy.go
new file mode 100644
index 000000000..379b16992
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/dummy.go
@@ -0,0 +1,7 @@
+// +build dummy
+
+// Package c contains only a C file.
+//
+// This Go file is part of a workaround for `go mod vendor`.
+// Please see the file crypto/secp256k1/dummy.go for more information.
+package libsecp256k1
diff --git a/crypto/secp256k1/libsecp256k1/include/dummy.go b/crypto/secp256k1/libsecp256k1/include/dummy.go
new file mode 100644
index 000000000..5af540c73
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/include/dummy.go
@@ -0,0 +1,7 @@
+// +build dummy
+
+// Package c contains only a C file.
+//
+// This Go file is part of a workaround for `go mod vendor`.
+// Please see the file crypto/secp256k1/dummy.go for more information.
+package include
diff --git a/crypto/secp256k1/libsecp256k1/src/dummy.go b/crypto/secp256k1/libsecp256k1/src/dummy.go
new file mode 100644
index 000000000..65868f38a
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/dummy.go
@@ -0,0 +1,7 @@
+// +build dummy
+
+// Package c contains only a C file.
+//
+// This Go file is part of a workaround for `go mod vendor`.
+// Please see the file crypto/secp256k1/dummy.go for more information.
+package src
diff --git a/crypto/secp256k1/libsecp256k1/src/modules/dummy.go b/crypto/secp256k1/libsecp256k1/src/modules/dummy.go
new file mode 100644
index 000000000..3c7a69643
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/modules/dummy.go
@@ -0,0 +1,7 @@
+// +build dummy
+
+// Package c contains only a C file.
+//
+// This Go file is part of a workaround for `go mod vendor`.
+// Please see the file crypto/secp256k1/dummy.go for more information.
+package module
diff --git a/crypto/secp256k1/libsecp256k1/src/modules/ecdh/dummy.go b/crypto/secp256k1/libsecp256k1/src/modules/ecdh/dummy.go
new file mode 100644
index 000000000..b6fc38327
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/modules/ecdh/dummy.go
@@ -0,0 +1,7 @@
+// +build dummy
+
+// Package c contains only a C file.
+//
+// This Go file is part of a workaround for `go mod vendor`.
+// Please see the file crypto/secp256k1/dummy.go for more information.
+package ecdh
diff --git a/crypto/secp256k1/libsecp256k1/src/modules/recovery/dummy.go b/crypto/secp256k1/libsecp256k1/src/modules/recovery/dummy.go
new file mode 100644
index 000000000..b9491f0cb
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/modules/recovery/dummy.go
@@ -0,0 +1,7 @@
+// +build dummy
+
+// Package c contains only a C file.
+//
+// This Go file is part of a workaround for `go mod vendor`.
+// Please see the file crypto/secp256k1/dummy.go for more information.
+package recovery
-- 
GitLab